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" |