115 REPEAT_DETERM (etac conjE 1) THEN |
115 REPEAT_DETERM (etac conjE 1) THEN |
116 EVERY' [dtac rev_bspec, atac] 1 THEN |
116 EVERY' [dtac rev_bspec, atac] 1 THEN |
117 REPEAT_DETERM (eresolve_tac [CollectE, conjE] 1) THEN atac 1; |
117 REPEAT_DETERM (eresolve_tac [CollectE, conjE] 1) THEN atac 1; |
118 |
118 |
119 fun mk_mor_elim_tac mor_def = |
119 fun mk_mor_elim_tac mor_def = |
120 (dtac (subst OF [mor_def]) THEN' |
120 (dtac (mor_def RS iffD1) THEN' |
121 REPEAT o etac conjE THEN' |
121 REPEAT o etac conjE THEN' |
122 TRY o rtac @{thm image_subsetI} THEN' |
122 TRY o rtac @{thm image_subsetI} THEN' |
123 etac bspec THEN' |
123 etac bspec THEN' |
124 atac) 1; |
124 atac) 1; |
125 |
125 |
126 fun mk_mor_incl_tac mor_def map_ids = |
126 fun mk_mor_incl_tac mor_def map_ids = |
127 (stac mor_def THEN' |
127 (rtac (mor_def RS iffD2) THEN' |
128 rtac conjI THEN' |
128 rtac conjI THEN' |
129 CONJ_WRAP' (K (EVERY' [rtac ballI, etac set_mp, stac id_apply, atac])) map_ids THEN' |
129 CONJ_WRAP' (K (EVERY' [rtac ballI, etac set_mp, etac (id_apply RS @{thm ssubst_mem})])) |
|
130 map_ids THEN' |
130 CONJ_WRAP' (fn thm => |
131 CONJ_WRAP' (fn thm => |
131 (EVERY' [rtac ballI, rtac (thm RS trans), rtac sym, rtac (id_apply RS arg_cong)])) map_ids) 1; |
132 (EVERY' [rtac ballI, rtac (thm RS trans), rtac sym, rtac (id_apply RS arg_cong)])) map_ids) 1; |
132 |
133 |
133 fun mk_mor_comp_tac mor_def mor_images morEs map_comp_ids = |
134 fun mk_mor_comp_tac mor_def mor_images morEs map_comp_ids = |
134 let |
135 let |
135 fun fbetw_tac image = EVERY' [rtac ballI, stac o_apply, etac image, etac image, atac]; |
136 fun fbetw_tac image = EVERY' [rtac ballI, rtac (o_apply RS @{thm ssubst_mem}), etac image, |
|
137 etac image, atac]; |
136 fun mor_tac ((mor_image, morE), map_comp_id) = |
138 fun mor_tac ((mor_image, morE), map_comp_id) = |
137 EVERY' [rtac ballI, stac o_apply, rtac trans, rtac (map_comp_id RS sym), rtac trans, |
139 EVERY' [rtac ballI, stac o_apply, rtac trans, rtac (map_comp_id RS sym), rtac trans, |
138 etac (morE RS arg_cong), atac, etac morE, etac mor_image, atac]; |
140 etac (morE RS arg_cong), atac, etac morE, etac mor_image, atac]; |
139 in |
141 in |
140 (stac mor_def THEN' rtac conjI THEN' |
142 (rtac (mor_def RS iffD2) THEN' rtac conjI THEN' |
141 CONJ_WRAP' fbetw_tac mor_images THEN' |
143 CONJ_WRAP' fbetw_tac mor_images THEN' |
142 CONJ_WRAP' mor_tac ((mor_images ~~ morEs) ~~ map_comp_ids)) 1 |
144 CONJ_WRAP' mor_tac ((mor_images ~~ morEs) ~~ map_comp_ids)) 1 |
143 end; |
145 end; |
144 |
146 |
145 fun mk_mor_UNIV_tac morEs mor_def = |
147 fun mk_mor_UNIV_tac morEs mor_def = |
147 val n = length morEs; |
149 val n = length morEs; |
148 fun mor_tac morE = EVERY' [rtac @{thm ext}, rtac trans, rtac o_apply, rtac trans, etac morE, |
150 fun mor_tac morE = EVERY' [rtac @{thm ext}, rtac trans, rtac o_apply, rtac trans, etac morE, |
149 rtac UNIV_I, rtac sym, rtac o_apply]; |
151 rtac UNIV_I, rtac sym, rtac o_apply]; |
150 in |
152 in |
151 EVERY' [rtac iffI, CONJ_WRAP' mor_tac morEs, |
153 EVERY' [rtac iffI, CONJ_WRAP' mor_tac morEs, |
152 stac mor_def, rtac conjI, CONJ_WRAP' (K (rtac ballI THEN' rtac UNIV_I)) morEs, |
154 rtac (mor_def RS iffD2), rtac conjI, CONJ_WRAP' (K (rtac ballI THEN' rtac UNIV_I)) morEs, |
153 CONJ_WRAP' (fn i => |
155 CONJ_WRAP' (fn i => |
154 EVERY' [dtac (mk_conjunctN n i), rtac ballI, etac @{thm comp_eq_dest}]) (1 upto n)] 1 |
156 EVERY' [dtac (mk_conjunctN n i), rtac ballI, etac @{thm comp_eq_dest}]) (1 upto n)] 1 |
155 end; |
157 end; |
156 |
158 |
157 fun mk_mor_str_tac ks mor_UNIV = |
159 fun mk_mor_str_tac ks mor_UNIV = |
158 (stac mor_UNIV THEN' CONJ_WRAP' (K (rtac refl)) ks) 1; |
160 (rtac (mor_UNIV RS iffD2) THEN' CONJ_WRAP' (K (rtac refl)) ks) 1; |
159 |
161 |
160 fun mk_mor_case_sum_tac ks mor_UNIV = |
162 fun mk_mor_case_sum_tac ks mor_UNIV = |
161 (stac mor_UNIV THEN' CONJ_WRAP' (K (rtac @{thm case_sum_o_inj(1)[symmetric]})) ks) 1; |
163 (rtac (mor_UNIV RS iffD2) THEN' CONJ_WRAP' (K (rtac @{thm case_sum_o_inj(1)[symmetric]})) ks) 1; |
162 |
164 |
163 fun mk_set_incl_hset_tac rec_Suc = |
165 fun mk_set_incl_hset_tac rec_Suc = |
164 EVERY' (map rtac [@{thm SUP_upper2}, UNIV_I, @{thm ord_le_eq_trans}, @{thm Un_upper1}, sym, |
166 EVERY' (map rtac [@{thm SUP_upper2}, UNIV_I, @{thm ord_le_eq_trans}, @{thm Un_upper1}, sym, |
165 rec_Suc]) 1; |
167 rec_Suc]) 1; |
166 |
168 |
260 rtac iffI, etac conjE, etac conjI, CONJ_WRAP' mk_if_tac thms, |
262 rtac iffI, etac conjE, etac conjI, CONJ_WRAP' mk_if_tac thms, |
261 etac conjE, etac conjI, CONJ_WRAP' mk_only_if_tac thms] 1 |
263 etac conjE, etac conjI, CONJ_WRAP' mk_only_if_tac thms] 1 |
262 end; |
264 end; |
263 |
265 |
264 fun mk_bis_converse_tac m bis_rel rel_congs rel_converseps = |
266 fun mk_bis_converse_tac m bis_rel rel_congs rel_converseps = |
265 EVERY' [stac bis_rel, dtac (bis_rel RS iffD1), |
267 EVERY' [rtac (bis_rel RS iffD2), dtac (bis_rel RS iffD1), |
266 REPEAT_DETERM o etac conjE, rtac conjI, |
268 REPEAT_DETERM o etac conjE, rtac conjI, |
267 CONJ_WRAP' (K (EVERY' [rtac converse_shift, etac subset_trans, |
269 CONJ_WRAP' (K (EVERY' [rtac converse_shift, etac subset_trans, |
268 rtac equalityD2, rtac @{thm converse_Times}])) rel_congs, |
270 rtac equalityD2, rtac @{thm converse_Times}])) rel_congs, |
269 CONJ_WRAP' (fn (rel_cong, rel_conversep) => |
271 CONJ_WRAP' (fn (rel_cong, rel_conversep) => |
270 EVERY' [rtac allI, rtac allI, rtac impI, |
272 EVERY' [rtac allI, rtac allI, rtac impI, |
274 rtac (rel_conversep RS sym RS @{thm eq_refl} RS @{thm predicate2D}), |
276 rtac (rel_conversep RS sym RS @{thm eq_refl} RS @{thm predicate2D}), |
275 REPEAT_DETERM o etac allE, |
277 REPEAT_DETERM o etac allE, |
276 rtac @{thm conversepI}, etac mp, etac @{thm converseD}]) (rel_congs ~~ rel_converseps)] 1; |
278 rtac @{thm conversepI}, etac mp, etac @{thm converseD}]) (rel_congs ~~ rel_converseps)] 1; |
277 |
279 |
278 fun mk_bis_O_tac ctxt m bis_rel rel_congs rel_OOs = |
280 fun mk_bis_O_tac ctxt m bis_rel rel_congs rel_OOs = |
279 EVERY' [stac bis_rel, REPEAT_DETERM o dtac (bis_rel RS iffD1), |
281 EVERY' [rtac (bis_rel RS iffD2), REPEAT_DETERM o dtac (bis_rel RS iffD1), |
280 REPEAT_DETERM o etac conjE, rtac conjI, |
282 REPEAT_DETERM o etac conjE, rtac conjI, |
281 CONJ_WRAP' (K (EVERY' [etac @{thm relcomp_subset_Sigma}, atac])) rel_congs, |
283 CONJ_WRAP' (K (EVERY' [etac @{thm relcomp_subset_Sigma}, atac])) rel_congs, |
282 CONJ_WRAP' (fn (rel_cong, rel_OO) => |
284 CONJ_WRAP' (fn (rel_cong, rel_OO) => |
283 EVERY' [rtac allI, rtac allI, rtac impI, |
285 EVERY' [rtac allI, rtac allI, rtac impI, |
284 rtac (rel_cong RS @{thm eq_refl} RS @{thm predicate2D}), |
286 rtac (rel_cong RS @{thm eq_refl} RS @{thm predicate2D}), |
292 etac mp, atac, etac mp, atac]) (rel_congs ~~ rel_OOs)] 1; |
294 etac mp, atac, etac mp, atac]) (rel_congs ~~ rel_OOs)] 1; |
293 |
295 |
294 fun mk_bis_Gr_tac ctxt bis_rel rel_Grps mor_images morEs coalg_ins = |
296 fun mk_bis_Gr_tac ctxt bis_rel rel_Grps mor_images morEs coalg_ins = |
295 unfold_thms_tac ctxt (bis_rel :: @{thm eq_alt} :: @{thm in_rel_Gr} :: rel_Grps) THEN |
297 unfold_thms_tac ctxt (bis_rel :: @{thm eq_alt} :: @{thm in_rel_Gr} :: rel_Grps) THEN |
296 EVERY' [rtac conjI, |
298 EVERY' [rtac conjI, |
297 CONJ_WRAP' (fn thm => rtac (@{thm Gr_incl} RS ssubst) THEN' etac thm) mor_images, |
299 CONJ_WRAP' (fn thm => rtac (@{thm Gr_incl} RS iffD2) THEN' etac thm) mor_images, |
298 CONJ_WRAP' (fn (coalg_in, morE) => |
300 CONJ_WRAP' (fn (coalg_in, morE) => |
299 EVERY' [rtac allI, rtac allI, rtac impI, rtac @{thm GrpI}, etac (morE RS trans), |
301 EVERY' [rtac allI, rtac allI, rtac impI, rtac @{thm GrpI}, etac (morE RS trans), |
300 etac @{thm GrD1}, etac (@{thm GrD2} RS arg_cong), etac coalg_in, etac @{thm GrD1}]) |
302 etac @{thm GrD1}, etac (@{thm GrD2} RS arg_cong), etac coalg_in, etac @{thm GrD1}]) |
301 (coalg_ins ~~ morEs)] 1; |
303 (coalg_ins ~~ morEs)] 1; |
302 |
304 |
558 rtac ballI, etac @{thm UN_E}, |
560 rtac ballI, etac @{thm UN_E}, |
559 CONJ_WRAP' (fn (i, (rv_last, (isNode_def, (set_map0s, |
561 CONJ_WRAP' (fn (i, (rv_last, (isNode_def, (set_map0s, |
560 (set_Levs, set_image_Levs))))) => |
562 (set_Levs, set_image_Levs))))) => |
561 EVERY' [rtac ballI, |
563 EVERY' [rtac ballI, |
562 REPEAT_DETERM o eresolve_tac [CollectE, @{thm SuccE}, @{thm UN_E}], |
564 REPEAT_DETERM o eresolve_tac [CollectE, @{thm SuccE}, @{thm UN_E}], |
563 rtac (rev_mp OF [rv_last, impI]), etac exE, rtac (isNode_def RS ssubst), |
565 rtac (rev_mp OF [rv_last, impI]), etac exE, rtac (isNode_def RS iffD2), |
564 rtac exI, rtac conjI, |
566 rtac exI, rtac conjI, |
565 if n = 1 then rtac refl |
567 if n = 1 then rtac refl |
566 else etac (sum_weak_case_cong RS trans) THEN' rtac (mk_sum_caseN n i), |
568 else etac (sum_weak_case_cong RS trans) THEN' rtac (mk_sum_caseN n i), |
567 CONJ_WRAP' (fn (set_map0, (set_Lev, set_image_Lev)) => |
569 CONJ_WRAP' (fn (set_map0, (set_Lev, set_image_Lev)) => |
568 EVERY' [rtac (set_map0 RS trans), rtac equalityI, rtac @{thm image_subsetI}, |
570 EVERY' [rtac (set_map0 RS trans), rtac equalityI, rtac @{thm image_subsetI}, |
576 if n = 1 then rtac refl else atac]) |
578 if n = 1 then rtac refl else atac]) |
577 (drop m set_map0s ~~ (set_Levs ~~ set_image_Levs))]) |
579 (drop m set_map0s ~~ (set_Levs ~~ set_image_Levs))]) |
578 (ks ~~ (rv_lasts ~~ (isNode_defs ~~ (set_map0ss ~~ |
580 (ks ~~ (rv_lasts ~~ (isNode_defs ~~ (set_map0ss ~~ |
579 (set_Levss ~~ set_image_Levss))))), |
581 (set_Levss ~~ set_image_Levss))))), |
580 (*root isNode*) |
582 (*root isNode*) |
581 rtac (isNode_def RS ssubst), rtac exI, rtac conjI, |
583 rtac (isNode_def RS iffD2), rtac exI, rtac conjI, |
582 CONVERSION (Conv.top_conv |
584 CONVERSION (Conv.top_conv |
583 (K (Conv.try_conv (Conv.rewr_conv (rv_Nil RS eq_reflection)))) ctxt), |
585 (K (Conv.try_conv (Conv.rewr_conv (rv_Nil RS eq_reflection)))) ctxt), |
584 if n = 1 then rtac refl else rtac (mk_sum_caseN n i), |
586 if n = 1 then rtac refl else rtac (mk_sum_caseN n i), |
585 CONJ_WRAP' (fn (set_map0, (set_Lev, set_image_Lev)) => |
587 CONJ_WRAP' (fn (set_map0, (set_Lev, set_image_Lev)) => |
586 EVERY' [rtac (set_map0 RS trans), rtac equalityI, rtac @{thm image_subsetI}, |
588 EVERY' [rtac (set_map0 RS trans), rtac equalityI, rtac @{thm image_subsetI}, |
620 else etac (mk_InN_not_InM i' i'' RS notE)]) |
622 else etac (mk_InN_not_InM i' i'' RS notE)]) |
621 (rev ks), |
623 (rev ks), |
622 rtac @{thm UN_least}, rtac subsetI, rtac CollectI, rtac @{thm UN_I[OF UNIV_I]}, |
624 rtac @{thm UN_least}, rtac subsetI, rtac CollectI, rtac @{thm UN_I[OF UNIV_I]}, |
623 rtac (Lev_Suc RS equalityD2 RS set_mp), rtac (mk_UnIN n i'), rtac CollectI, |
625 rtac (Lev_Suc RS equalityD2 RS set_mp), rtac (mk_UnIN n i'), rtac CollectI, |
624 REPEAT_DETERM o rtac exI, rtac conjI, rtac refl, etac conjI, atac, |
626 REPEAT_DETERM o rtac exI, rtac conjI, rtac refl, etac conjI, atac, |
625 rtac trans, rtac @{thm shift_def}, rtac ssubst, rtac @{thm fun_eq_iff}, rtac allI, |
627 rtac trans, rtac @{thm shift_def}, rtac iffD2, rtac @{thm fun_eq_iff}, rtac allI, |
626 CONVERSION (Conv.top_conv |
628 CONVERSION (Conv.top_conv |
627 (K (Conv.try_conv (Conv.rewr_conv (rv_Cons RS eq_reflection)))) ctxt), |
629 (K (Conv.try_conv (Conv.rewr_conv (rv_Cons RS eq_reflection)))) ctxt), |
628 if n = 1 then K all_tac |
630 if n = 1 then K all_tac |
629 else rtac sum_weak_case_cong THEN' rtac (mk_sum_caseN n i' RS trans), |
631 else rtac sum_weak_case_cong THEN' rtac (mk_sum_caseN n i' RS trans), |
630 SELECT_GOAL (unfold_thms_tac ctxt [from_to_sbd]), rtac refl]) |
632 SELECT_GOAL (unfold_thms_tac ctxt [from_to_sbd]), rtac refl]) |
631 ks to_sbd_injs from_to_sbds)]; |
633 ks to_sbd_injs from_to_sbds)]; |
632 in |
634 in |
633 (rtac mor_cong THEN' |
635 (rtac mor_cong THEN' |
634 EVERY' (map (fn thm => rtac (thm RS @{thm ext})) beh_defs) THEN' |
636 EVERY' (map (fn thm => rtac (thm RS @{thm ext})) beh_defs) THEN' |
635 stac mor_def THEN' rtac conjI THEN' |
637 rtac (mor_def RS iffD2) THEN' rtac conjI THEN' |
636 CONJ_WRAP' fbetw_tac |
638 CONJ_WRAP' fbetw_tac |
637 (ks ~~ (carT_defs ~~ (isNode_defs ~~ (Lev_0s ~~ (rv_Nils ~~ ((length_Levs ~~ length_Lev's) ~~ |
639 (ks ~~ (carT_defs ~~ (isNode_defs ~~ (Lev_0s ~~ (rv_Nils ~~ ((length_Levs ~~ length_Lev's) ~~ |
638 (rv_lastss ~~ (set_map0ss ~~ (set_Levsss ~~ set_image_Levsss))))))))) THEN' |
640 (rv_lastss ~~ (set_map0ss ~~ (set_Levsss ~~ set_image_Levsss))))))))) THEN' |
639 CONJ_WRAP' mor_tac |
641 CONJ_WRAP' mor_tac |
640 (ks ~~ (strT_defs ~~ ((Lev_Sucs ~~ (rv_Nils ~~ rv_Conss)) ~~ |
642 (ks ~~ (strT_defs ~~ ((Lev_Sucs ~~ (rv_Nils ~~ rv_Conss)) ~~ |
651 EVERY' [rtac @{thm equiv_proj}, rtac equiv_LSBIS, etac set_mp, atac]) |
653 EVERY' [rtac @{thm equiv_proj}, rtac equiv_LSBIS, etac set_mp, atac]) |
652 equiv_LSBISs), rtac sym, rtac (o_apply RS trans), |
654 equiv_LSBISs), rtac sym, rtac (o_apply RS trans), |
653 etac (sym RS arg_cong RS trans), rtac map_comp_id] 1; |
655 etac (sym RS arg_cong RS trans), rtac map_comp_id] 1; |
654 |
656 |
655 fun mk_coalg_final_tac m coalg_def congruent_str_finals equiv_LSBISs set_map0ss coalgT_setss = |
657 fun mk_coalg_final_tac m coalg_def congruent_str_finals equiv_LSBISs set_map0ss coalgT_setss = |
656 EVERY' [stac coalg_def, |
658 EVERY' [rtac (coalg_def RS iffD2), |
657 CONJ_WRAP' (fn ((set_map0s, coalgT_sets), (equiv_LSBIS, congruent_str_final)) => |
659 CONJ_WRAP' (fn ((set_map0s, coalgT_sets), (equiv_LSBIS, congruent_str_final)) => |
658 EVERY' [rtac @{thm univ_preserves}, rtac equiv_LSBIS, rtac congruent_str_final, |
660 EVERY' [rtac @{thm univ_preserves}, rtac equiv_LSBIS, rtac congruent_str_final, |
659 rtac ballI, rtac @{thm ssubst_mem}, rtac o_apply, rtac CollectI, |
661 rtac ballI, rtac @{thm ssubst_mem}, rtac o_apply, rtac CollectI, |
660 REPEAT_DETERM_N m o EVERY' [rtac conjI, rtac subset_UNIV], |
662 REPEAT_DETERM_N m o EVERY' [rtac conjI, rtac subset_UNIV], |
661 CONJ_WRAP' (fn (equiv_LSBIS, (set_map0, coalgT_set)) => |
663 CONJ_WRAP' (fn (equiv_LSBIS, (set_map0, coalgT_set)) => |
662 EVERY' [rtac (set_map0 RS ord_eq_le_trans), |
664 EVERY' [rtac (set_map0 RS ord_eq_le_trans), |
663 rtac @{thm image_subsetI}, rtac ssubst, rtac @{thm proj_in_iff}, |
665 rtac @{thm image_subsetI}, rtac iffD2, rtac @{thm proj_in_iff}, |
664 rtac equiv_LSBIS, etac set_rev_mp, etac coalgT_set]) |
666 rtac equiv_LSBIS, etac set_rev_mp, etac coalgT_set]) |
665 (equiv_LSBISs ~~ (drop m set_map0s ~~ coalgT_sets))]) |
667 (equiv_LSBISs ~~ (drop m set_map0s ~~ coalgT_sets))]) |
666 ((set_map0ss ~~ coalgT_setss) ~~ (equiv_LSBISs ~~ congruent_str_finals))] 1; |
668 ((set_map0ss ~~ coalgT_setss) ~~ (equiv_LSBISs ~~ congruent_str_finals))] 1; |
667 |
669 |
668 fun mk_mor_T_final_tac mor_def congruent_str_finals equiv_LSBISs = |
670 fun mk_mor_T_final_tac mor_def congruent_str_finals equiv_LSBISs = |
669 EVERY' [stac mor_def, rtac conjI, |
671 EVERY' [rtac (mor_def RS iffD2), rtac conjI, |
670 CONJ_WRAP' (fn equiv_LSBIS => |
672 CONJ_WRAP' (fn equiv_LSBIS => |
671 EVERY' [rtac ballI, rtac ssubst, rtac @{thm proj_in_iff}, rtac equiv_LSBIS, atac]) |
673 EVERY' [rtac ballI, rtac iffD2, rtac @{thm proj_in_iff}, rtac equiv_LSBIS, atac]) |
672 equiv_LSBISs, |
674 equiv_LSBISs, |
673 CONJ_WRAP' (fn (equiv_LSBIS, congruent_str_final) => |
675 CONJ_WRAP' (fn (equiv_LSBIS, congruent_str_final) => |
674 EVERY' [rtac ballI, rtac sym, rtac trans, rtac @{thm univ_commute}, rtac equiv_LSBIS, |
676 EVERY' [rtac ballI, rtac sym, rtac trans, rtac @{thm univ_commute}, rtac equiv_LSBIS, |
675 rtac congruent_str_final, atac, rtac o_apply]) |
677 rtac congruent_str_final, atac, rtac o_apply]) |
676 (equiv_LSBISs ~~ congruent_str_finals)] 1; |
678 (equiv_LSBISs ~~ congruent_str_finals)] 1; |
752 unfold_thms_tac ctxt |
754 unfold_thms_tac ctxt |
753 (corec_defs @ map (fn thm => thm RS @{thm case_sum_expand_Inr'}) corec_Inls) THEN |
755 (corec_defs @ map (fn thm => thm RS @{thm case_sum_expand_Inr'}) corec_Inls) THEN |
754 etac unfold_unique_mor 1; |
756 etac unfold_unique_mor 1; |
755 |
757 |
756 fun mk_dtor_coinduct_tac m raw_coind bis_rel rel_congs = |
758 fun mk_dtor_coinduct_tac m raw_coind bis_rel rel_congs = |
757 EVERY' [rtac rev_mp, rtac raw_coind, rtac ssubst, rtac bis_rel, rtac conjI, |
759 EVERY' [rtac rev_mp, rtac raw_coind, rtac iffD2, rtac bis_rel, rtac conjI, |
758 CONJ_WRAP' (K (rtac @{thm ord_le_eq_trans[OF subset_UNIV UNIV_Times_UNIV[THEN sym]]})) |
760 CONJ_WRAP' (K (rtac @{thm ord_le_eq_trans[OF subset_UNIV UNIV_Times_UNIV[THEN sym]]})) |
759 rel_congs, |
761 rel_congs, |
760 CONJ_WRAP' (fn rel_cong => EVERY' [rtac allI, rtac allI, rtac impI, |
762 CONJ_WRAP' (fn rel_cong => EVERY' [rtac allI, rtac allI, rtac impI, |
761 REPEAT_DETERM o etac allE, rtac (rel_cong RS @{thm eq_refl} RS @{thm predicate2D}), |
763 REPEAT_DETERM o etac allE, rtac (rel_cong RS @{thm eq_refl} RS @{thm predicate2D}), |
762 REPEAT_DETERM_N m o rtac refl, |
764 REPEAT_DETERM_N m o rtac refl, |