src/HOL/Nominal/Nominal.thy
changeset 19972 89c5afe4139a
parent 19869 eba1b9e7c458
child 19986 3e0eababf58d
--- a/src/HOL/Nominal/Nominal.thy	Fri Jun 30 18:26:36 2006 +0200
+++ b/src/HOL/Nominal/Nominal.thy	Sun Jul 02 17:27:10 2006 +0200
@@ -87,6 +87,16 @@
   shows "pi\<bullet>(b::bool) = b"
   by (cases b) auto
 
+lemma perm_boolI:
+  assumes a: "P"
+  shows "pi\<bullet>P"
+  using a by (simp add: perm_bool)
+
+lemma perm_boolE:
+  assumes a: "pi\<bullet>P"
+  shows "P"
+  using a by (simp add: perm_bool)
+
 (* permutation on options *)
 primrec (unchecked perm_option)
   perm_some_def:  "pi\<bullet>Some(x) = Some(pi\<bullet>x)"
@@ -865,6 +875,13 @@
 apply(simp add: supp_def dj_perm_forget[OF dj])
 done
 
+lemma at_fresh_ineq:
+  fixes a :: "'x"
+  and   b :: "'y"
+  assumes dj: "disjoint TYPE('y) TYPE('x)"
+  shows "a\<sharp>b" 
+  by (simp add: fresh_def dj_supp[OF dj])
+
 section {* permutation type instances *}
 (* ===================================*)
 
@@ -1406,6 +1423,15 @@
   shows  "a\<sharp>x"
 using a by (simp add: pt_fresh_bij[OF pt, OF at])
 
+lemma pt_fresh_eqvt:
+  fixes  pi :: "'x prm"
+  and     x :: "'a"
+  and     a :: "'x"
+  assumes pt: "pt TYPE('a) TYPE('x)"
+  and     at: "at TYPE('x)"
+  shows "pi\<bullet>(a\<sharp>x) = (pi\<bullet>a)\<sharp>(pi\<bullet>x)"
+  by (simp add: perm_bool pt_fresh_bij[OF pt, OF at])
+
 lemma pt_perm_fresh1:
   fixes a :: "'x"
   and   b :: "'x"
@@ -1556,6 +1582,29 @@
   thus ?thesis by (simp add: pt2[OF pt])
 qed
 
+section {* equivaraince for some connectives *}
+
+lemma pt_all_eqvt:
+  fixes  pi :: "'x prm"
+  and     x :: "'a"
+  assumes pt: "pt TYPE('a) TYPE('x)"
+  and     at: "at TYPE('x)"
+  shows "pi\<bullet>(\<forall>(x::'a). P x) = (\<forall>(x::'a). (pi\<bullet>P) x)"
+apply(auto simp add: perm_bool perm_fun_def)
+apply(drule_tac x="pi\<bullet>x" in spec)
+apply(simp add: pt_rev_pi[OF pt, OF at])
+done
+
+lemma imp_eqvt:
+  fixes pi::"'x prm"
+  shows "pi\<bullet>(A\<longrightarrow>B) = ((pi\<bullet>A)\<longrightarrow>(pi\<bullet>B))"
+  by (simp add: perm_bool)
+
+lemma conj_eqvt:
+  fixes pi::"'x prm"
+  shows "pi\<bullet>(A\<and>B) = ((pi\<bullet>A)\<and>(pi\<bullet>B))"
+  by (simp add: perm_bool)
+
 section {* facts about supports *}
 (*==============================*)