diff -r 00fce84413db -r c7bc3e70a8c7 src/HOL/Library/Word.thy --- a/src/HOL/Library/Word.thy Sun Nov 15 13:08:13 2020 +0000 +++ b/src/HOL/Library/Word.thy Sun Nov 15 10:13:03 2020 +0000 @@ -1065,7 +1065,7 @@ context semiring_bits begin -lemma bit_unsigned_iff: +lemma bit_unsigned_iff [bit_simps]: \bit (unsigned w) n \ 2 ^ n \ 0 \ bit w n\ for w :: \'b::len word\ by (transfer fixing: bit) (simp add: bit_of_nat_iff bit_nat_iff bit_take_bit_iff) @@ -1175,7 +1175,7 @@ context ring_bit_operations begin -lemma bit_signed_iff: +lemma bit_signed_iff [bit_simps]: \bit (signed w) n \ 2 ^ n \ 0 \ bit w (min (LENGTH('b) - Suc 0) n)\ for w :: \'b::len word\ by (transfer fixing: bit) @@ -1779,10 +1779,10 @@ \shiftl1 = (*) 2\ by (rule ext, transfer) simp -lemma bit_shiftl1_iff: +lemma bit_shiftl1_iff [bit_simps]: \bit (shiftl1 w) n \ 0 < n \ n < LENGTH('a) \ bit w (n - 1)\ for w :: \'a::len word\ - by (simp add: shiftl1_eq_mult_2 bit_double_iff exp_eq_zero_iff not_le) (simp add: ac_simps) + by (simp add: shiftl1_eq_mult_2 bit_double_iff not_le) (simp add: ac_simps) lift_definition shiftr1 :: \'a::len word \ 'a word\ \ \shift right as unsigned or as signed, ie logical or arithmetic\ @@ -1793,7 +1793,7 @@ \shiftr1 w = w div 2\ by transfer simp -lemma bit_shiftr1_iff: +lemma bit_shiftr1_iff [bit_simps]: \bit (shiftr1 w) n \ bit w (Suc n)\ by transfer (auto simp flip: bit_Suc simp add: bit_take_bit_iff) @@ -1820,7 +1820,7 @@ \setBit w n = set_bit n w\ by transfer simp -lemma bit_setBit_iff: +lemma bit_setBit_iff [bit_simps]: \bit (setBit w m) n \ (m = n \ n < LENGTH('a) \ bit w n)\ for w :: \'a::len word\ by transfer (auto simp add: bit_set_bit_iff) @@ -1833,7 +1833,7 @@ \clearBit w n = unset_bit n w\ by transfer simp -lemma bit_clearBit_iff: +lemma bit_clearBit_iff [bit_simps]: \bit (clearBit w m) n \ m \ n \ bit w n\ for w :: \'a::len word\ by transfer (auto simp add: bit_unset_bit_iff) @@ -1913,7 +1913,7 @@ using signed_take_bit_decr_length_iff by (simp add: take_bit_drop_bit) force -lemma bit_signed_drop_bit_iff: +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 @@ -2025,7 +2025,7 @@ by simp qed -lemma bit_word_rotr_iff: +lemma bit_word_rotr_iff [bit_simps]: \bit (word_rotr m w) n \ n < LENGTH('a) \ bit w ((n + m) mod LENGTH('a))\ for w :: \'a::len word\ @@ -2057,13 +2057,13 @@ by simp qed -lemma bit_word_rotl_iff: +lemma bit_word_rotl_iff [bit_simps]: \bit (word_rotl m w) n \ n < LENGTH('a) \ bit w ((n + (LENGTH('a) - m mod LENGTH('a))) mod LENGTH('a))\ for w :: \'a::len word\ by (simp add: word_rotl_eq_word_rotr bit_word_rotr_iff) -lemma bit_word_roti_iff: +lemma bit_word_roti_iff [bit_simps]: \bit (word_roti k w) n \ n < LENGTH('a) \ bit w (nat ((int n + k) mod int LENGTH('a)))\ for w :: \'a::len word\ @@ -2130,7 +2130,7 @@ for a :: \'a::len word\ and b :: \'b::len word\ by transfer (simp add: concat_bit_take_bit_eq) -lemma bit_word_cat_iff: +lemma bit_word_cat_iff [bit_simps]: \bit (word_cat v w :: 'c::len word) n \ n < LENGTH('c) \ (if n < LENGTH('b) then bit w n else bit v (n - LENGTH('b)))\ for v :: \'a::len word\ and w :: \'b::len word\ by transfer (simp add: bit_concat_bit_iff bit_take_bit_iff) @@ -3623,7 +3623,7 @@ lemmas word_and_le1 = xtrans(3) [OF word_ao_absorbs (4) [symmetric] le_word_or2] lemmas word_and_le2 = xtrans(3) [OF word_ao_absorbs (8) [symmetric] le_word_or2] -lemma bit_horner_sum_bit_word_iff: +lemma bit_horner_sum_bit_word_iff [bit_simps]: \bit (horner_sum of_bool (2 :: 'a::len word) bs) n \ n < min LENGTH('a) (length bs) \ bs ! n\ by transfer (simp add: bit_horner_sum_bit_iff) @@ -3631,7 +3631,7 @@ definition word_reverse :: \'a::len word \ 'a word\ where \word_reverse w = horner_sum of_bool 2 (rev (map (bit w) [0.. -lemma bit_word_reverse_iff: +lemma bit_word_reverse_iff [bit_simps]: \bit (word_reverse w) n \ n < LENGTH('a) \ bit w (LENGTH('a) - Suc n)\ for w :: \'a::len word\ by (cases \n < LENGTH('a)\) @@ -3698,7 +3698,7 @@ apply (simp add: drop_bit_take_bit min_def) done -lemma bit_sshiftr1_iff: +lemma bit_sshiftr1_iff [bit_simps]: \bit (sshiftr1 w) n \ bit w (if n = LENGTH('a) - 1 then LENGTH('a) - 1 else Suc n)\ for w :: \'a::len word\ apply transfer @@ -3714,7 +3714,7 @@ using sint_signed_drop_bit_eq [of 1 w] by (simp add: drop_bit_Suc sshiftr1_eq_signed_drop_bit_Suc_0) -lemma bit_bshiftr1_iff: +lemma bit_bshiftr1_iff [bit_simps]: \bit (bshiftr1 b w) n \ b \ n = LENGTH('a) - 1 \ bit w (Suc n)\ for w :: \'a::len word\ apply transfer @@ -3813,7 +3813,7 @@ context begin -qualified lemma bit_mask_iff: +qualified lemma bit_mask_iff [bit_simps]: \bit (mask m :: 'a::len word) n \ n < min LENGTH('a) m\ by (simp add: bit_mask_iff exp_eq_zero_iff not_le) @@ -3945,7 +3945,7 @@ then ucast (drop_bit (LENGTH('a) - n) w) else push_bit (n - LENGTH('a)) (ucast w))\ -lemma bit_slice1_iff: +lemma bit_slice1_iff [bit_simps]: \bit (slice1 m w :: 'b::len word) n \ m - LENGTH('a) \ n \ n < min LENGTH('b) m \ bit w (n + (LENGTH('a) - m) - (m - LENGTH('a)))\ for w :: \'a::len word\ @@ -3955,7 +3955,7 @@ definition slice :: \nat \ 'a::len word \ 'b::len word\ where \slice n = slice1 (LENGTH('a) - n)\ -lemma bit_slice_iff: +lemma bit_slice_iff [bit_simps]: \bit (slice m w :: 'b::len word) n \ n < min LENGTH('b) (LENGTH('a) - m) \ bit w (n + LENGTH('a) - (LENGTH('a) - m))\ for w :: \'a::len word\ by (simp add: slice_def word_size bit_slice1_iff) @@ -4008,7 +4008,7 @@ definition revcast :: \'a::len word \ 'b::len word\ where \revcast = slice1 LENGTH('b)\ -lemma bit_revcast_iff: +lemma bit_revcast_iff [bit_simps]: \bit (revcast w :: 'b::len word) n \ LENGTH('b) - LENGTH('a) \ n \ n < LENGTH('b) \ bit w (n + (LENGTH('a) - LENGTH('b)) - (LENGTH('b) - LENGTH('a)))\ for w :: \'a::len word\