diff -r 00fce84413db -r c7bc3e70a8c7 src/HOL/Parity.thy --- a/src/HOL/Parity.thy Sun Nov 15 13:08:13 2020 +0000 +++ b/src/HOL/Parity.thy Sun Nov 15 10:13:03 2020 +0000 @@ -906,15 +906,17 @@ \a = b \ (\n. bit a n \ bit b n)\ by (auto intro: bit_eqI) -lemma bit_exp_iff: +named_theorems bit_simps \Simplification rules for \<^const>\bit\\ + +lemma bit_exp_iff [bit_simps]: \bit (2 ^ m) n \ 2 ^ m \ 0 \ m = n\ by (auto simp add: bit_iff_odd exp_div_exp_eq) -lemma bit_1_iff: +lemma bit_1_iff [bit_simps]: \bit 1 n \ 1 \ 0 \ n = 0\ using bit_exp_iff [of 0 n] by simp -lemma bit_2_iff: +lemma bit_2_iff [bit_simps]: \bit 2 n \ 2 \ 0 \ n = 1\ using bit_exp_iff [of 1 n] by auto @@ -931,7 +933,7 @@ ultimately show ?thesis by (simp add: ac_simps) qed -lemma bit_double_iff: +lemma bit_double_iff [bit_simps]: \bit (2 * a) n \ bit a (n - 1) \ n \ 0 \ 2 ^ n \ 0\ using even_mult_exp_div_exp_iff [of a 1 n] by (cases n, auto simp add: bit_iff_odd ac_simps) @@ -1193,7 +1195,7 @@ context semiring_bits begin -lemma bit_of_bool_iff: +lemma bit_of_bool_iff [bit_simps]: \bit (of_bool b) n \ b \ n = 0\ by (simp add: bit_1_iff) @@ -1201,7 +1203,7 @@ \even (of_nat n) \ even n\ by (induction n rule: nat_bit_induct) simp_all -lemma bit_of_nat_iff: +lemma bit_of_nat_iff [bit_simps]: \bit (of_nat m) n \ (2::'a) ^ n \ 0 \ bit m n\ proof (cases \(2::'a) ^ n = 0\) case True @@ -1492,15 +1494,15 @@ \even (push_bit n a) \ n \ 0 \ even a\ by (simp add: push_bit_eq_mult) auto -lemma bit_push_bit_iff: +lemma bit_push_bit_iff [bit_simps]: \bit (push_bit m a) n \ m \ n \ 2 ^ n \ 0 \ bit a (n - m)\ by (auto simp add: bit_iff_odd push_bit_eq_mult even_mult_exp_div_exp_iff) -lemma bit_drop_bit_eq: +lemma bit_drop_bit_eq [bit_simps]: \bit (drop_bit n a) = bit a \ (+) n\ by (simp add: bit_iff_odd fun_eq_iff ac_simps flip: drop_bit_eq_div) -lemma bit_take_bit_iff: +lemma bit_take_bit_iff [bit_simps]: \bit (take_bit m a) n \ n < m \ bit a n\ by (simp add: bit_iff_odd drop_bit_take_bit not_le flip: drop_bit_eq_div) @@ -1763,7 +1765,7 @@ "drop_bit n (of_nat m) = of_nat (drop_bit n m)" by (simp add: drop_bit_eq_div Parity.drop_bit_eq_div of_nat_div [of m "2 ^ n"]) -lemma bit_of_nat_iff_bit [simp]: +lemma bit_of_nat_iff_bit [bit_simps]: \bit (of_nat m) n \ bit m n\ proof - have \even (m div 2 ^ n) \ even (of_nat (m div 2 ^ n))\ @@ -1778,7 +1780,7 @@ \of_nat (drop_bit m n) = drop_bit m (of_nat n)\ by (simp add: drop_bit_eq_div semiring_bit_shifts_class.drop_bit_eq_div of_nat_div) -lemma bit_push_bit_iff_of_nat_iff: +lemma bit_push_bit_iff_of_nat_iff [bit_simps]: \bit (push_bit m (of_nat r)) n \ m \ n \ bit (of_nat r) (n - m)\ by (auto simp add: bit_push_bit_iff) @@ -1826,12 +1828,12 @@ by (simp add: bit_Suc) qed -lemma bit_minus_int_iff: +lemma bit_minus_int_iff [bit_simps]: \bit (- k) n \ \ bit (k - 1) n\ for k :: int using bit_not_int_iff' [of \k - 1\] by simp -lemma bit_nat_iff: +lemma bit_nat_iff [bit_simps]: \bit (nat k) n \ k \ 0 \ bit k n\ proof (cases \k \ 0\) case True @@ -1839,7 +1841,7 @@ ultimately have \k = int m\ by simp then show ?thesis - by (auto intro: ccontr) + by (simp add: bit_simps) next case False then show ?thesis