src/HOL/BNF/Tools/bnf_lfp.ML
changeset 54793 c99f0fdb0886
parent 54557 d71c2737ee21
child 54841 af71b753c459
equal deleted inserted replaced
54792:641ea768f535 54793:c99f0fdb0886
  1495             `split_conj_thm unique
  1495             `split_conj_thm unique
  1496           end;
  1496           end;
  1497 
  1497 
  1498         val timer = time (timer "map functions for the new datatypes");
  1498         val timer = time (timer "map functions for the new datatypes");
  1499 
  1499 
  1500         val bd = mk_cpow sum_bd;
       
  1501         val bd_Cinfinite = sum_Cinfinite RS @{thm Cinfinite_cpow};
       
  1502         fun mk_cpow_bd thm = @{thm ordLeq_transitive} OF
       
  1503           [thm, sum_Card_order RS @{thm cpow_greater_eq}];
       
  1504         val set_bd_cpowss = map (map mk_cpow_bd) set_bd_sumss;
       
  1505 
       
  1506         val timer = time (timer "bounds for the new datatypes");
       
  1507 
       
  1508         val ls = 1 upto m;
  1500         val ls = 1 upto m;
  1509         val setsss = map (mk_setss o mk_set_Ts) passiveAs;
  1501         val setsss = map (mk_setss o mk_set_Ts) passiveAs;
  1510         val map_setss = map (fn T => map2 (fn Ds =>
  1502         val map_setss = map (fn T => map2 (fn Ds =>
  1511           mk_map_of_bnf Ds (passiveAs @ Ts) (mk_set_Ts T)) Dss bnfs) passiveAs;
  1503           mk_map_of_bnf Ds (passiveAs @ Ts) (mk_set_Ts T)) Dss bnfs) passiveAs;
  1512 
  1504 
  1600             map split_conj_thm thms
  1592             map split_conj_thm thms
  1601           end;
  1593           end;
  1602 
  1594 
  1603         val set_bd_thmss =
  1595         val set_bd_thmss =
  1604           let
  1596           let
  1605             fun mk_set_bd z set = mk_ordLeq (mk_card_of (set $ z)) bd;
  1597             fun mk_set_bd z set = mk_ordLeq (mk_card_of (set $ z)) sum_bd;
  1606 
  1598 
  1607             fun mk_cphi z set = certify lthy (Term.absfree (dest_Free z) (mk_set_bd z set));
  1599             fun mk_cphi z set = certify lthy (Term.absfree (dest_Free z) (mk_set_bd z set));
  1608 
  1600 
  1609             val cphiss = map (map2 mk_cphi Izs) setss_by_range;
  1601             val cphiss = map (map2 mk_cphi Izs) setss_by_range;
  1610 
  1602 
  1614             val goals =
  1606             val goals =
  1615               map (fn sets =>
  1607               map (fn sets =>
  1616                 HOLogic.mk_Trueprop (Library.foldr1 HOLogic.mk_conj
  1608                 HOLogic.mk_Trueprop (Library.foldr1 HOLogic.mk_conj
  1617                   (map2 mk_set_bd Izs sets))) setss_by_range;
  1609                   (map2 mk_set_bd Izs sets))) setss_by_range;
  1618 
  1610 
  1619             fun mk_tac induct = mk_set_bd_tac m (rtac induct) bd_Cinfinite set_bd_cpowss;
  1611             fun mk_tac induct = mk_set_bd_tac m (rtac induct) sum_Cinfinite set_bd_sumss;
  1620             val thms =
  1612             val thms =
  1621               map4 (fn goal => fn ctor_sets => fn induct => fn i =>
  1613               map4 (fn goal => fn ctor_sets => fn induct => fn i =>
  1622                 singleton (Proof_Context.export names_lthy lthy)
  1614                 singleton (Proof_Context.export names_lthy lthy)
  1623                   (Goal.prove_sorry lthy [] [] goal (mk_tac induct ctor_sets i))
  1615                   (Goal.prove_sorry lthy [] [] goal (mk_tac induct ctor_sets i))
  1624                 |> Thm.close_derivation)
  1616                 |> Thm.close_derivation)
  1705         val map_comp0_tacs =
  1697         val map_comp0_tacs =
  1706           map2 (K oo mk_map_comp0_tac map_comps ctor_map_thms) ctor_map_unique_thms ks;
  1698           map2 (K oo mk_map_comp0_tac map_comps ctor_map_thms) ctor_map_unique_thms ks;
  1707         val map_cong0_tacs = map (mk_map_cong0_tac m) map_cong0_thms;
  1699         val map_cong0_tacs = map (mk_map_cong0_tac m) map_cong0_thms;
  1708         val set_nat_tacss = map (map (K o mk_set_map0_tac)) (transpose set_map0_thmss);
  1700         val set_nat_tacss = map (map (K o mk_set_map0_tac)) (transpose set_map0_thmss);
  1709         val bd_co_tacs = replicate n (K (mk_bd_card_order_tac bd_card_orders));
  1701         val bd_co_tacs = replicate n (K (mk_bd_card_order_tac bd_card_orders));
  1710         val bd_cinf_tacs = replicate n (K (rtac (bd_Cinfinite RS conjunct1) 1));
  1702         val bd_cinf_tacs = replicate n (K (rtac (sum_Cinfinite RS conjunct1) 1));
  1711         val set_bd_tacss = map (map (fn thm => K (rtac thm 1))) (transpose set_bd_thmss);
  1703         val set_bd_tacss = map (map (fn thm => K (rtac thm 1))) (transpose set_bd_thmss);
  1712         val map_wpull_tacs = map (K o mk_wpull_tac) map_wpull_thms;
  1704         val map_wpull_tacs = map (K o mk_wpull_tac) map_wpull_thms;
  1713 
  1705 
  1714         val rel_OO_Grp_tacs = replicate n (K (rtac refl 1));
  1706         val rel_OO_Grp_tacs = replicate n (K (rtac refl 1));
  1715 
  1707 
  1751         val (Ibnfs, lthy) =
  1743         val (Ibnfs, lthy) =
  1752           fold_map9 (fn tacs => fn b => fn map_b => fn rel_b => fn set_bs => fn mapx => fn sets =>
  1744           fold_map9 (fn tacs => fn b => fn map_b => fn rel_b => fn set_bs => fn mapx => fn sets =>
  1753               fn T => fn wits => fn lthy =>
  1745               fn T => fn wits => fn lthy =>
  1754             bnf_def Dont_Inline (user_policy Note_Some) I tacs wit_tac (SOME deads)
  1746             bnf_def Dont_Inline (user_policy Note_Some) I tacs wit_tac (SOME deads)
  1755               map_b rel_b set_bs
  1747               map_b rel_b set_bs
  1756               ((((((b, T), fold_rev Term.absfree fs' mapx), sets), bd), wits), NONE)
  1748               ((((((b, T), fold_rev Term.absfree fs' mapx), sets), sum_bd), wits), NONE)
  1757               lthy
  1749               lthy
  1758             |> register_bnf (Local_Theory.full_name lthy b))
  1750             |> register_bnf (Local_Theory.full_name lthy b))
  1759           tacss bs map_bs rel_bs set_bss fs_maps setss_by_bnf Ts ctor_witss lthy;
  1751           tacss bs map_bs rel_bs set_bss fs_maps setss_by_bnf Ts ctor_witss lthy;
  1760 
  1752 
  1761         val fold_maps = fold_thms lthy (map (fn bnf =>
  1753         val fold_maps = fold_thms lthy (map (fn bnf =>