72 val rel_OO_Grp_of_bnf: bnf -> thm |
72 val rel_OO_Grp_of_bnf: bnf -> thm |
73 val rel_cong_of_bnf: bnf -> thm |
73 val rel_cong_of_bnf: bnf -> thm |
74 val rel_conversep_of_bnf: bnf -> thm |
74 val rel_conversep_of_bnf: bnf -> thm |
75 val rel_mono_of_bnf: bnf -> thm |
75 val rel_mono_of_bnf: bnf -> thm |
76 val rel_mono_strong0_of_bnf: bnf -> thm |
76 val rel_mono_strong0_of_bnf: bnf -> thm |
|
77 val rel_mono_strong_of_bnf: bnf -> thm |
77 val rel_eq_of_bnf: bnf -> thm |
78 val rel_eq_of_bnf: bnf -> thm |
78 val rel_flip_of_bnf: bnf -> thm |
79 val rel_flip_of_bnf: bnf -> thm |
79 val set_bd_of_bnf: bnf -> thm list |
80 val set_bd_of_bnf: bnf -> thm list |
80 val set_defs_of_bnf: bnf -> thm list |
81 val set_defs_of_bnf: bnf -> thm list |
81 val set_map0_of_bnf: bnf -> thm list |
82 val set_map0_of_bnf: bnf -> thm list |
233 set_map: thm lazy list, |
234 set_map: thm lazy list, |
234 rel_cong: thm lazy, |
235 rel_cong: thm lazy, |
235 rel_map: thm list lazy, |
236 rel_map: thm list lazy, |
236 rel_mono: thm lazy, |
237 rel_mono: thm lazy, |
237 rel_mono_strong0: thm lazy, |
238 rel_mono_strong0: thm lazy, |
|
239 rel_mono_strong: thm lazy, |
238 rel_Grp: thm lazy, |
240 rel_Grp: thm lazy, |
239 rel_conversep: thm lazy, |
241 rel_conversep: thm lazy, |
240 rel_OO: thm lazy |
242 rel_OO: thm lazy |
241 }; |
243 }; |
242 |
244 |
243 fun mk_facts bd_Card_order bd_Cinfinite bd_Cnotzero collect_set_map in_bd in_cong in_mono in_rel |
245 fun mk_facts bd_Card_order bd_Cinfinite bd_Cnotzero collect_set_map in_bd in_cong in_mono in_rel |
244 inj_map map_comp map_cong map_id map_ident0 map_ident map_transfer rel_eq rel_flip set_map |
246 inj_map map_comp map_cong map_id map_ident0 map_ident map_transfer rel_eq rel_flip set_map |
245 rel_cong rel_map rel_mono rel_mono_strong0 rel_Grp rel_conversep rel_OO = { |
247 rel_cong rel_map rel_mono rel_mono_strong0 rel_mono_strong rel_Grp rel_conversep rel_OO = { |
246 bd_Card_order = bd_Card_order, |
248 bd_Card_order = bd_Card_order, |
247 bd_Cinfinite = bd_Cinfinite, |
249 bd_Cinfinite = bd_Cinfinite, |
248 bd_Cnotzero = bd_Cnotzero, |
250 bd_Cnotzero = bd_Cnotzero, |
249 collect_set_map = collect_set_map, |
251 collect_set_map = collect_set_map, |
250 in_bd = in_bd, |
252 in_bd = in_bd, |
315 set_map = map (Lazy.map f) set_map, |
319 set_map = map (Lazy.map f) set_map, |
316 rel_cong = Lazy.map f rel_cong, |
320 rel_cong = Lazy.map f rel_cong, |
317 rel_map = Lazy.map (map f) rel_map, |
321 rel_map = Lazy.map (map f) rel_map, |
318 rel_mono = Lazy.map f rel_mono, |
322 rel_mono = Lazy.map f rel_mono, |
319 rel_mono_strong0 = Lazy.map f rel_mono_strong0, |
323 rel_mono_strong0 = Lazy.map f rel_mono_strong0, |
|
324 rel_mono_strong = Lazy.map f rel_mono_strong, |
320 rel_Grp = Lazy.map f rel_Grp, |
325 rel_Grp = Lazy.map f rel_Grp, |
321 rel_conversep = Lazy.map f rel_conversep, |
326 rel_conversep = Lazy.map f rel_conversep, |
322 rel_OO = Lazy.map f rel_OO}; |
327 rel_OO = Lazy.map f rel_OO}; |
323 |
328 |
324 val morph_facts = map_facts o Morphism.thm; |
329 val morph_facts = map_facts o Morphism.thm; |
444 val set_map0_of_bnf = #set_map0 o #axioms o rep_bnf; |
449 val set_map0_of_bnf = #set_map0 o #axioms o rep_bnf; |
445 val set_map_of_bnf = map Lazy.force o #set_map o #facts o rep_bnf; |
450 val set_map_of_bnf = map Lazy.force o #set_map o #facts o rep_bnf; |
446 val rel_cong_of_bnf = Lazy.force o #rel_cong o #facts o rep_bnf; |
451 val rel_cong_of_bnf = Lazy.force o #rel_cong o #facts o rep_bnf; |
447 val rel_mono_of_bnf = Lazy.force o #rel_mono o #facts o rep_bnf; |
452 val rel_mono_of_bnf = Lazy.force o #rel_mono o #facts o rep_bnf; |
448 val rel_mono_strong0_of_bnf = Lazy.force o #rel_mono_strong0 o #facts o rep_bnf; |
453 val rel_mono_strong0_of_bnf = Lazy.force o #rel_mono_strong0 o #facts o rep_bnf; |
|
454 val rel_mono_strong_of_bnf = Lazy.force o #rel_mono_strong o #facts o rep_bnf; |
449 val rel_Grp_of_bnf = Lazy.force o #rel_Grp o #facts o rep_bnf; |
455 val rel_Grp_of_bnf = Lazy.force o #rel_Grp o #facts o rep_bnf; |
450 val rel_conversep_of_bnf = Lazy.force o #rel_conversep o #facts o rep_bnf; |
456 val rel_conversep_of_bnf = Lazy.force o #rel_conversep o #facts o rep_bnf; |
451 val rel_OO_of_bnf = Lazy.force o #rel_OO o #facts o rep_bnf; |
457 val rel_OO_of_bnf = Lazy.force o #rel_OO o #facts o rep_bnf; |
452 val rel_OO_Grp_of_bnf = #rel_OO_Grp o #axioms o rep_bnf; |
458 val rel_OO_Grp_of_bnf = #rel_OO_Grp o #axioms o rep_bnf; |
453 val wit_thms_of_bnf = maps #prop o wits_of_bnf; |
459 val wit_thms_of_bnf = maps #prop o wits_of_bnf; |
614 val rel_GrpN = "rel_Grp"; |
620 val rel_GrpN = "rel_Grp"; |
615 val rel_conversepN = "rel_conversep"; |
621 val rel_conversepN = "rel_conversep"; |
616 val rel_mapN = "rel_map" |
622 val rel_mapN = "rel_map" |
617 val rel_monoN = "rel_mono" |
623 val rel_monoN = "rel_mono" |
618 val rel_mono_strong0N = "rel_mono_strong0" |
624 val rel_mono_strong0N = "rel_mono_strong0" |
|
625 val rel_mono_strongN = "rel_mono_strong" |
619 val rel_comppN = "rel_compp"; |
626 val rel_comppN = "rel_compp"; |
620 val rel_compp_GrpN = "rel_compp_Grp"; |
627 val rel_compp_GrpN = "rel_compp_Grp"; |
621 |
628 |
622 datatype inline_policy = Dont_Inline | Hardly_Inline | Smart_Inline | Do_Inline; |
629 datatype inline_policy = Dont_Inline | Hardly_Inline | Smart_Inline | Do_Inline; |
623 |
630 |
654 (in_relN, [Lazy.force (#in_rel facts)]), |
661 (in_relN, [Lazy.force (#in_rel facts)]), |
655 (inj_mapN, [Lazy.force (#inj_map facts)]), |
662 (inj_mapN, [Lazy.force (#inj_map facts)]), |
656 (map_comp0N, [#map_comp0 axioms]), |
663 (map_comp0N, [#map_comp0 axioms]), |
657 (map_transferN, [Lazy.force (#map_transfer facts)]), |
664 (map_transferN, [Lazy.force (#map_transfer facts)]), |
658 (rel_mono_strong0N, [Lazy.force (#rel_mono_strong0 facts)]), |
665 (rel_mono_strong0N, [Lazy.force (#rel_mono_strong0 facts)]), |
|
666 (rel_mono_strongN, [Lazy.force (#rel_mono_strong facts)]), |
659 (set_map0N, #set_map0 axioms), |
667 (set_map0N, #set_map0 axioms), |
660 (set_bdN, #set_bd axioms)] @ |
668 (set_bdN, #set_bd axioms)] @ |
661 (witNs ~~ wit_thmss_of_bnf bnf) |
669 (witNs ~~ wit_thmss_of_bnf bnf) |
662 |> map (fn (thmN, thms) => |
670 |> map (fn (thmN, thms) => |
663 ((qualify (Binding.qualify true (Binding.name_of bnf_b) (Binding.name thmN)), []), |
671 ((qualify (Binding.qualify true (Binding.name_of bnf_b) (Binding.name thmN)), []), |
1317 |> Thm.close_derivation |
1325 |> Thm.close_derivation |
1318 end; |
1326 end; |
1319 |
1327 |
1320 val rel_mono_strong0 = Lazy.lazy mk_rel_mono_strong0; |
1328 val rel_mono_strong0 = Lazy.lazy mk_rel_mono_strong0; |
1321 |
1329 |
|
1330 fun mk_rel_mono_strong () = Object_Logic.rulify lthy (Lazy.force rel_mono_strong0) |
|
1331 |
|
1332 val rel_mono_strong = Lazy.lazy mk_rel_mono_strong; |
|
1333 |
1322 fun mk_rel_map () = |
1334 fun mk_rel_map () = |
1323 let |
1335 let |
1324 fun mk_goal lhs rhs = |
1336 fun mk_goal lhs rhs = |
1325 fold_rev Logic.all ([x, y] @ S_CsBs @ S_AsCs @ is @ gs) (mk_Trueprop_eq (lhs, rhs)); |
1337 fold_rev Logic.all ([x, y] @ S_CsBs @ S_AsCs @ is @ gs) (mk_Trueprop_eq (lhs, rhs)); |
1326 |
1338 |
1366 |
1378 |
1367 val defs = mk_defs bnf_map_def bnf_set_defs bnf_rel_def; |
1379 val defs = mk_defs bnf_map_def bnf_set_defs bnf_rel_def; |
1368 |
1380 |
1369 val facts = mk_facts bd_Card_order bd_Cinfinite bd_Cnotzero collect_set_map in_bd in_cong |
1381 val facts = mk_facts bd_Card_order bd_Cinfinite bd_Cnotzero collect_set_map in_bd in_cong |
1370 in_mono in_rel inj_map map_comp map_cong map_id map_ident0 map_ident map_transfer rel_eq |
1382 in_mono in_rel inj_map map_comp map_cong map_id map_ident0 map_ident map_transfer rel_eq |
1371 rel_flip set_map rel_cong rel_map rel_mono rel_mono_strong0 rel_Grp rel_conversep rel_OO; |
1383 rel_flip set_map rel_cong rel_map rel_mono rel_mono_strong0 rel_mono_strong rel_Grp |
|
1384 rel_conversep rel_OO; |
1372 |
1385 |
1373 val wits = map2 mk_witness bnf_wits wit_thms; |
1386 val wits = map2 mk_witness bnf_wits wit_thms; |
1374 |
1387 |
1375 val bnf_rel = |
1388 val bnf_rel = |
1376 Term.subst_atomic_types ((Ds ~~ deads) @ (As' ~~ alphas) @ (Bs' ~~ betas)) rel; |
1389 Term.subst_atomic_types ((Ds ~~ deads) @ (As' ~~ alphas) @ (Bs' ~~ betas)) rel; |