src/HOL/Tools/BNF/bnf_lfp.ML
changeset 56263 9b32aafecec1
parent 56237 69a9dfe71aed
child 56272 159c07ceb18c
equal deleted inserted replaced
56262:251f60be62a7 56263:9b32aafecec1
   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