equal
deleted
inserted
replaced
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 => |