# HG changeset patch # User huffman # Date 1187635112 -7200 # Node ID d42cf77da51f0accb3df9144c4e808ed87e85ae2 # Parent 65fd09a7243f4e17fff072e51fa1b80799bd3422 cleaned up; declared more simp rules diff -r 65fd09a7243f -r d42cf77da51f src/HOL/Library/Boolean_Algebra.thy --- a/src/HOL/Library/Boolean_Algebra.thy Mon Aug 20 20:36:19 2007 +0200 +++ b/src/HOL/Library/Boolean_Algebra.thy Mon Aug 20 20:38:32 2007 +0200 @@ -12,9 +12,9 @@ begin locale boolean = - fixes conj :: "'a => 'a => 'a" (infixr "\" 70) - fixes disj :: "'a => 'a => 'a" (infixr "\" 65) - fixes compl :: "'a => 'a" ("\ _" [81] 80) + fixes conj :: "'a \ 'a \ 'a" (infixr "\" 70) + fixes disj :: "'a \ 'a \ 'a" (infixr "\" 65) + fixes compl :: "'a \ 'a" ("\ _" [81] 80) fixes zero :: "'a" ("\") fixes one :: "'a" ("\") assumes conj_assoc: "(x \ y) \ z = x \ (y \ z)" @@ -23,10 +23,10 @@ assumes disj_commute: "x \ y = y \ x" assumes conj_disj_distrib: "x \ (y \ z) = (x \ y) \ (x \ z)" assumes disj_conj_distrib: "x \ (y \ z) = (x \ y) \ (x \ z)" - assumes conj_one_right: "x \ \ = x" - assumes disj_zero_right: "x \ \ = x" - assumes conj_cancel_right: "x \ \ x = \" - assumes disj_cancel_right: "x \ \ x = \" + assumes conj_one_right [simp]: "x \ \ = x" + assumes disj_zero_right [simp]: "x \ \ = x" + assumes conj_cancel_right [simp]: "x \ \ x = \" + assumes disj_cancel_right [simp]: "x \ \ x = \" begin lemmas disj_ac = @@ -51,7 +51,7 @@ apply (rule conj_cancel_right) done -text {* Complement *} +subsection {* Complement *} lemma complement_unique: assumes 1: "a \ x = \" @@ -67,25 +67,25 @@ thus "x = y" using conj_one_right by simp qed -lemma compl_unique: "[| x \ y = \; x \ y = \ |] ==> \ x = y" +lemma compl_unique: "\x \ y = \; x \ y = \\ \ \ x = y" by (rule complement_unique [OF conj_cancel_right disj_cancel_right]) lemma double_compl [simp]: "\ (\ x) = x" proof (rule compl_unique) - from conj_cancel_right show "\ x \ x = \" by (simp add: conj_commute) - from disj_cancel_right show "\ x \ x = \" by (simp add: disj_commute) + from conj_cancel_right show "\ x \ x = \" by (simp only: conj_commute) + from disj_cancel_right show "\ x \ x = \" by (simp only: disj_commute) qed lemma compl_eq_compl_iff [simp]: "(\ x = \ y) = (x = y)" by (rule inj_eq [OF inj_on_inverseI], rule double_compl) -text {* Conjunction *} +subsection {* Conjunction *} lemma conj_absorb: "x \ x = x" proof - have "x \ x = (x \ x) \ \" using disj_zero_right by simp also have "... = (x \ x) \ (x \ \ x)" using conj_cancel_right by simp - also have "... = x \ (x \ \ x)" using conj_disj_distrib by simp + also have "... = x \ (x \ \ x)" using conj_disj_distrib by (simp only:) also have "... = x \ \" using disj_cancel_right by simp also have "... = x" using conj_one_right by simp finally show ?thesis . @@ -113,16 +113,16 @@ by (subst conj_commute) (rule conj_cancel_right) lemma conj_left_absorb [simp]: "x \ (x \ y) = x \ y" -by (simp add: conj_assoc [symmetric] conj_absorb) +by (simp only: conj_assoc [symmetric] conj_absorb) lemma conj_disj_distrib2: "(y \ z) \ x = (y \ x) \ (z \ x)" -by (simp add: conj_commute conj_disj_distrib) +by (simp only: conj_commute conj_disj_distrib) lemmas conj_disj_distribs = conj_disj_distrib conj_disj_distrib2 -text {* Disjunction *} +subsection {* Disjunction *} lemma disj_absorb [simp]: "x \ x = x" by (rule boolean.conj_absorb [OF dual]) @@ -152,23 +152,23 @@ lemmas disj_conj_distribs = disj_conj_distrib disj_conj_distrib2 -text {* De Morgan's Laws *} +subsection {* De Morgan's Laws *} lemma de_Morgan_conj [simp]: "\ (x \ y) = \ x \ \ y" proof (rule compl_unique) have "(x \ y) \ (\ x \ \ y) = ((x \ y) \ \ x) \ ((x \ y) \ \ y)" by (rule conj_disj_distrib) also have "... = (y \ (x \ \ x)) \ (x \ (y \ \ y))" - by (simp add: conj_ac) + by (simp only: conj_ac) finally show "(x \ y) \ (\ x \ \ y) = \" - by (simp add: conj_cancel_right conj_zero_right disj_zero_right) + by (simp only: conj_cancel_right conj_zero_right disj_zero_right) next have "(x \ y) \ (\ x \ \ y) = (x \ (\ x \ \ y)) \ (y \ (\ x \ \ y))" by (rule disj_conj_distrib2) also have "... = (\ y \ (x \ \ x)) \ (\ x \ (y \ \ y))" - by (simp add: disj_ac) + by (simp only: disj_ac) finally show "(x \ y) \ (\ x \ \ y) = \" - by (simp add: disj_cancel_right disj_one_right conj_one_right) + by (simp only: disj_cancel_right disj_one_right conj_one_right) qed lemma de_Morgan_disj [simp]: "\ (x \ y) = \ x \ \ y" @@ -176,7 +176,7 @@ end -text {* Symmetric Difference *} +subsection {* Symmetric Difference *} locale boolean_xor = boolean + fixes xor :: "'a => 'a => 'a" (infixr "\" 65) @@ -185,11 +185,11 @@ lemma xor_def2: "x \ y = (x \ y) \ (\ x \ \ y)" -by (simp add: xor_def conj_disj_distribs - disj_ac conj_ac conj_cancel_right disj_zero_left) +by (simp only: xor_def conj_disj_distribs + disj_ac conj_ac conj_cancel_right disj_zero_left) lemma xor_commute: "x \ y = y \ x" -by (simp add: xor_def conj_commute disj_commute) +by (simp only: xor_def conj_commute disj_commute) lemma xor_assoc: "(x \ y) \ z = x \ (y \ z)" proof - @@ -197,10 +197,10 @@ (\ x \ y \ \ z) \ (\ x \ \ y \ z)" have "?t \ (z \ x \ \ x) \ (z \ y \ \ y) = ?t \ (x \ y \ \ y) \ (x \ z \ \ z)" - by (simp add: conj_cancel_right conj_zero_right) + by (simp only: conj_cancel_right conj_zero_right) thus "(x \ y) \ z = x \ (y \ z)" - apply (simp add: xor_def de_Morgan_disj de_Morgan_conj double_compl) - apply (simp add: conj_disj_distribs conj_ac disj_ac) + apply (simp only: xor_def de_Morgan_disj de_Morgan_conj double_compl) + apply (simp only: conj_disj_distribs conj_ac disj_ac) done qed @@ -209,41 +209,41 @@ mk_left_commute [of "xor", OF xor_assoc xor_commute] lemma xor_zero_right [simp]: "x \ \ = x" -by (simp add: xor_def compl_zero conj_one_right conj_zero_right disj_zero_right) +by (simp only: xor_def compl_zero conj_one_right conj_zero_right disj_zero_right) lemma xor_zero_left [simp]: "\ \ x = x" by (subst xor_commute) (rule xor_zero_right) lemma xor_one_right [simp]: "x \ \ = \ x" -by (simp add: xor_def compl_one conj_zero_right conj_one_right disj_zero_left) +by (simp only: xor_def compl_one conj_zero_right conj_one_right disj_zero_left) lemma xor_one_left [simp]: "\ \ x = \ x" by (subst xor_commute) (rule xor_one_right) lemma xor_self [simp]: "x \ x = \" -by (simp add: xor_def conj_cancel_right conj_cancel_left disj_zero_right) +by (simp only: xor_def conj_cancel_right conj_cancel_left disj_zero_right) lemma xor_left_self [simp]: "x \ (x \ y) = y" -by (simp add: xor_assoc [symmetric] xor_self xor_zero_left) +by (simp only: xor_assoc [symmetric] xor_self xor_zero_left) lemma xor_compl_left: "\ x \ y = \ (x \ y)" -apply (simp add: xor_def de_Morgan_disj de_Morgan_conj double_compl) -apply (simp add: conj_disj_distribs) -apply (simp add: conj_cancel_right conj_cancel_left) -apply (simp add: disj_zero_left disj_zero_right) -apply (simp add: disj_ac conj_ac) +apply (simp only: xor_def de_Morgan_disj de_Morgan_conj double_compl) +apply (simp only: conj_disj_distribs) +apply (simp only: conj_cancel_right conj_cancel_left) +apply (simp only: disj_zero_left disj_zero_right) +apply (simp only: disj_ac conj_ac) done lemma xor_compl_right: "x \ \ y = \ (x \ y)" -apply (simp add: xor_def de_Morgan_disj de_Morgan_conj double_compl) -apply (simp add: conj_disj_distribs) -apply (simp add: conj_cancel_right conj_cancel_left) -apply (simp add: disj_zero_left disj_zero_right) -apply (simp add: disj_ac conj_ac) +apply (simp only: xor_def de_Morgan_disj de_Morgan_conj double_compl) +apply (simp only: conj_disj_distribs) +apply (simp only: conj_cancel_right conj_cancel_left) +apply (simp only: disj_zero_left disj_zero_right) +apply (simp only: disj_ac conj_ac) done lemma xor_cancel_right [simp]: "x \ \ x = \" -by (simp add: xor_compl_right xor_self compl_zero) +by (simp only: xor_compl_right xor_self compl_zero) lemma xor_cancel_left [simp]: "\ x \ x = \" by (subst xor_commute) (rule xor_cancel_right) @@ -252,9 +252,9 @@ proof - have "(x \ y \ \ z) \ (x \ \ y \ z) = (y \ x \ \ x) \ (z \ x \ \ x) \ (x \ y \ \ z) \ (x \ \ y \ z)" - by (simp add: conj_cancel_right conj_zero_right disj_zero_left) + by (simp only: conj_cancel_right conj_zero_right disj_zero_left) thus "x \ (y \ z) = (x \ y) \ (x \ z)" - by (simp (no_asm_use) add: + by (simp (no_asm_use) only: xor_def de_Morgan_disj de_Morgan_conj double_compl conj_disj_distribs conj_ac disj_ac) qed @@ -265,7 +265,7 @@ have "x \ (y \ z) = (x \ y) \ (x \ z)" by (rule conj_xor_distrib) thus "(y \ z) \ x = (y \ x) \ (z \ x)" - by (simp add: conj_commute) + by (simp only: conj_commute) qed lemmas conj_xor_distribs =