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