src/HOL/BNF/Tools/bnf_lfp.ML
changeset 53289 5e0623448bdb
parent 53288 050d0bc9afa5
child 53290 b6c3be868217
equal deleted inserted replaced
53288:050d0bc9afa5 53289:5e0623448bdb
  1555         val cxs = map (SOME o certify lthy) Izs;
  1555         val cxs = map (SOME o certify lthy) Izs;
  1556         val setss_by_bnf' =
  1556         val setss_by_bnf' =
  1557           map (map (Term.subst_atomic_types (passiveAs ~~ passiveBs))) setss_by_bnf;
  1557           map (map (Term.subst_atomic_types (passiveAs ~~ passiveBs))) setss_by_bnf;
  1558         val setss_by_range' = transpose setss_by_bnf';
  1558         val setss_by_range' = transpose setss_by_bnf';
  1559 
  1559 
  1560         val set_map_thmss =
  1560         val set_map0_thmss =
  1561           let
  1561           let
  1562             fun mk_set_map f map z set set' =
  1562             fun mk_set_map0 f map z set set' =
  1563               HOLogic.mk_eq (mk_image f $ (set $ z), set' $ (map $ z));
  1563               HOLogic.mk_eq (mk_image f $ (set $ z), set' $ (map $ z));
  1564 
  1564 
  1565             fun mk_cphi f map z set set' = certify lthy
  1565             fun mk_cphi f map z set set' = certify lthy
  1566               (Term.absfree (dest_Free z) (mk_set_map f map z set set'));
  1566               (Term.absfree (dest_Free z) (mk_set_map0 f map z set set'));
  1567 
  1567 
  1568             val csetss = map (map (certify lthy)) setss_by_range';
  1568             val csetss = map (map (certify lthy)) setss_by_range';
  1569 
  1569 
  1570             val cphiss = map3 (fn f => fn sets => fn sets' =>
  1570             val cphiss = map3 (fn f => fn sets => fn sets' =>
  1571               (map4 (mk_cphi f) fs_maps Izs sets sets')) fs setss_by_range setss_by_range';
  1571               (map4 (mk_cphi f) fs_maps Izs sets sets')) fs setss_by_range setss_by_range';
  1574               Drule.instantiate' cTs (map SOME cphis @ cxs) ctor_induct_thm) cphiss;
  1574               Drule.instantiate' cTs (map SOME cphis @ cxs) ctor_induct_thm) cphiss;
  1575 
  1575 
  1576             val goals =
  1576             val goals =
  1577               map3 (fn f => fn sets => fn sets' =>
  1577               map3 (fn f => fn sets => fn sets' =>
  1578                 HOLogic.mk_Trueprop (Library.foldr1 HOLogic.mk_conj
  1578                 HOLogic.mk_Trueprop (Library.foldr1 HOLogic.mk_conj
  1579                   (map4 (mk_set_map f) fs_maps Izs sets sets')))
  1579                   (map4 (mk_set_map0 f) fs_maps Izs sets sets')))
  1580                   fs setss_by_range setss_by_range';
  1580                   fs setss_by_range setss_by_range';
  1581 
  1581 
  1582             fun mk_tac induct = mk_set_nat_tac m (rtac induct) set_map'ss ctor_map_thms;
  1582             fun mk_tac induct = mk_set_nat_tac m (rtac induct) set_map'ss ctor_map_thms;
  1583             val thms =
  1583             val thms =
  1584               map5 (fn goal => fn csets => fn ctor_sets => fn induct => fn i =>
  1584               map5 (fn goal => fn csets => fn ctor_sets => fn induct => fn i =>
  1693 
  1693 
  1694         val map_id0_tacs = map (K o mk_map_id0_tac map_id0s) ctor_map_unique_thms;
  1694         val map_id0_tacs = map (K o mk_map_id0_tac map_id0s) ctor_map_unique_thms;
  1695         val map_comp0_tacs =
  1695         val map_comp0_tacs =
  1696           map2 (K oo mk_map_comp0_tac map_comps ctor_map_thms) ctor_map_unique_thms ks;
  1696           map2 (K oo mk_map_comp0_tac map_comps ctor_map_thms) ctor_map_unique_thms ks;
  1697         val map_cong0_tacs = map (mk_map_cong0_tac m) map_cong0_thms;
  1697         val map_cong0_tacs = map (mk_map_cong0_tac m) map_cong0_thms;
  1698         val set_nat_tacss = map (map (K o mk_set_map_tac)) (transpose set_map_thmss);
  1698         val set_nat_tacss = map (map (K o mk_set_map0_tac)) (transpose set_map0_thmss);
  1699         val bd_co_tacs = replicate n (K (mk_bd_card_order_tac bd_card_orders));
  1699         val bd_co_tacs = replicate n (K (mk_bd_card_order_tac bd_card_orders));
  1700         val bd_cinf_tacs = replicate n (K (rtac (bd_Cinfinite RS conjunct1) 1));
  1700         val bd_cinf_tacs = replicate n (K (rtac (bd_Cinfinite RS conjunct1) 1));
  1701         val set_bd_tacss = map (map (fn thm => K (rtac thm 1))) (transpose set_bd_thmss);
  1701         val set_bd_tacss = map (map (fn thm => K (rtac thm 1))) (transpose set_bd_thmss);
  1702         val map_wpull_tacs = map (K o mk_wpull_tac) map_wpull_thms;
  1702         val map_wpull_tacs = map (K o mk_wpull_tac) map_wpull_thms;
  1703 
  1703 
  1773               (mk_Trueprop_eq (Irelphi $ (ctor $ xF) $ (ctor' $ yF), relphi $ xF $ yF));
  1773               (mk_Trueprop_eq (Irelphi $ (ctor $ xF) $ (ctor' $ yF), relphi $ xF $ yF));
  1774             val goals = map6 mk_goal xFs yFs ctors ctor's Irelphis relphis;
  1774             val goals = map6 mk_goal xFs yFs ctors ctor's Irelphis relphis;
  1775           in
  1775           in
  1776             map12 (fn i => fn goal => fn in_rel => fn map_comp0 => fn map_cong0 =>
  1776             map12 (fn i => fn goal => fn in_rel => fn map_comp0 => fn map_cong0 =>
  1777               fn ctor_map => fn ctor_sets => fn ctor_inject => fn ctor_dtor =>
  1777               fn ctor_map => fn ctor_sets => fn ctor_inject => fn ctor_dtor =>
  1778               fn set_maps => fn ctor_set_incls => fn ctor_set_set_inclss =>
  1778               fn set_map0s => fn ctor_set_incls => fn ctor_set_set_inclss =>
  1779               Goal.prove_sorry lthy [] [] goal
  1779               Goal.prove_sorry lthy [] [] goal
  1780                (K (mk_ctor_rel_tac lthy in_Irels i in_rel map_comp0 map_cong0 ctor_map ctor_sets
  1780                (K (mk_ctor_rel_tac lthy in_Irels i in_rel map_comp0 map_cong0 ctor_map ctor_sets
  1781                  ctor_inject ctor_dtor set_maps ctor_set_incls ctor_set_set_inclss))
  1781                  ctor_inject ctor_dtor set_map0s ctor_set_incls ctor_set_set_inclss))
  1782               |> Thm.close_derivation)
  1782               |> Thm.close_derivation)
  1783             ks goals in_rels map_comps map_cong0s folded_ctor_map_thms folded_ctor_set_thmss'
  1783             ks goals in_rels map_comps map_cong0s folded_ctor_map_thms folded_ctor_set_thmss'
  1784               ctor_inject_thms ctor_dtor_thms set_map'ss ctor_set_incl_thmss
  1784               ctor_inject_thms ctor_dtor_thms set_map'ss ctor_set_incl_thmss
  1785               ctor_set_set_incl_thmsss
  1785               ctor_set_set_incl_thmsss
  1786           end;
  1786           end;