src/HOL/ex/Bit_Operations.thy
changeset 71419 1d8e914e04d6
parent 71418 bd9d27ccb3a3
child 71420 572ab9e64e18
equal deleted inserted replaced
71418:bd9d27ccb3a3 71419:1d8e914e04d6
   127 
   127 
   128 lemma one_xor_eq [simp]:
   128 lemma one_xor_eq [simp]:
   129   "1 XOR a = a + of_bool (even a) - of_bool (odd a)"
   129   "1 XOR a = a + of_bool (even a) - of_bool (odd a)"
   130   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)
   130   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)
   131 
   131 
   132 lemma xor_one_int_eq [simp]:
   132 lemma xor_one_eq [simp]:
   133   "a XOR 1 = a + of_bool (even a) - of_bool (odd a)"
   133   "a XOR 1 = a + of_bool (even a) - of_bool (odd a)"
   134   using one_xor_eq [of a] by (simp add: ac_simps)
   134   using one_xor_eq [of a] by (simp add: ac_simps)
   135 
   135 
   136 lemma take_bit_and [simp]:
   136 lemma take_bit_and [simp]:
   137   \<open>take_bit n (a AND b) = take_bit n a AND take_bit n b\<close>
   137   \<open>take_bit n (a AND b) = take_bit n a AND take_bit n b\<close>
   417 
   417 
   418 global_interpretation xor_nat: comm_monoid "(XOR)" "0 :: nat"
   418 global_interpretation xor_nat: comm_monoid "(XOR)" "0 :: nat"
   419   by standard simp
   419   by standard simp
   420 
   420 
   421 lemma Suc_0_and_eq [simp]:
   421 lemma Suc_0_and_eq [simp]:
   422   "Suc 0 AND n = n mod 2"
   422   \<open>Suc 0 AND n = of_bool (odd n)\<close>
   423   by (cases n) auto
   423   using one_and_eq [of n] by simp
   424 
   424 
   425 lemma and_Suc_0_eq [simp]:
   425 lemma and_Suc_0_eq [simp]:
   426   "n AND Suc 0 = n mod 2"
   426   \<open>n AND Suc 0 = of_bool (odd n)\<close>
   427   using Suc_0_and_eq [of n] by (simp add: ac_simps)
   427   using and_one_eq [of n] by simp
   428 
   428 
   429 lemma Suc_0_or_eq [simp]:
   429 lemma Suc_0_or_eq [simp]:
   430   "Suc 0 OR n = n + of_bool (even n)"
   430   \<open>Suc 0 OR n = n + of_bool (even n)\<close>
   431   by (cases n) (simp_all add: ac_simps)
   431   using one_or_eq [of n] by simp
   432 
   432 
   433 lemma or_Suc_0_eq [simp]:
   433 lemma or_Suc_0_eq [simp]:
   434   "n OR Suc 0 = n + of_bool (even n)"
   434   \<open>n OR Suc 0 = n + of_bool (even n)\<close>
   435   using Suc_0_or_eq [of n] by (simp add: ac_simps)
   435   using or_one_eq [of n] by simp
   436 
   436 
   437 lemma Suc_0_xor_eq [simp]:
   437 lemma Suc_0_xor_eq [simp]:
   438   "Suc 0 XOR n = n + of_bool (even n) - of_bool (odd n)"
   438   \<open>Suc 0 XOR n = n + of_bool (even n) - of_bool (odd n)\<close>
   439   by (cases n) (simp_all add: ac_simps)
   439   using one_xor_eq [of n] by simp
   440 
   440 
   441 lemma xor_Suc_0_eq [simp]:
   441 lemma xor_Suc_0_eq [simp]:
   442   "n XOR Suc 0 = n + of_bool (even n) - of_bool (odd n)"
   442   \<open>n XOR Suc 0 = n + of_bool (even n) - of_bool (odd n)\<close>
   443   using Suc_0_xor_eq [of n] by (simp add: ac_simps)
   443   using xor_one_eq [of n] by simp
   444 
   444 
   445 
   445 
   446 subsubsection \<open>Instance \<^typ>\<open>int\<close>\<close>
   446 subsubsection \<open>Instance \<^typ>\<open>int\<close>\<close>
   447 
   447 
   448 abbreviation (input) complement :: "int \<Rightarrow> int"
   448 abbreviation (input) complement :: "int \<Rightarrow> int"