src/HOL/Library/Bit_Operations.thy
changeset 73535 0f33c7031ec9
parent 72830 ec0d3a62bb3b
child 73682 78044b2f001c
equal deleted inserted replaced
73534:e7fb17bca374 73535:0f33c7031ec9
   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>