# HG changeset patch # User wenzelm # Date 1706705096 -3600 # Node ID 9f031b8bc880f1f0b90c516860f9979ebcced502 # Parent 8ef205d9fd224bfea0bde05df24e3caa1a7d4841# Parent 0631dfc0db078697a6a0fcbfbb446efeb09a833d merged diff -r 0631dfc0db07 -r 9f031b8bc880 src/HOL/Bit_Operations.thy --- a/src/HOL/Bit_Operations.thy Wed Jan 31 12:43:06 2024 +0100 +++ b/src/HOL/Bit_Operations.thy Wed Jan 31 13:44:56 2024 +0100 @@ -14,8 +14,7 @@ \(\a. a div 2 = a \ P a) \ (\a b. P a \ (of_bool b + 2 * a) div 2 = a \ P (of_bool b + 2 * a)) \ P a\ - assumes even_half_succ_eq [simp]: \even a \ (1 + a) div 2 = a div 2\ - and half_div_exp_eq: \a div 2 div 2 ^ n = a div 2 ^ Suc n\ + assumes half_div_exp_eq: \a div 2 div 2 ^ n = a div 2 ^ Suc n\ and even_double_div_exp_iff: \2 ^ Suc n \ 0 \ even (2 * a div 2 ^ Suc n) \ even (a div 2 ^ n)\ and even_decr_exp_div_exp_iff: \2 ^ n \ 0 \ even ((2 ^ m - 1) div 2 ^ n) \ m \ n\ and even_mod_exp_diff_exp_iff: \even (a mod 2 ^ m div 2 ^ n) \ m \ n \ even (a div 2 ^ n)\ diff -r 0631dfc0db07 -r 9f031b8bc880 src/HOL/Library/Word.thy --- a/src/HOL/Library/Word.thy Wed Jan 31 12:43:06 2024 +0100 +++ b/src/HOL/Library/Word.thy Wed Jan 31 13:44:56 2024 +0100 @@ -668,7 +668,8 @@ end instance word :: (len) semiring_parity - by (standard; transfer) (simp_all add: mod_2_eq_odd) + by (standard; transfer) + (auto simp add: mod_2_eq_odd take_bit_Suc elim: evenE dest: le_Suc_ex) lemma word_bit_induct [case_names zero even odd]: \P a\ if word_zero: \P 0\ @@ -837,11 +838,6 @@ show \0 div a = 0\ for a :: \'a word\ by transfer simp - show \(1 + a) div 2 = a div 2\ - if \even a\ - for a :: \'a word\ - using that by transfer - (auto dest: le_Suc_ex simp add: take_bit_Suc elim!: evenE) show \a div 2 div 2 ^ n = a div 2 ^ Suc n\ for a :: \'a word\ and m n :: nat apply transfer diff -r 0631dfc0db07 -r 9f031b8bc880 src/HOL/Parity.thy --- a/src/HOL/Parity.thy Wed Jan 31 12:43:06 2024 +0100 +++ b/src/HOL/Parity.thy Wed Jan 31 13:44:56 2024 +0100 @@ -14,6 +14,7 @@ class semiring_parity = comm_semiring_1 + semiring_modulo + assumes mod_2_eq_odd: \a mod 2 = of_bool (\ 2 dvd a)\ and odd_one [simp]: \\ 2 dvd 1\ + and even_half_succ_eq [simp]: \2 dvd a \ (1 + a) div 2 = a div 2\ begin abbreviation even :: "'a \ bool" @@ -32,7 +33,7 @@ end instance nat :: semiring_parity - by standard (simp_all add: dvd_eq_mod_eq_0) + by standard (auto simp add: dvd_eq_mod_eq_0) instance int :: ring_parity by standard (auto simp add: dvd_eq_mod_eq_0) @@ -855,6 +856,8 @@ then show False by simp qed + show \(1 + a) div 2 = a div 2\ if \2 dvd a\ for a + using that by auto qed lemma even_succ_div_two [simp]: