src/HOL/ex/Word.thy
changeset 71412 96d126844adc
parent 71409 0bb0cb558bf9
child 71413 65ffe9e910d4
equal deleted inserted replaced
71411:839bf7d74fae 71412:96d126844adc
   544   \<open>even (a * 2 ^ m div 2 ^ n) \<longleftrightarrow> \<not> (
   544   \<open>even (a * 2 ^ m div 2 ^ n) \<longleftrightarrow> \<not> (
   545     m \<le> n \<and>
   545     m \<le> n \<and>
   546     n < LENGTH('a) \<and> odd (a div 2 ^ (n - m)))\<close> for a :: \<open>'a::len word\<close>
   546     n < LENGTH('a) \<and> odd (a div 2 ^ (n - m)))\<close> for a :: \<open>'a::len word\<close>
   547   by transfer
   547   by transfer
   548     (auto simp flip: drop_bit_eq_div simp add: even_drop_bit_iff_not_bit bit_take_bit_iff,
   548     (auto simp flip: drop_bit_eq_div simp add: even_drop_bit_iff_not_bit bit_take_bit_iff,
   549       simp_all flip: push_bit_eq_mult add: bit_push_bit_eq_int)
   549       simp_all flip: push_bit_eq_mult add: bit_push_bit_iff_int)
   550 
   550 
   551 (*lemma even_range_div_iff_word:
   551 (*lemma even_mask_div_iff_word:
   552   \<open>even ((2 ^ m - 1) div (2::'a word) ^ n) \<longleftrightarrow> 2 ^ n = (0::'a::len word) \<or> m \<le> n\<close>
   552   \<open>even ((2 ^ m - 1) div (2::'a word) ^ n) \<longleftrightarrow> 2 ^ n = (0::'a::len word) \<or> m \<le> n\<close>
   553   by transfer (auto simp add: take_bit_of_range even_range_div_iff)*)
   553   by transfer (auto simp add: take_bit_of_mask even_mask_div_iff)*)
   554 
   554 
   555 instance word :: (len) semiring_bits
   555 instance word :: (len) semiring_bits
   556 proof
   556 proof
   557   show \<open>P a\<close> if stable: \<open>\<And>a. a div 2 = a \<Longrightarrow> P a\<close>
   557   show \<open>P a\<close> if stable: \<open>\<And>a. a div 2 = a \<Longrightarrow> P a\<close>
   558     and rec: \<open>\<And>a b. P a \<Longrightarrow> (of_bool b + 2 * a) div 2 = a \<Longrightarrow> P (of_bool b + 2 * a)\<close>
   558     and rec: \<open>\<And>a b. P a \<Longrightarrow> (of_bool b + 2 * a) div 2 = a \<Longrightarrow> P (of_bool b + 2 * a)\<close>