Nominal/Rsp.thy
changeset 2147 e83493622e6f
parent 2116 ce228f7b2b72
child 2335 558c823f96aa
--- a/Nominal/Rsp.thy	Mon May 17 16:29:33 2010 +0200
+++ b/Nominal/Rsp.thy	Mon May 17 17:31:18 2010 +0200
@@ -145,10 +145,10 @@
 fun alpha_bn_rsp_tac simps res exhausts a ctxt =
   rtac allI THEN_ALL_NEW
   case_rules_tac ctxt a exhausts THEN_ALL_NEW
-  asm_full_simp_tac (HOL_ss addsimps simps) THEN_ALL_NEW
+  asm_full_simp_tac (HOL_ss addsimps simps addsimps @{thms alphas}) THEN_ALL_NEW
   TRY o REPEAT_ALL_NEW (rtac @{thm arg_cong2[of _ _ _ _ "op \<and>"]}) THEN_ALL_NEW
   TRY o eresolve_tac res THEN_ALL_NEW
-  asm_full_simp_tac (HOL_ss addsimps simps);
+  asm_full_simp_tac (HOL_ss addsimps simps)
 *}
 
 
@@ -186,10 +186,15 @@
 end
 *}
 
+lemma exi_same: "\<exists>(pi :: perm). P pi \<Longrightarrow> (\<And>(p :: perm). P p \<Longrightarrow> Q p) \<Longrightarrow> \<exists>pi. Q pi"
+  by auto
+
 ML {*
 fun prove_alpha_alphabn alphas ind simps alpha_bns ctxt =
   prove_by_rel_induct alphas build_alpha_alpha_bn_gl ind
-    (fn _ => asm_full_simp_tac (HOL_ss addsimps simps)) alpha_bns ctxt
+    (fn _ => asm_full_simp_tac (HOL_ss addsimps simps addsimps @{thms alphas})
+     THEN_ALL_NEW split_conj_tac THEN_ALL_NEW (TRY o etac @{thm exi_same})
+     THEN_ALL_NEW asm_full_simp_tac HOL_ss) alpha_bns ctxt
 *}
 
 ML {*