# HG changeset patch # User haftmann # Date 1710404688 0 # Node ID 7ea70796acaa317b706c4d93751320bdb6f6dedc # Parent c793de82db348f841ac074af0323ab48a7cb8925 avoid [no_atp] declations shadowing propositions from sledgehammer diff -r c793de82db34 -r 7ea70796acaa src/HOL/Bit_Operations.thy --- a/src/HOL/Bit_Operations.thy Thu Mar 14 10:01:51 2024 +0100 +++ b/src/HOL/Bit_Operations.thy Thu Mar 14 08:24:48 2024 +0000 @@ -3780,21 +3780,21 @@ context semiring_bits begin -lemma exp_div_exp_eq [no_atp]: +lemma exp_div_exp_eq: \2 ^ m div 2 ^ n = of_bool (2 ^ m \ 0 \ m \ n) * 2 ^ (m - n)\ apply (rule bit_eqI) using bit_exp_iff div_exp_eq apply (auto simp add: bit_iff_odd possible_bit_def) done -lemma bits_1_div_2 [no_atp]: +lemma bits_1_div_2: \1 div 2 = 0\ by (fact half_1) -lemma bits_1_div_exp [no_atp]: +lemma bits_1_div_exp: \1 div 2 ^ n = of_bool (n = 0)\ using div_exp_eq [of 1 1] by (cases n) simp_all -lemma exp_add_not_zero_imp [no_atp]: +lemma exp_add_not_zero_imp: \2 ^ m \ 0\ and \2 ^ n \ 0\ if \2 ^ (m + n) \ 0\ proof - have \\ (2 ^ m = 0 \ 2 ^ n = 0)\ @@ -3809,8 +3809,8 @@ qed lemma - exp_add_not_zero_imp_left [no_atp]: \2 ^ m \ 0\ - and exp_add_not_zero_imp_right [no_atp]: \2 ^ n \ 0\ + exp_add_not_zero_imp_left: \2 ^ m \ 0\ + and exp_add_not_zero_imp_right: \2 ^ n \ 0\ if \2 ^ (m + n) \ 0\ proof - have \\ (2 ^ m = 0 \ 2 ^ n = 0)\ @@ -3824,7 +3824,7 @@ by simp_all qed -lemma exp_not_zero_imp_exp_diff_not_zero [no_atp]: +lemma exp_not_zero_imp_exp_diff_not_zero: \2 ^ (n - m) \ 0\ if \2 ^ n \ 0\ proof (cases \m \ n\) case True @@ -3839,11 +3839,11 @@ by simp qed -lemma exp_eq_0_imp_not_bit [no_atp]: +lemma exp_eq_0_imp_not_bit: \\ bit a n\ if \2 ^ n = 0\ using that by (simp add: bit_iff_odd) -lemma bit_disjunctive_add_iff [no_atp]: +lemma bit_disjunctive_add_iff: \bit (a + b) n \ bit a n \ bit b n\ if \\n. \ bit a n \ \ bit b n\ proof (cases \possible_bit TYPE('a) n\) @@ -3882,43 +3882,43 @@ context semiring_bit_operations begin -lemma even_mask_div_iff [no_atp]: +lemma even_mask_div_iff: \even ((2 ^ m - 1) div 2 ^ n) \ 2 ^ n = 0 \ m \ n\ using bit_mask_iff [of m n] by (auto simp add: mask_eq_exp_minus_1 bit_iff_odd possible_bit_def) -lemma mod_exp_eq [no_atp]: +lemma mod_exp_eq: \a mod 2 ^ m mod 2 ^ n = a mod 2 ^ min m n\ by (simp flip: take_bit_eq_mod add: ac_simps) -lemma mult_exp_mod_exp_eq [no_atp]: +lemma mult_exp_mod_exp_eq: \m \ n \ (a * 2 ^ m) mod (2 ^ n) = (a mod 2 ^ (n - m)) * 2 ^ m\ by (simp flip: push_bit_eq_mult take_bit_eq_mod add: push_bit_take_bit) -lemma div_exp_mod_exp_eq [no_atp]: +lemma div_exp_mod_exp_eq: \a div 2 ^ n mod 2 ^ m = a mod (2 ^ (n + m)) div 2 ^ n\ by (simp flip: drop_bit_eq_div take_bit_eq_mod add: drop_bit_take_bit) -lemma even_mult_exp_div_exp_iff [no_atp]: +lemma even_mult_exp_div_exp_iff: \even (a * 2 ^ m div 2 ^ n) \ m > n \ 2 ^ n = 0 \ (m \ n \ even (a div 2 ^ (n - m)))\ by (simp flip: push_bit_eq_mult drop_bit_eq_div add: even_drop_bit_iff_not_bit bit_simps possible_bit_def) auto -lemma mod_exp_div_exp_eq_0 [no_atp]: +lemma mod_exp_div_exp_eq_0: \a mod 2 ^ n div 2 ^ n = 0\ by (simp flip: take_bit_eq_mod drop_bit_eq_div add: drop_bit_take_bit) -lemmas bits_one_mod_two_eq_one [no_atp] = one_mod_two_eq_one - -lemmas set_bit_def [no_atp] = set_bit_eq_or - -lemmas unset_bit_def [no_atp] = unset_bit_eq_and_not - -lemmas flip_bit_def [no_atp] = flip_bit_eq_xor - -lemma disjunctive_add [no_atp]: +lemmas bits_one_mod_two_eq_one = one_mod_two_eq_one + +lemmas set_bit_def = set_bit_eq_or + +lemmas unset_bit_def = unset_bit_eq_and_not + +lemmas flip_bit_def = flip_bit_eq_xor + +lemma disjunctive_add: \a + b = a OR b\ if \\n. \ bit a n \ \ bit b n\ by (rule disjunctive_add_eq_or) (use that in \simp add: bit_eq_iff bit_simps\) -lemma even_mod_exp_div_exp_iff [no_atp]: +lemma even_mod_exp_div_exp_iff: \even (a mod 2 ^ m div 2 ^ n) \ m \ n \ even (a div 2 ^ n)\ by (auto simp add: even_drop_bit_iff_not_bit bit_simps simp flip: drop_bit_eq_div take_bit_eq_mod) @@ -3927,7 +3927,7 @@ context ring_bit_operations begin -lemma disjunctive_diff [no_atp]: +lemma disjunctive_diff: \a - b = a AND NOT b\ if \\n. bit b n \ bit a n\ proof - have \NOT a + b = NOT a OR b\ @@ -3940,31 +3940,31 @@ end -lemma and_nat_rec [no_atp]: +lemma and_nat_rec: \m AND n = of_bool (odd m \ odd n) + 2 * ((m div 2) AND (n div 2))\ for m n :: nat by (fact and_rec) -lemma or_nat_rec [no_atp]: +lemma or_nat_rec: \m OR n = of_bool (odd m \ odd n) + 2 * ((m div 2) OR (n div 2))\ for m n :: nat by (fact or_rec) -lemma xor_nat_rec [no_atp]: +lemma xor_nat_rec: \m XOR n = of_bool (odd m \ odd n) + 2 * ((m div 2) XOR (n div 2))\ for m n :: nat by (fact xor_rec) -lemma bit_push_bit_iff_nat [no_atp]: +lemma bit_push_bit_iff_nat: \bit (push_bit m q) n \ m \ n \ bit q (n - m)\ for q :: nat by (fact bit_push_bit_iff') -lemma mask_half_int [no_atp]: +lemma mask_half_int: \mask n div 2 = (mask (n - 1) :: int)\ by (fact mask_half) -lemma not_int_rec [no_atp]: +lemma not_int_rec: \NOT k = of_bool (even k) + 2 * NOT (k div 2)\ for k :: int by (fact not_rec) -lemma even_not_iff_int [no_atp]: +lemma even_not_iff_int: \even (NOT k) \ odd k\ for k :: int by (fact even_not_iff) @@ -3972,27 +3972,27 @@ \bit (- k - 1) n \ \ bit k n\ for k :: int by (simp flip: not_eq_complement add: bit_simps) -lemmas and_int_rec [no_atp] = and_int.rec - -lemma even_and_iff_int [no_atp]: +lemmas and_int_rec = and_int.rec + +lemma even_and_iff_int: \even (k AND l) \ even k \ even l\ for k l :: int by (fact even_and_iff) -lemmas bit_and_int_iff [no_atp] = and_int.bit_iff - -lemmas or_int_rec [no_atp] = or_int.rec - -lemmas bit_or_int_iff [no_atp] = or_int.bit_iff - -lemmas xor_int_rec [no_atp] = xor_int.rec - -lemmas bit_xor_int_iff [no_atp] = xor_int.bit_iff - -lemma drop_bit_push_bit_int [no_atp]: +lemmas bit_and_int_iff = and_int.bit_iff + +lemmas or_int_rec = or_int.rec + +lemmas bit_or_int_iff = or_int.bit_iff + +lemmas xor_int_rec = xor_int.rec + +lemmas bit_xor_int_iff = xor_int.bit_iff + +lemma drop_bit_push_bit_int: \drop_bit m (push_bit n k) = drop_bit (m - n) (push_bit (n - m) k)\ for k :: int by (fact drop_bit_push_bit) -lemma bit_push_bit_iff_int [no_atp] : +lemma bit_push_bit_iff_int: \bit (push_bit m k) n \ m \ n \ bit k (n - m)\ for k :: int by (fact bit_push_bit_iff')