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 |