Nominal/Nominal2_Base.thy
changeset 2683 42c0d011a177
parent 2679 e003e5e36bae
child 2685 1df873b63cb2
--- a/Nominal/Nominal2_Base.thy	Wed Jan 19 18:07:29 2011 +0100
+++ b/Nominal/Nominal2_Base.thy	Wed Jan 19 18:56:28 2011 +0100
@@ -844,14 +844,25 @@
   by (simp add: fresh_permute_iff)
 
 lemma supp_eqvt:
-  fixes  p  :: "perm"
-  and    x   :: "'a::pt"
   shows "p \<bullet> (supp x) = supp (p \<bullet> x)"
   unfolding supp_conv_fresh
   unfolding Collect_def
   unfolding permute_fun_def
   by (simp add: Not_eqvt fresh_eqvt)
 
+lemma fresh_permute_left:
+  shows "a \<sharp> p \<bullet> x \<longleftrightarrow> - p \<bullet> a \<sharp> x"
+proof
+  assume "a \<sharp> p \<bullet> x"
+  then have "- p \<bullet> a \<sharp> - p \<bullet> p \<bullet> x" by (simp only: fresh_permute_iff)
+  then show "- p \<bullet> a \<sharp> x" by simp
+next
+  assume "- p \<bullet> a \<sharp> x"
+  then have "p \<bullet> - p \<bullet> a \<sharp> p \<bullet> x" by (simp only: fresh_permute_iff)
+  then show "a \<sharp> p \<bullet> x" by simp
+qed
+
+
 subsection {* supports *}
 
 definition
@@ -2236,11 +2247,15 @@
   apply(simp)
   done
 
+lemma fresh_at_base_permute_iff[simp]:
+  fixes a::"'a::at_base"
+  shows "atom (p \<bullet> a) \<sharp> p \<bullet> x \<longleftrightarrow> atom a \<sharp> x"
+  unfolding atom_eqvt[symmetric]
+  by (simp add: fresh_permute_iff)
+
 
 section {* Infrastructure for concrete atom types *}
 
-section {* A swapping operation for concrete atoms *}
-  
 definition
   flip :: "'a::at_base \<Rightarrow> 'a \<Rightarrow> perm" ("'(_ \<leftrightarrow> _')")
 where
@@ -2305,6 +2320,8 @@
 using assms
 by (simp add: flip_def swap_fresh_fresh)
 
+
+
 subsection {* Syntax for coercing at-elements to the atom-type *}
 
 syntax
@@ -2502,7 +2519,7 @@
   apply (subst fresh_fun_apply', assumption+)
   apply (drule fresh_permute_iff [where p=p, THEN iffD2])
   apply (drule fresh_permute_iff [where p=p, THEN iffD2])
-  apply (simp add: atom_eqvt permute_fun_app_eq [where f=h])
+  apply (simp only: atom_eqvt permute_fun_app_eq [where f=h])
   apply (erule (1) fresh_fun_apply' [symmetric])
   done