alpha_res implies alpha_set :)
authorCezary Kaliszyk <kaliszyk@in.tum.de>
Sun, 30 Jan 2011 12:09:23 +0900
changeset 2712 c66d288b9fa0
parent 2711 ec1a7ef740b8
child 2713 a84999edbcb3
alpha_res implies alpha_set :)
Nominal/Nominal2_Abs.thy
--- a/Nominal/Nominal2_Abs.thy	Sun Jan 30 09:57:37 2011 +0900
+++ b/Nominal/Nominal2_Abs.thy	Sun Jan 30 12:09:23 2011 +0900
@@ -285,7 +285,7 @@
   then have "(supp x' - as') \<inter> (p \<bullet> (supp x \<inter> as)) = {}" using a by (simp add: alphas)
   ultimately show "p \<bullet> (supp x \<inter> as) = supp x' \<inter> as'"
     by (auto dest: disjoint_right_eq)
-qed 
+qed
 
 lemma alpha_abs_res_stronger1_aux:
   assumes asm: "(as, x) \<approx>res (op =) supp p' (as', x')"
@@ -320,6 +320,26 @@
   show "\<exists>p. (as, x) \<approx>res (op =) supp p (as', x') \<and> supp p \<subseteq> (supp x \<inter> as) \<union> (supp x' \<inter> as')" by blast
 qed
 
+lemma alpha_abs_res_minimal:
+  assumes asm: "(as, x) \<approx>res (op =) supp p (as', x')"
+  shows "(as \<inter> supp x, x) \<approx>res (op =) supp p (as' \<inter> supp x', x')"
+  using asm unfolding alpha_res by (auto simp add: Diff_Int)
+
+lemma alpha_abs_res_abs_set:
+  assumes asm: "(as, x) \<approx>res (op =) supp p (as', x')"
+  shows "(as \<inter> supp x, x) \<approx>set (op =) supp p (as' \<inter> supp x', x')"
+proof -
+  have c: "p \<bullet> x = x'"
+    using alpha_abs_res_minimal[OF asm] unfolding alpha_res by clarify
+  then have a: "supp x - as \<inter> supp x = supp (p \<bullet> x) - as' \<inter> supp (p \<bullet> x)"
+    using alpha_abs_res_minimal[OF asm] by (simp add: alpha_res)
+  have b: "(supp x - as \<inter> supp x) \<sharp>* p"
+    using alpha_abs_res_minimal[OF asm] unfolding alpha_res by clarify
+  have "p \<bullet> (as \<inter> supp x) = as' \<inter> supp (p \<bullet> x)"
+    by (metis Int_commute asm c supp_property_res)
+  then show ?thesis using a b c unfolding alpha_set by simp
+qed
+
 lemma alpha_abs_res_stronger1:
   assumes asm: "(as, x) \<approx>res (op =) supp p' (as', x')"
   shows "\<exists>p. (as, x) \<approx>res (op =) supp p (as', x') \<and> supp p \<subseteq> as \<union> as'"