src/HOL/ex/Bit_Operations.thy
changeset 71822 67cc2319104f
parent 71821 541e68d1a964
child 71823 214b48a1937b
equal deleted inserted replaced
71821:541e68d1a964 71822:67cc2319104f
    44 lemma and_zero_eq [simp]:
    44 lemma and_zero_eq [simp]:
    45   "a AND 0 = 0"
    45   "a AND 0 = 0"
    46   by (simp add: bit_eq_iff bit_and_iff)
    46   by (simp add: bit_eq_iff bit_and_iff)
    47 
    47 
    48 lemma one_and_eq [simp]:
    48 lemma one_and_eq [simp]:
    49   "1 AND a = of_bool (odd a)"
    49   "1 AND a = a mod 2"
    50   by (simp add: bit_eq_iff bit_and_iff) (auto simp add: bit_1_iff)
    50   by (simp add: bit_eq_iff bit_and_iff) (auto simp add: bit_1_iff)
    51 
    51 
    52 lemma and_one_eq [simp]:
    52 lemma and_one_eq [simp]:
    53   "a AND 1 = of_bool (odd a)"
    53   "a AND 1 = a mod 2"
    54   using one_and_eq [of a] by (simp add: ac_simps)
    54   using one_and_eq [of a] by (simp add: ac_simps)
    55 
    55 
    56 lemma one_or_eq [simp]:
    56 lemma one_or_eq:
    57   "1 OR a = a + of_bool (even a)"
    57   "1 OR a = a + of_bool (even a)"
    58   by (simp add: bit_eq_iff bit_or_iff add.commute [of _ 1] even_bit_succ_iff) (auto simp add: bit_1_iff)
    58   by (simp add: bit_eq_iff bit_or_iff add.commute [of _ 1] even_bit_succ_iff) (auto simp add: bit_1_iff)
    59 
    59 
    60 lemma or_one_eq [simp]:
    60 lemma or_one_eq:
    61   "a OR 1 = a + of_bool (even a)"
    61   "a OR 1 = a + of_bool (even a)"
    62   using one_or_eq [of a] by (simp add: ac_simps)
    62   using one_or_eq [of a] by (simp add: ac_simps)
    63 
    63 
    64 lemma one_xor_eq [simp]:
    64 lemma one_xor_eq:
    65   "1 XOR a = a + of_bool (even a) - of_bool (odd a)"
    65   "1 XOR a = a + of_bool (even a) - of_bool (odd a)"
    66   by (simp add: bit_eq_iff bit_xor_iff add.commute [of _ 1] even_bit_succ_iff) (auto simp add: bit_1_iff odd_bit_iff_bit_pred elim: oddE)
    66   by (simp add: bit_eq_iff bit_xor_iff add.commute [of _ 1] even_bit_succ_iff) (auto simp add: bit_1_iff odd_bit_iff_bit_pred elim: oddE)
    67 
    67 
    68 lemma xor_one_eq [simp]:
    68 lemma xor_one_eq:
    69   "a XOR 1 = a + of_bool (even a) - of_bool (odd a)"
    69   "a XOR 1 = a + of_bool (even a) - of_bool (odd a)"
    70   using one_xor_eq [of a] by (simp add: ac_simps)
    70   using one_xor_eq [of a] by (simp add: ac_simps)
    71 
    71 
    72 lemma take_bit_and [simp]:
    72 lemma take_bit_and [simp]:
    73   \<open>take_bit n (a AND b) = take_bit n a AND take_bit n b\<close>
    73   \<open>take_bit n (a AND b) = take_bit n a AND take_bit n b\<close>
   531 lemma xor_nat_rec:
   531 lemma xor_nat_rec:
   532   \<open>m XOR n = of_bool (odd m \<noteq> odd n) + 2 * ((m div 2) XOR (n div 2))\<close> for m n :: nat
   532   \<open>m XOR n = of_bool (odd m \<noteq> odd n) + 2 * ((m div 2) XOR (n div 2))\<close> for m n :: nat
   533   by (simp add: xor_nat_def xor_int_rec [of \<open>int m\<close> \<open>int n\<close>] zdiv_int nat_add_distrib nat_mult_distrib)
   533   by (simp add: xor_nat_def xor_int_rec [of \<open>int m\<close> \<open>int n\<close>] zdiv_int nat_add_distrib nat_mult_distrib)
   534 
   534 
   535 lemma Suc_0_and_eq [simp]:
   535 lemma Suc_0_and_eq [simp]:
   536   \<open>Suc 0 AND n = of_bool (odd n)\<close>
   536   \<open>Suc 0 AND n = n mod 2\<close>
   537   using one_and_eq [of n] by simp
   537   using one_and_eq [of n] by simp
   538 
   538 
   539 lemma and_Suc_0_eq [simp]:
   539 lemma and_Suc_0_eq [simp]:
   540   \<open>n AND Suc 0 = of_bool (odd n)\<close>
   540   \<open>n AND Suc 0 = n mod 2\<close>
   541   using and_one_eq [of n] by simp
   541   using and_one_eq [of n] by simp
   542 
   542 
   543 lemma Suc_0_or_eq [simp]:
   543 lemma Suc_0_or_eq:
   544   \<open>Suc 0 OR n = n + of_bool (even n)\<close>
   544   \<open>Suc 0 OR n = n + of_bool (even n)\<close>
   545   using one_or_eq [of n] by simp
   545   using one_or_eq [of n] by simp
   546 
   546 
   547 lemma or_Suc_0_eq [simp]:
   547 lemma or_Suc_0_eq:
   548   \<open>n OR Suc 0 = n + of_bool (even n)\<close>
   548   \<open>n OR Suc 0 = n + of_bool (even n)\<close>
   549   using or_one_eq [of n] by simp
   549   using or_one_eq [of n] by simp
   550 
   550 
   551 lemma Suc_0_xor_eq [simp]:
   551 lemma Suc_0_xor_eq:
   552   \<open>Suc 0 XOR n = n + of_bool (even n) - of_bool (odd n)\<close>
   552   \<open>Suc 0 XOR n = n + of_bool (even n) - of_bool (odd n)\<close>
   553   using one_xor_eq [of n] by simp
   553   using one_xor_eq [of n] by simp
   554 
   554 
   555 lemma xor_Suc_0_eq [simp]:
   555 lemma xor_Suc_0_eq:
   556   \<open>n XOR Suc 0 = n + of_bool (even n) - of_bool (odd n)\<close>
   556   \<open>n XOR Suc 0 = n + of_bool (even n) - of_bool (odd n)\<close>
   557   using xor_one_eq [of n] by simp
   557   using xor_one_eq [of n] by simp
   558 
   558 
   559 
   559 
   560 subsubsection \<open>Instances for \<^typ>\<open>integer\<close> and \<^typ>\<open>natural\<close>\<close>
   560 subsubsection \<open>Instances for \<^typ>\<open>integer\<close> and \<^typ>\<open>natural\<close>\<close>