# HG changeset patch # User haftmann # Date 1587017371 -7200 # Node ID 816e52bbfa605581128b6232e12adba98cb4f6a8 # Parent 2e3fa4e7cd73f87c20035ab69c08d895fee94720 more theorems diff -r 2e3fa4e7cd73 -r 816e52bbfa60 src/HOL/Library/Type_Length.thy --- a/src/HOL/Library/Type_Length.thy Thu Apr 16 08:09:30 2020 +0200 +++ b/src/HOL/Library/Type_Length.thy Thu Apr 16 08:09:31 2020 +0200 @@ -107,4 +107,14 @@ \\ 2 \ LENGTH('a::len) \ LENGTH('a) = 1\ by (auto simp add: not_le dest: less_2_cases) +context linordered_idom +begin + +lemma two_less_eq_exp_length [simp]: + \2 \ 2 ^ LENGTH('b::len)\ + using mult_left_mono [of 1 \2 ^ (LENGTH('b::len) - 1)\ 2] + by (cases \LENGTH('b::len)\) simp_all + end + +end diff -r 2e3fa4e7cd73 -r 816e52bbfa60 src/HOL/Parity.thy --- a/src/HOL/Parity.thy Thu Apr 16 08:09:30 2020 +0200 +++ b/src/HOL/Parity.thy Thu Apr 16 08:09:31 2020 +0200 @@ -1218,6 +1218,10 @@ \take_bit n a = (if n = 0 then 0 else take_bit (n - 1) (a div 2) * 2 + of_bool (odd a))\ by (cases n) (simp_all add: take_bit_Suc) +lemma take_bit_Suc_0 [simp]: + \take_bit (Suc 0) a = a mod 2\ + by (simp add: take_bit_eq_mod) + lemma take_bit_of_0 [simp]: "take_bit n 0 = 0" by (simp add: take_bit_eq_mod) @@ -1536,6 +1540,24 @@ for k :: int by (simp add: take_bit_eq_mod) +lemma take_bit_minus_small_eq: + \take_bit n (- k) = 2 ^ n - k\ if \0 < k\ \k \ 2 ^ n\ for k :: int +proof - + define m where \m = nat k\ + with that have \k = int m\ and \0 < m\ and \m \ 2 ^ n\ + by simp_all + have \(2 ^ n - m) mod 2 ^ n = 2 ^ n - m\ + using \0 < m\ by simp + then have \int ((2 ^ n - m) mod 2 ^ n) = int (2 ^ n - m)\ + by simp + then have \(2 ^ n - int m) mod 2 ^ n = 2 ^ n - int m\ + using \m \ 2 ^ n\ by (simp only: of_nat_mod of_nat_diff) simp + with \k = int m\ have \(2 ^ n - k) mod 2 ^ n = 2 ^ n - k\ + by simp + then show ?thesis + by (simp add: take_bit_eq_mod) +qed + 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 (cases \m \ n\) (auto simp add: mult.left_commute [of _ \2 ^ n\] mult.commute [of _ \2 ^ n\] mult.assoc