diff -r df5b2785abd6 -r 02fbb93d5b01 src/HOL/Library/Word.thy --- a/src/HOL/Library/Word.thy Sat Apr 19 17:39:06 2025 +0200 +++ b/src/HOL/Library/Word.thy Sun Apr 20 07:51:06 2025 +0200 @@ -1729,10 +1729,18 @@ \- 1 by transfer simp +lemma not_0_sless_minus_1 [simp]: + \\ 0 + by transfer simp + lemma minus_1_sless_eq_0 [simp]: \- 1 \s 0\ by transfer simp +lemma not_0_sless_eq_minus_1 [simp]: + \\ 0 \s - 1\ + by transfer simp + subsection \Bit-wise operations\ @@ -1750,7 +1758,7 @@ lemma bit_word_of_int_iff: \bit (word_of_int k :: 'a::len word) n \ n < LENGTH('a) \ bit k n\ - by (metis Word_eq_word_of_int bit_word.abs_eq) + by (simp add: bit_simps) lemma bit_uint_iff: \bit (uint w) n \ n < LENGTH('a) \ bit w n\ @@ -1765,13 +1773,13 @@ lemma bit_word_ucast_iff: \bit (ucast w :: 'b::len word) n \ n < LENGTH('a) \ n < LENGTH('b) \ bit w n\ for w :: \'a::len word\ - by (meson bit_imp_possible_bit bit_unsigned_iff possible_bit_word) + by (auto simp add: bit_unsigned_iff bit_imp_le_length) lemma bit_word_scast_iff: \bit (scast w :: 'b::len word) n \ n < LENGTH('b) \ (bit w n \ LENGTH('a) \ n \ bit w (LENGTH('a) - Suc 0))\ for w :: \'a::len word\ - by (metis One_nat_def bit_sint_iff bit_word_of_int_iff of_int_sint) + by (auto simp add: bit_signed_iff bit_imp_le_length min_def le_less dest: bit_imp_possible_bit) lemma bit_word_iff_drop_bit_and [code]: \bit a n \ drop_bit n a AND 1 = 1\ for a :: \'a::len word\ @@ -1863,10 +1871,7 @@ lemma bit_signed_drop_bit_iff [bit_simps]: \bit (signed_drop_bit m w) n \ bit w (if LENGTH('a) - m \ n \ n < LENGTH('a) then LENGTH('a) - 1 else m + n)\ for w :: \'a::len word\ - apply transfer - apply (simp add: bit_drop_bit_eq bit_signed_take_bit_iff not_le min_def) - by (metis add.commute add_lessD1 le_antisym less_diff_conv less_eq_decr_length_iff - nat_less_le) + by transfer (simp add: bit_drop_bit_eq bit_signed_take_bit_iff min_def le_less not_less, auto) lemma [code]: \Word.the_int (signed_drop_bit n w) = take_bit LENGTH('a) (drop_bit n (Word.the_signed_int w))\ @@ -1900,19 +1905,13 @@ lemma sint_signed_drop_bit_eq: \sint (signed_drop_bit n w) = drop_bit n (sint w)\ -proof (cases \LENGTH('a) = 0 \ n=0\) - case False - then show ?thesis - apply simp - apply (rule bit_eqI) - by (auto simp: bit_sint_iff bit_drop_bit_eq bit_signed_drop_bit_iff dest: bit_imp_le_length) -qed auto + by (rule bit_eqI; cases n) (auto simp add: bit_simps not_less) subsection \Single-bit operations\ lemma set_bit_eq_idem_iff: - \Bit_Operations.set_bit n w = w \ bit w n \ n \ LENGTH('a)\ + \set_bit n w = w \ bit w n \ n \ LENGTH('a)\ for w :: \'a::len word\ unfolding bit_eq_iff by (auto simp: bit_simps not_le)