equal
deleted
inserted
replaced
638 lemma or_int_rec: |
638 lemma or_int_rec: |
639 \<open>k OR l = of_bool (odd k \<or> odd l) + 2 * ((k div 2) OR (l div 2))\<close> |
639 \<open>k OR l = of_bool (odd k \<or> odd l) + 2 * ((k div 2) OR (l div 2))\<close> |
640 for k l :: int |
640 for k l :: int |
641 using and_int_rec [of \<open>NOT k\<close> \<open>NOT l\<close>] |
641 using and_int_rec [of \<open>NOT k\<close> \<open>NOT l\<close>] |
642 by (simp add: or_int_def even_not_iff_int not_int_div_2) |
642 by (simp add: or_int_def even_not_iff_int not_int_div_2) |
643 (simp add: not_int_def) |
643 (simp_all add: not_int_def) |
644 |
644 |
645 lemma bit_or_int_iff: |
645 lemma bit_or_int_iff: |
646 \<open>bit (k OR l) n \<longleftrightarrow> bit k n \<or> bit l n\<close> for k l :: int |
646 \<open>bit (k OR l) n \<longleftrightarrow> bit k n \<or> bit l n\<close> for k l :: int |
647 by (simp add: or_int_def bit_not_int_iff bit_and_int_iff) |
647 by (simp add: or_int_def bit_not_int_iff bit_and_int_iff) |
648 |
648 |
854 |
854 |
855 lemma AND_upper1 [simp]: \<^marker>\<open>contributor \<open>Stefan Berghofer\<close>\<close> |
855 lemma AND_upper1 [simp]: \<^marker>\<open>contributor \<open>Stefan Berghofer\<close>\<close> |
856 fixes x y :: int |
856 fixes x y :: int |
857 assumes "0 \<le> x" |
857 assumes "0 \<le> x" |
858 shows "x AND y \<le> x" |
858 shows "x AND y \<le> x" |
859 using assms by (induction x arbitrary: y rule: int_bit_induct) |
859 using assms proof (induction x arbitrary: y rule: int_bit_induct) |
860 (simp_all add: and_int_rec [of \<open>_ * 2\<close>] and_int_rec [of \<open>1 + _ * 2\<close>] add_increasing) |
860 case (odd k) |
|
861 then have \<open>k AND y div 2 \<le> k\<close> |
|
862 by simp |
|
863 then show ?case |
|
864 by (simp add: and_int_rec [of \<open>1 + _ * 2\<close>]) |
|
865 qed (simp_all add: and_int_rec [of \<open>_ * 2\<close>]) |
861 |
866 |
862 lemmas AND_upper1' [simp] = order_trans [OF AND_upper1] \<^marker>\<open>contributor \<open>Stefan Berghofer\<close>\<close> |
867 lemmas AND_upper1' [simp] = order_trans [OF AND_upper1] \<^marker>\<open>contributor \<open>Stefan Berghofer\<close>\<close> |
863 lemmas AND_upper1'' [simp] = order_le_less_trans [OF AND_upper1] \<^marker>\<open>contributor \<open>Stefan Berghofer\<close>\<close> |
868 lemmas AND_upper1'' [simp] = order_le_less_trans [OF AND_upper1] \<^marker>\<open>contributor \<open>Stefan Berghofer\<close>\<close> |
864 |
869 |
865 lemma AND_upper2 [simp]: \<^marker>\<open>contributor \<open>Stefan Berghofer\<close>\<close> |
870 lemma AND_upper2 [simp]: \<^marker>\<open>contributor \<open>Stefan Berghofer\<close>\<close> |