817 [mk_mor car_inits str_inits Bs ss init_fs, |
817 [mk_mor car_inits str_inits Bs ss init_fs, |
818 mk_mor car_inits str_inits Bs ss init_fs_copy]; |
818 mk_mor car_inits str_inits Bs ss init_fs_copy]; |
819 fun mk_fun_eq f g x = HOLogic.mk_eq (f $ x, g $ x); |
819 fun mk_fun_eq f g x = HOLogic.mk_eq (f $ x, g $ x); |
820 val unique = HOLogic.mk_Trueprop |
820 val unique = HOLogic.mk_Trueprop |
821 (Library.foldr1 HOLogic.mk_conj (map3 mk_fun_eq init_fs init_fs_copy init_xs)); |
821 (Library.foldr1 HOLogic.mk_conj (map3 mk_fun_eq init_fs init_fs_copy init_xs)); |
822 val unique_mor = Goal.prove_sorry lthy [] [] |
822 val cts = map (certify lthy) ss; |
823 (fold_rev Logic.all (init_xs @ Bs @ ss @ init_fs @ init_fs_copy) |
823 val unique_mor = singleton (Proof_Context.export names_lthy lthy) |
824 (Logic.list_implies (prems @ mor_prems, unique))) |
824 (Goal.prove_sorry lthy [] [] |
825 (K (mk_init_unique_mor_tac m alg_def alg_init_thm least_min_alg_thms |
825 (fold_rev Logic.all (init_xs @ Bs @ init_fs @ init_fs_copy) |
826 in_mono'_thms alg_set_thms morE_thms map_cong0s)) |
826 (Logic.list_implies (prems @ mor_prems, unique))) |
827 |> Thm.close_derivation; |
827 (K (mk_init_unique_mor_tac cts m alg_def alg_init_thm least_min_alg_thms |
|
828 in_mono'_thms alg_set_thms morE_thms map_cong0s)) |
|
829 |> Thm.close_derivation); |
828 in |
830 in |
829 split_conj_thm unique_mor |
831 split_conj_thm unique_mor |
830 end; |
832 end; |
831 |
833 |
832 val init_setss = mk_setss (passiveAs @ active_initTs); |
834 val init_setss = mk_setss (passiveAs @ active_initTs); |
949 (fn {context = ctxt, prems = _} => mk_mor_Rep_tac ctxt m defs Reps Abs_inverses |
951 (fn {context = ctxt, prems = _} => mk_mor_Rep_tac ctxt m defs Reps Abs_inverses |
950 alg_min_alg_thm alg_set_thms set_mapss) |
952 alg_min_alg_thm alg_set_thms set_mapss) |
951 |> Thm.close_derivation; |
953 |> Thm.close_derivation; |
952 |
954 |
953 fun mk_ct initFT str abs = Term.absdummy initFT (abs $ (str $ Bound 0)) |
955 fun mk_ct initFT str abs = Term.absdummy initFT (abs $ (str $ Bound 0)) |
954 val cts = map3 (SOME o certify lthy ooo mk_ct) init_FTs str_inits Abs_Ts; |
956 val cts = map3 (certify lthy ooo mk_ct) init_FTs str_inits Abs_Ts; |
955 |
957 |
956 val mor_Abs = |
958 val mor_Abs = |
957 Goal.prove_sorry lthy [] [] |
959 Goal.prove_sorry lthy [] [] |
958 (HOLogic.mk_Trueprop (mk_mor car_inits str_inits UNIVs ctors Abs_Ts)) |
960 (HOLogic.mk_Trueprop (mk_mor car_inits str_inits UNIVs ctors Abs_Ts)) |
959 (fn {context = ctxt, prems = _} => mk_mor_Abs_tac ctxt cts defs Abs_inverses |
961 (fn {context = ctxt, prems = _} => mk_mor_Abs_tac ctxt cts defs Abs_inverses |