83 val pred_map_of_bnf: bnf -> thm |
83 val pred_map_of_bnf: bnf -> thm |
84 val pred_mono_strong0_of_bnf: bnf -> thm |
84 val pred_mono_strong0_of_bnf: bnf -> thm |
85 val pred_mono_strong_of_bnf: bnf -> thm |
85 val pred_mono_strong_of_bnf: bnf -> thm |
86 val pred_set_of_bnf: bnf -> thm |
86 val pred_set_of_bnf: bnf -> thm |
87 val pred_rel_of_bnf: bnf -> thm |
87 val pred_rel_of_bnf: bnf -> thm |
|
88 val pred_transfer_of_bnf: bnf -> thm |
|
89 val pred_True_of_bnf: bnf -> thm |
88 val rel_Grp_of_bnf: bnf -> thm |
90 val rel_Grp_of_bnf: bnf -> thm |
89 val rel_OO_Grp_of_bnf: bnf -> thm |
91 val rel_OO_Grp_of_bnf: bnf -> thm |
90 val rel_OO_of_bnf: bnf -> thm |
92 val rel_OO_of_bnf: bnf -> thm |
91 val rel_cong0_of_bnf: bnf -> thm |
93 val rel_cong0_of_bnf: bnf -> thm |
92 val rel_cong_of_bnf: bnf -> thm |
94 val rel_cong_of_bnf: bnf -> thm |
288 rel_reflp: thm lazy, |
290 rel_reflp: thm lazy, |
289 rel_symp: thm lazy, |
291 rel_symp: thm lazy, |
290 rel_transp: thm lazy, |
292 rel_transp: thm lazy, |
291 rel_transfer: thm lazy, |
293 rel_transfer: thm lazy, |
292 rel_eq_onp: thm lazy, |
294 rel_eq_onp: thm lazy, |
|
295 pred_transfer: thm lazy, |
293 pred_True: thm lazy, |
296 pred_True: thm lazy, |
294 pred_map: thm lazy, |
297 pred_map: thm lazy, |
295 pred_rel: thm lazy, |
298 pred_rel: thm lazy, |
296 pred_mono_strong0: thm lazy, |
299 pred_mono_strong0: thm lazy, |
297 pred_mono_strong: thm lazy, |
300 pred_mono_strong: thm lazy, |
302 |
305 |
303 fun mk_facts bd_Card_order bd_Cinfinite bd_Cnotzero collect_set_map in_bd in_cong in_mono in_rel |
306 fun mk_facts bd_Card_order bd_Cinfinite bd_Cnotzero collect_set_map in_bd in_cong in_mono in_rel |
304 inj_map inj_map_strong map_comp map_cong map_cong_simp map_cong_pred map_id map_ident0 map_ident |
307 inj_map inj_map_strong map_comp map_cong map_cong_simp map_cong_pred map_id map_ident0 map_ident |
305 map_transfer rel_eq rel_flip set_map rel_cong0 rel_cong rel_cong_simp rel_map rel_mono |
308 map_transfer rel_eq rel_flip set_map rel_cong0 rel_cong rel_cong_simp rel_map rel_mono |
306 rel_mono_strong0 rel_mono_strong set_transfer rel_Grp rel_conversep rel_OO rel_refl |
309 rel_mono_strong0 rel_mono_strong set_transfer rel_Grp rel_conversep rel_OO rel_refl |
307 rel_refl_strong rel_reflp rel_symp rel_transp rel_transfer rel_eq_onp pred_True pred_map pred_rel |
310 rel_refl_strong rel_reflp rel_symp rel_transp rel_transfer rel_eq_onp pred_transfer pred_True |
308 pred_mono_strong0 pred_mono_strong pred_cong0 pred_cong pred_cong_simp = { |
311 pred_map pred_rel pred_mono_strong0 pred_mono_strong pred_cong0 pred_cong pred_cong_simp = { |
309 bd_Card_order = bd_Card_order, |
312 bd_Card_order = bd_Card_order, |
310 bd_Cinfinite = bd_Cinfinite, |
313 bd_Cinfinite = bd_Cinfinite, |
311 bd_Cnotzero = bd_Cnotzero, |
314 bd_Cnotzero = bd_Cnotzero, |
312 collect_set_map = collect_set_map, |
315 collect_set_map = collect_set_map, |
313 in_bd = in_bd, |
316 in_bd = in_bd, |
343 rel_reflp = rel_reflp, |
346 rel_reflp = rel_reflp, |
344 rel_symp = rel_symp, |
347 rel_symp = rel_symp, |
345 rel_transp = rel_transp, |
348 rel_transp = rel_transp, |
346 set_transfer = set_transfer, |
349 set_transfer = set_transfer, |
347 rel_eq_onp = rel_eq_onp, |
350 rel_eq_onp = rel_eq_onp, |
|
351 pred_transfer = pred_transfer, |
348 pred_True = pred_True, |
352 pred_True = pred_True, |
349 pred_map = pred_map, |
353 pred_map = pred_map, |
350 pred_rel = pred_rel, |
354 pred_rel = pred_rel, |
351 pred_mono_strong0 = pred_mono_strong0, |
355 pred_mono_strong0 = pred_mono_strong0, |
352 pred_mono_strong = pred_mono_strong, |
356 pred_mono_strong = pred_mono_strong, |
439 rel_reflp = Lazy.map f rel_reflp, |
444 rel_reflp = Lazy.map f rel_reflp, |
440 rel_symp = Lazy.map f rel_symp, |
445 rel_symp = Lazy.map f rel_symp, |
441 rel_transp = Lazy.map f rel_transp, |
446 rel_transp = Lazy.map f rel_transp, |
442 set_transfer = Lazy.map (map f) set_transfer, |
447 set_transfer = Lazy.map (map f) set_transfer, |
443 rel_eq_onp = Lazy.map f rel_eq_onp, |
448 rel_eq_onp = Lazy.map f rel_eq_onp, |
|
449 pred_transfer = Lazy.map f pred_transfer, |
444 pred_True = Lazy.map f pred_True, |
450 pred_True = Lazy.map f pred_True, |
445 pred_map = Lazy.map f pred_map, |
451 pred_map = Lazy.map f pred_map, |
446 pred_rel = Lazy.map f pred_rel, |
452 pred_rel = Lazy.map f pred_rel, |
447 pred_mono_strong0 = Lazy.map f pred_mono_strong0, |
453 pred_mono_strong0 = Lazy.map f pred_mono_strong0, |
448 pred_mono_strong = Lazy.map f pred_mono_strong, |
454 pred_mono_strong = Lazy.map f pred_mono_strong, |
575 val map_id_of_bnf = Lazy.force o #map_id o #facts o rep_bnf; |
581 val map_id_of_bnf = Lazy.force o #map_id o #facts o rep_bnf; |
576 val map_ident0_of_bnf = Lazy.force o #map_ident0 o #facts o rep_bnf; |
582 val map_ident0_of_bnf = Lazy.force o #map_ident0 o #facts o rep_bnf; |
577 val map_ident_of_bnf = Lazy.force o #map_ident o #facts o rep_bnf; |
583 val map_ident_of_bnf = Lazy.force o #map_ident o #facts o rep_bnf; |
578 val map_transfer_of_bnf = Lazy.force o #map_transfer o #facts o rep_bnf; |
584 val map_transfer_of_bnf = Lazy.force o #map_transfer o #facts o rep_bnf; |
579 val rel_eq_onp_of_bnf = Lazy.force o #rel_eq_onp o #facts o rep_bnf; |
585 val rel_eq_onp_of_bnf = Lazy.force o #rel_eq_onp o #facts o rep_bnf; |
580 val pred_rel_of_bnf = Lazy.force o #pred_rel o #facts o rep_bnf; |
586 val pred_def_of_bnf = #pred_def o #defs o rep_bnf; |
581 val pred_map_of_bnf = Lazy.force o #pred_map o #facts o rep_bnf; |
587 val pred_map_of_bnf = Lazy.force o #pred_map o #facts o rep_bnf; |
582 val pred_mono_strong0_of_bnf = Lazy.force o #pred_mono_strong0 o #facts o rep_bnf; |
588 val pred_mono_strong0_of_bnf = Lazy.force o #pred_mono_strong0 o #facts o rep_bnf; |
583 val pred_mono_strong_of_bnf = Lazy.force o #pred_mono_strong o #facts o rep_bnf; |
589 val pred_mono_strong_of_bnf = Lazy.force o #pred_mono_strong o #facts o rep_bnf; |
584 val pred_cong0_of_bnf = Lazy.force o #pred_cong0 o #facts o rep_bnf; |
590 val pred_cong0_of_bnf = Lazy.force o #pred_cong0 o #facts o rep_bnf; |
585 val pred_cong_of_bnf = Lazy.force o #pred_cong o #facts o rep_bnf; |
591 val pred_cong_of_bnf = Lazy.force o #pred_cong o #facts o rep_bnf; |
586 val pred_cong_simp_of_bnf = Lazy.force o #pred_cong_simp o #facts o rep_bnf; |
592 val pred_cong_simp_of_bnf = Lazy.force o #pred_cong_simp o #facts o rep_bnf; |
587 val pred_def_of_bnf = #pred_def o #defs o rep_bnf; |
593 val pred_rel_of_bnf = Lazy.force o #pred_rel o #facts o rep_bnf; |
588 val pred_set_of_bnf = #pred_set o #axioms o rep_bnf; |
594 val pred_set_of_bnf = #pred_set o #axioms o rep_bnf; |
|
595 val pred_transfer_of_bnf = Lazy.force o #pred_transfer o #facts o rep_bnf; |
|
596 val pred_True_of_bnf = Lazy.force o #pred_True o #facts o rep_bnf; |
589 val rel_Grp_of_bnf = Lazy.force o #rel_Grp o #facts o rep_bnf; |
597 val rel_Grp_of_bnf = Lazy.force o #rel_Grp o #facts o rep_bnf; |
590 val rel_OO_Grp_of_bnf = #rel_OO_Grp o #axioms o rep_bnf; |
598 val rel_OO_Grp_of_bnf = #rel_OO_Grp o #axioms o rep_bnf; |
591 val rel_OO_of_bnf = Lazy.force o #rel_OO o #facts o rep_bnf; |
599 val rel_OO_of_bnf = Lazy.force o #rel_OO o #facts o rep_bnf; |
592 val rel_cong0_of_bnf = Lazy.force o #rel_cong0 o #facts o rep_bnf; |
600 val rel_cong0_of_bnf = Lazy.force o #rel_cong0 o #facts o rep_bnf; |
593 val rel_cong_of_bnf = Lazy.force o #rel_cong o #facts o rep_bnf; |
601 val rel_cong_of_bnf = Lazy.force o #rel_cong o #facts o rep_bnf; |
792 val map_idN = "map_id"; |
800 val map_idN = "map_id"; |
793 val map_identN = "map_ident"; |
801 val map_identN = "map_ident"; |
794 val map_transferN = "map_transfer"; |
802 val map_transferN = "map_transfer"; |
795 val pred_mono_strong0N = "pred_mono_strong0"; |
803 val pred_mono_strong0N = "pred_mono_strong0"; |
796 val pred_mono_strongN = "pred_mono_strong"; |
804 val pred_mono_strongN = "pred_mono_strong"; |
|
805 val pred_transferN = "pred_transfer"; |
797 val pred_TrueN = "pred_True"; |
806 val pred_TrueN = "pred_True"; |
798 val pred_mapN = "pred_map"; |
807 val pred_mapN = "pred_map"; |
799 val pred_relN = "pred_rel"; |
808 val pred_relN = "pred_rel"; |
800 val pred_setN = "pred_set"; |
809 val pred_setN = "pred_set"; |
801 val pred_congN = "pred_cong"; |
810 val pred_congN = "pred_cong"; |
887 (pred_mono_strongN, [Lazy.force (#pred_mono_strong facts)], []), |
896 (pred_mono_strongN, [Lazy.force (#pred_mono_strong facts)], []), |
888 (pred_congN, [Lazy.force (#pred_cong facts)], fundefcong_attrs), |
897 (pred_congN, [Lazy.force (#pred_cong facts)], fundefcong_attrs), |
889 (pred_cong_simpN, [Lazy.force (#pred_cong_simp facts)], []), |
898 (pred_cong_simpN, [Lazy.force (#pred_cong_simp facts)], []), |
890 (pred_mapN, [Lazy.force (#pred_map facts)], []), |
899 (pred_mapN, [Lazy.force (#pred_map facts)], []), |
891 (pred_relN, [Lazy.force (#pred_rel facts)], []), |
900 (pred_relN, [Lazy.force (#pred_rel facts)], []), |
|
901 (pred_transferN, [Lazy.force (#pred_transfer facts)], []), |
892 (pred_TrueN, [Lazy.force (#pred_True facts)], []), |
902 (pred_TrueN, [Lazy.force (#pred_True facts)], []), |
893 (pred_setN, [#pred_set axioms], []), |
903 (pred_setN, [#pred_set axioms], []), |
894 (rel_comppN, [Lazy.force (#rel_OO facts)], []), |
904 (rel_comppN, [Lazy.force (#rel_OO facts)], []), |
895 (rel_compp_GrpN, no_refl [#rel_OO_Grp axioms], []), |
905 (rel_compp_GrpN, no_refl [#rel_OO_Grp axioms], []), |
896 (rel_conversepN, [Lazy.force (#rel_conversep facts)], []), |
906 (rel_conversepN, [Lazy.force (#rel_conversep facts)], []), |
1835 |> Thm.close_derivation |
1845 |> Thm.close_derivation |
1836 end; |
1846 end; |
1837 |
1847 |
1838 val map_transfer = Lazy.lazy mk_map_transfer; |
1848 val map_transfer = Lazy.lazy mk_map_transfer; |
1839 |
1849 |
|
1850 fun mk_pred_transfer () = |
|
1851 let |
|
1852 val iff = HOLogic.eq_const HOLogic.boolT; |
|
1853 val prem_rels = map (fn T => mk_rel_fun T iff) Rs; |
|
1854 val prem_elems = mk_rel_fun (Term.list_comb (rel, Rs)) iff; |
|
1855 val goal = HOLogic.mk_Trueprop |
|
1856 (fold_rev mk_rel_fun prem_rels prem_elems $ pred $ pred'); |
|
1857 val vars = Variable.add_free_names lthy goal []; |
|
1858 in |
|
1859 Goal.prove_sorry lthy vars [] goal (fn {context = ctxt, prems = _} => |
|
1860 mk_pred_transfer_tac ctxt live (Lazy.force in_rel) (Lazy.force pred_map) |
|
1861 (Lazy.force pred_cong)) |
|
1862 |> Thm.close_derivation |
|
1863 end; |
|
1864 |
|
1865 val pred_transfer = Lazy.lazy mk_pred_transfer; |
|
1866 |
1840 fun mk_rel_transfer () = |
1867 fun mk_rel_transfer () = |
1841 let |
1868 let |
1842 val iff = HOLogic.eq_const HOLogic.boolT; |
1869 val iff = HOLogic.eq_const HOLogic.boolT; |
1843 val prem_rels = |
1870 val prem_rels = |
1844 map2 (fn T1 => fn T2 => mk_rel_fun T1 (mk_rel_fun T2 iff)) S_AsCs S_BsEs; |
1871 map2 (fn T1 => fn T2 => mk_rel_fun T1 (mk_rel_fun T2 iff)) S_AsCs S_BsEs; |
1910 val facts = mk_facts bd_Card_order bd_Cinfinite bd_Cnotzero collect_set_map in_bd in_cong |
1937 val facts = mk_facts bd_Card_order bd_Cinfinite bd_Cnotzero collect_set_map in_bd in_cong |
1911 in_mono in_rel inj_map inj_map_strong map_comp map_cong map_cong_simp map_cong_pred map_id |
1938 in_mono in_rel inj_map inj_map_strong map_comp map_cong map_cong_simp map_cong_pred map_id |
1912 map_ident0 map_ident map_transfer rel_eq rel_flip set_map rel_cong0 rel_cong rel_cong_simp |
1939 map_ident0 map_ident map_transfer rel_eq rel_flip set_map rel_cong0 rel_cong rel_cong_simp |
1913 rel_map rel_mono rel_mono_strong0 rel_mono_strong set_transfer rel_Grp rel_conversep |
1940 rel_map rel_mono rel_mono_strong0 rel_mono_strong set_transfer rel_Grp rel_conversep |
1914 rel_OO rel_refl rel_refl_strong rel_reflp rel_symp rel_transp rel_transfer rel_eq_onp |
1941 rel_OO rel_refl rel_refl_strong rel_reflp rel_symp rel_transp rel_transfer rel_eq_onp |
1915 pred_True pred_map pred_rel pred_mono_strong0 pred_mono_strong pred_cong0 pred_cong |
1942 pred_transfer pred_True pred_map pred_rel pred_mono_strong0 pred_mono_strong pred_cong0 |
1916 pred_cong_simp; |
1943 pred_cong pred_cong_simp; |
1917 |
1944 |
1918 val wits = map2 mk_witness bnf_wits wit_thms; |
1945 val wits = map2 mk_witness bnf_wits wit_thms; |
1919 |
1946 |
1920 val bnf_rel = |
1947 val bnf_rel = |
1921 Term.subst_atomic_types ((Ds ~~ deads) @ (As' ~~ alphas) @ (Bs' ~~ betas)) rel; |
1948 Term.subst_atomic_types ((Ds ~~ deads) @ (As' ~~ alphas) @ (Bs' ~~ betas)) rel; |