# HG changeset patch # User haftmann # Date 1706560623 0 # Node ID 8ef205d9fd224bfea0bde05df24e3caa1a7d4841 # Parent e15fbb37a4058012c8b036620599b631bbd85850 strengthened class parity diff -r e15fbb37a405 -r 8ef205d9fd22 src/HOL/Bit_Operations.thy --- a/src/HOL/Bit_Operations.thy Tue Jan 30 22:43:10 2024 +0100 +++ b/src/HOL/Bit_Operations.thy Mon Jan 29 20:37:03 2024 +0000 @@ -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 e15fbb37a405 -r 8ef205d9fd22 src/HOL/Library/Word.thy --- a/src/HOL/Library/Word.thy Tue Jan 30 22:43:10 2024 +0100 +++ b/src/HOL/Library/Word.thy Mon Jan 29 20:37:03 2024 +0000 @@ -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 e15fbb37a405 -r 8ef205d9fd22 src/HOL/Parity.thy --- a/src/HOL/Parity.thy Tue Jan 30 22:43:10 2024 +0100 +++ b/src/HOL/Parity.thy Mon Jan 29 20:37:03 2024 +0000 @@ -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]: