19 val mk_rel_Grp_tac: thm list -> thm -> thm -> thm -> thm -> thm list -> |
19 val mk_rel_Grp_tac: thm list -> thm -> thm -> thm -> thm -> thm list -> |
20 {prems: thm list, context: Proof.context} -> tactic |
20 {prems: thm list, context: Proof.context} -> tactic |
21 val mk_rel_eq_tac: int -> thm -> thm -> thm -> tactic |
21 val mk_rel_eq_tac: int -> thm -> thm -> thm -> tactic |
22 val mk_rel_OO_tac: thm list -> thm -> thm -> thm -> thm -> thm list -> |
22 val mk_rel_OO_tac: thm list -> thm -> thm -> thm -> thm -> thm list -> |
23 {prems: thm list, context: Proof.context} -> tactic |
23 {prems: thm list, context: Proof.context} -> tactic |
24 val mk_in_rel_tac: thm list -> {prems: 'b, context: Proof.context} -> tactic |
24 val mk_in_rel_tac: thm -> {prems: 'a, context: Proof.context} -> tactic |
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: thm list -> thm -> thm -> thm -> thm list -> |
26 val mk_rel_conversep_le_tac: thm list -> thm -> thm -> thm -> thm list -> |
27 {prems: thm list, context: Proof.context} -> tactic |
27 {prems: thm list, context: Proof.context} -> tactic |
28 val mk_rel_mono_tac: thm list -> thm -> {prems: 'a, context: Proof.context} -> tactic |
28 val mk_rel_mono_tac: thm list -> thm -> {prems: 'a, context: Proof.context} -> tactic |
29 end; |
29 end; |
183 EVERY' (map (fn thm => EVERY' [rtac @{thm GrpI}, rtac trans, |
183 EVERY' (map (fn thm => EVERY' [rtac @{thm GrpI}, rtac trans, |
184 rtac trans, rtac map_cong0, REPEAT_DETERM_N n o rtac thm, |
184 rtac trans, rtac map_cong0, REPEAT_DETERM_N n o rtac thm, |
185 rtac (map_comp RS sym), atac, atac]) [@{thm fst_fstOp}, @{thm snd_sndOp}])] 1 |
185 rtac (map_comp RS sym), atac, atac]) [@{thm fst_fstOp}, @{thm snd_sndOp}])] 1 |
186 end; |
186 end; |
187 |
187 |
188 fun mk_in_rel_tac rel_OO_Grs {context = ctxt, prems = _} = |
188 fun mk_in_rel_tac rel_OO_Gr {context = ctxt, prems = _} = |
189 unfold_thms_tac ctxt rel_OO_Grs THEN |
189 EVERY' [rtac (rel_OO_Gr RS fun_cong RS fun_cong RS trans), rtac iffI, |
190 EVERY' [rtac iffI, |
|
191 REPEAT_DETERM o eresolve_tac [@{thm GrpE}, @{thm relcomppE}, @{thm conversepE}], |
190 REPEAT_DETERM o eresolve_tac [@{thm GrpE}, @{thm relcomppE}, @{thm conversepE}], |
192 hyp_subst_tac ctxt, rtac exI, rtac conjI, atac, rtac conjI, rtac refl, rtac refl, |
191 hyp_subst_tac ctxt, rtac exI, rtac conjI, atac, rtac conjI, rtac refl, rtac refl, |
193 REPEAT_DETERM o eresolve_tac [exE, conjE], rtac @{thm relcomppI}, rtac @{thm conversepI}, |
192 REPEAT_DETERM o eresolve_tac [exE, conjE], rtac @{thm relcomppI}, rtac @{thm conversepI}, |
194 etac @{thm GrpI}, atac, etac @{thm GrpI}, atac] 1; |
193 etac @{thm GrpI}, atac, etac @{thm GrpI}, atac] 1; |
195 |
194 |