src/HOL/Library/Z2.thy
changeset 71965 d45f5d4c41bd
parent 71957 3e162c63371a
child 71988 ace45a11a45e
equal deleted inserted replaced
71964:235173749448 71965:d45f5d4c41bd
   192 instance
   192 instance
   193   by standard simp
   193   by standard simp
   194 
   194 
   195 end
   195 end
   196 
   196 
   197 instance bit :: semiring_bits
   197 instantiation bit :: semiring_bits
       
   198 begin
       
   199 
       
   200 definition bit_bit :: \<open>bit \<Rightarrow> nat \<Rightarrow> bool\<close>
       
   201   where [simp]: \<open>bit_bit b n \<longleftrightarrow> b = 1 \<and> n = 0\<close>
       
   202 
       
   203 instance
   198   apply standard
   204   apply standard
   199                 apply (auto simp add: power_0_left power_add)
   205                 apply (auto simp add: power_0_left power_add set_iff)
   200   apply (metis bit_not_1_iff of_bool_eq(2))
   206    apply (metis bit_not_1_iff of_bool_eq(2))
   201   done
   207   done
   202 
   208 
   203 lemma bit_bit_iff [simp]:
   209 end
   204   \<open>bit b n \<longleftrightarrow> b = 1 \<and> n = 0\<close> for b :: bit
       
   205   by (cases b; cases n) (simp_all add: bit_Suc)
       
   206 
   210 
   207 instantiation bit :: semiring_bit_shifts
   211 instantiation bit :: semiring_bit_shifts
   208 begin
   212 begin
   209 
   213 
   210 definition push_bit_bit :: \<open>nat \<Rightarrow> bit \<Rightarrow> bit\<close>
   214 definition push_bit_bit :: \<open>nat \<Rightarrow> bit \<Rightarrow> bit\<close>
   211   where \<open>push_bit n b = (if n = 0 then b else 0)\<close> for b :: bit
   215   where \<open>push_bit n b = (if n = 0 then b else 0)\<close> for b :: bit
   212 
   216 
   213 definition drop_bit_bit :: \<open>nat \<Rightarrow> bit \<Rightarrow> bit\<close>
   217 definition drop_bit_bit :: \<open>nat \<Rightarrow> bit \<Rightarrow> bit\<close>
   214   where \<open>drop_bit n b = (if n = 0 then b else 0)\<close> for b :: bit
   218   where \<open>drop_bit n b = (if n = 0 then b else 0)\<close> for b :: bit
   215 
   219 
   216 instance
   220 definition take_bit_bit :: \<open>nat \<Rightarrow> bit \<Rightarrow> bit\<close>
   217   by standard (simp_all add: push_bit_bit_def drop_bit_bit_def)
   221   where \<open>take_bit n b = (if n = 0 then 0 else b)\<close> for b :: bit
       
   222 
       
   223 instance
       
   224   by standard (simp_all add: push_bit_bit_def drop_bit_bit_def take_bit_bit_def)
   218 
   225 
   219 end
   226 end
   220 
   227 
   221 instantiation bit :: ring_bit_operations
   228 instantiation bit :: ring_bit_operations
   222 begin
   229 begin