Nominal/Nominal2_Base.thy
changeset 3191 0440bc1a2438
parent 3189 e46d4ee64221
child 3195 deef21dc972f
--- a/Nominal/Nominal2_Base.thy	Mon Jun 18 14:50:02 2012 +0100
+++ b/Nominal/Nominal2_Base.thy	Thu Jul 12 10:11:32 2012 +0100
@@ -3054,6 +3054,12 @@
 where
   "(a \<leftrightarrow> b) = (atom a \<rightleftharpoons> atom b)"
 
+lemma flip_fresh_fresh:
+  assumes "atom a \<sharp> x" "atom b \<sharp> x"
+  shows "(a \<leftrightarrow> b) \<bullet> x = x"
+using assms
+by (simp add: flip_def swap_fresh_fresh)
+
 lemma flip_self [simp]: "(a \<leftrightarrow> a) = 0"
   unfolding flip_def by (rule swap_self)
 
@@ -3073,7 +3079,6 @@
   by (simp add: flip_commute)
 
 lemma flip_eqvt [eqvt]: 
-  fixes a b c::"'a::at_base"
   shows "p \<bullet> (a \<leftrightarrow> b) = (p \<bullet> a \<leftrightarrow> p \<bullet> b)"
   unfolding flip_def
   by (simp add: swap_eqvt atom_eqvt)
@@ -3091,6 +3096,13 @@
 text {* the following two lemmas do not hold for at_base, 
   only for single sort atoms from at *}
 
+lemma flip_triple:
+  fixes a b c::"'a::at"
+  assumes "a \<noteq> b" and "c \<noteq> b"
+  shows "(a \<leftrightarrow> c) + (b \<leftrightarrow> c) + (a \<leftrightarrow> c) = (a \<leftrightarrow> b)"
+  unfolding flip_def
+  by (rule swap_triple) (simp_all add: assms)
+
 lemma permute_flip_at:
   fixes a b c::"'a::at"
   shows "(a \<leftrightarrow> b) \<bullet> c = (if c = a then b else if c = b then a else c)"
@@ -3106,14 +3118,6 @@
   and   "(a \<leftrightarrow> b) \<bullet> b = a"
   unfolding permute_flip_at by simp_all
 
-lemma flip_fresh_fresh:
-  fixes a b::"'a::at_base"
-  assumes "atom a \<sharp> x" "atom b \<sharp> x"
-  shows "(a \<leftrightarrow> b) \<bullet> x = x"
-using assms
-by (simp add: flip_def swap_fresh_fresh)
-
-
 
 subsection {* Syntax for coercing at-elements to the atom-type *}