equal
deleted
inserted
replaced
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> |