diff -r c7cb1bf6efa0 -r 8205977e9e2c src/HOL/Bit_Operations.thy --- a/src/HOL/Bit_Operations.thy Sat Jan 13 19:50:12 2024 +0000 +++ b/src/HOL/Bit_Operations.thy Sat Jan 13 19:50:15 2024 +0000 @@ -15,8 +15,8 @@ \ (\a b. P a \ (of_bool b + 2 * a) div 2 = a \ P (of_bool b + 2 * a)) \ P a\ assumes bits_div_0 [simp]: \0 div a = 0\ + and bits_div_by_0 [simp]: \a div 0 = 0\ and bits_div_by_1 [simp]: \a div 1 = a\ - and bits_mod_div_trivial [simp]: \a mod b div b = 0\ and even_succ_div_2 [simp]: \even a \ (1 + a) div 2 = a div 2\ and even_mask_div_iff: \even ((2 ^ m - 1) div 2 ^ n) \ 2 ^ n = 0 \ m \ n\ and exp_div_exp_eq: \2 ^ m div 2 ^ n = of_bool (2 ^ m \ 0 \ m \ n) * 2 ^ (m - n)\ @@ -35,10 +35,6 @@ differently wrt. code generation. \ -lemma bits_div_by_0 [simp]: - \a div 0 = 0\ - by (metis add_cancel_right_right bits_mod_div_trivial mod_mult_div_eq mult_not_zero) - lemma bits_1_div_2 [simp]: \1 div 2 = 0\ using even_succ_div_2 [of 0] by simp @@ -83,6 +79,20 @@ \0 mod a = 0\ using div_mult_mod_eq [of 0 a] by simp +lemma mod_exp_div_exp_eq_0 [simp]: + \a mod 2 ^ n div 2 ^ n = 0\ +proof (induction n arbitrary: a) + case 0 + then show ?case + by simp +next + case (Suc n) + then have \a div 2 ^ 1 mod 2 ^ n div 2 ^ n = 0\ . + then show ?case + using div_exp_eq [of _ 1 n] div_exp_mod_exp_eq [of a 1 n] + by simp +qed + lemma bit_0: \bit a 0 \ odd a\ by (simp add: bit_iff_odd)