25 val mk_rel_conversep_tac: thm -> thm -> tactic |
25 val mk_rel_conversep_tac: thm -> thm -> tactic |
26 val mk_rel_conversep_le_tac: Proof.context -> thm list -> thm -> thm -> thm -> thm list -> tactic |
26 val mk_rel_conversep_le_tac: Proof.context -> thm list -> thm -> thm -> thm -> thm list -> tactic |
27 val mk_rel_map0_tac: Proof.context -> int -> thm -> thm -> thm -> thm -> tactic |
27 val mk_rel_map0_tac: Proof.context -> int -> thm -> thm -> thm -> thm -> tactic |
28 val mk_rel_mono_tac: thm list -> thm -> tactic |
28 val mk_rel_mono_tac: thm list -> thm -> tactic |
29 val mk_rel_mono_strong0_tac: Proof.context -> thm -> thm list -> tactic |
29 val mk_rel_mono_strong0_tac: Proof.context -> thm -> thm list -> tactic |
|
30 val mk_rel_transfer_tac: Proof.context -> thm -> thm list -> thm -> tactic |
30 |
31 |
31 val mk_map_transfer_tac: Proof.context -> thm -> thm -> thm list -> thm -> thm -> tactic |
32 val mk_map_transfer_tac: Proof.context -> thm -> thm -> thm list -> thm -> thm -> tactic |
32 |
33 |
33 val mk_in_bd_tac: Proof.context -> int -> thm -> thm -> thm -> thm -> thm list -> thm list -> |
34 val mk_in_bd_tac: Proof.context -> int -> thm -> thm -> thm -> thm -> thm list -> thm list -> |
34 thm -> thm -> thm -> thm -> tactic |
35 thm -> thm -> thm -> thm -> tactic |
231 hyp_subst_tac ctxt 1 THEN |
232 hyp_subst_tac ctxt 1 THEN |
232 EVERY' [rtac exI, rtac @{thm conjI[OF CollectI conjI[OF refl refl]]}, |
233 EVERY' [rtac exI, rtac @{thm conjI[OF CollectI conjI[OF refl refl]]}, |
233 CONJ_WRAP' (fn thm => |
234 CONJ_WRAP' (fn thm => |
234 (etac (@{thm Collect_split_mono_strong} OF [thm, thm]) THEN' atac)) |
235 (etac (@{thm Collect_split_mono_strong} OF [thm, thm]) THEN' atac)) |
235 set_maps] 1; |
236 set_maps] 1; |
|
237 |
|
238 fun mk_rel_transfer_tac ctxt in_rel rel_map rel_mono_strong = |
|
239 let |
|
240 fun last_tac iffD = |
|
241 HEADGOAL (etac rel_mono_strong) THEN |
|
242 REPEAT_DETERM (HEADGOAL (etac (@{thm predicate2_transferD} RS iffD) THEN' |
|
243 REPEAT_DETERM o atac)); |
|
244 in |
|
245 REPEAT_DETERM (HEADGOAL (rtac @{thm rel_funI})) THEN |
|
246 (HEADGOAL (hyp_subst_tac ctxt THEN' rtac refl) ORELSE |
|
247 REPEAT_DETERM (HEADGOAL (eresolve_tac (Tactic.make_elim (in_rel RS iffD1) :: |
|
248 @{thms exE conjE CollectE}))) THEN |
|
249 HEADGOAL (hyp_subst_tac ctxt) THEN unfold_thms_tac ctxt rel_map THEN HEADGOAL (rtac iffI) THEN |
|
250 last_tac iffD1 THEN last_tac iffD2) |
|
251 end; |
236 |
252 |
237 fun mk_map_transfer_tac ctxt rel_mono in_rel set_maps map_cong0 map_comp = |
253 fun mk_map_transfer_tac ctxt rel_mono in_rel set_maps map_cong0 map_comp = |
238 let |
254 let |
239 val n = length set_maps; |
255 val n = length set_maps; |
240 val in_tac = if n = 0 then rtac UNIV_I else |
256 val in_tac = if n = 0 then rtac UNIV_I else |