# HG changeset patch # User haftmann # Date 1591299532 0 # Node ID 2c6a5c709f2271abd05ed1826b622d7544ae1e9a # Parent a238074c5a9d8c4468196025e716c6de2e372597 more theorems diff -r a238074c5a9d -r 2c6a5c709f22 src/HOL/ex/Bit_Operations.thy --- a/src/HOL/ex/Bit_Operations.thy Thu Jun 04 19:38:50 2020 +0000 +++ b/src/HOL/ex/Bit_Operations.thy Thu Jun 04 19:38:52 2020 +0000 @@ -230,6 +230,34 @@ apply (use local.exp_eq_0_imp_not_bit in blast) done +lemma take_bit_minus_one_eq_mask: + \take_bit n (- 1) = mask n\ + by (simp add: bit_eq_iff bit_mask_iff bit_take_bit_iff conj_commute) + +lemma push_bit_minus_one_eq_not_mask: + \push_bit n (- 1) = NOT (mask n)\ +proof (rule bit_eqI) + fix m + assume \2 ^ m \ 0\ + show \bit (push_bit n (- 1)) m \ bit (NOT (mask n)) m\ + proof (cases \n \ m\) + case True + moreover define q where \q = m - n\ + ultimately have \m = n + q\ \m - n = q\ + by simp_all + with \2 ^ m \ 0\ have \2 ^ n * 2 ^ q \ 0\ + by (simp add: power_add) + then have \2 ^ q \ 0\ + using mult_not_zero by blast + with \m - n = q\ show ?thesis + by (auto simp add: bit_not_iff bit_mask_iff bit_push_bit_iff not_less) + next + case False + then show ?thesis + by (simp add: bit_not_iff bit_mask_iff bit_push_bit_iff not_le) + qed +qed + definition set_bit :: \nat \ 'a \ 'a\ where \set_bit n a = a OR 2 ^ n\