equal
deleted
inserted
replaced
230 begin |
230 begin |
231 subclass ring_no_zero_divisors .. |
231 subclass ring_no_zero_divisors .. |
232 thm mult_eq_0_iff |
232 thm mult_eq_0_iff |
233 end |
233 end |
234 |
234 |
235 instantiation fract :: (idom) "{field, division_by_zero}" |
235 instantiation fract :: (idom) field |
236 begin |
236 begin |
237 |
237 |
238 definition |
238 definition |
239 inverse_fract_def [code del]: |
239 inverse_fract_def [code del]: |
240 "inverse q = Abs_fract (\<Union>x \<in> Rep_fract q. |
240 "inverse q = Abs_fract (\<Union>x \<in> Rep_fract q. |
254 |
254 |
255 lemma divide_fract [simp]: "Fract a b / Fract c d = Fract (a * d) (b * c)" |
255 lemma divide_fract [simp]: "Fract a b / Fract c d = Fract (a * d) (b * c)" |
256 by (simp add: divide_fract_def) |
256 by (simp add: divide_fract_def) |
257 |
257 |
258 instance proof |
258 instance proof |
259 show "inverse 0 = (0:: 'a fract)" by (simp add: fract_expand) |
|
260 (simp add: fract_collapse) |
|
261 next |
|
262 fix q :: "'a fract" |
259 fix q :: "'a fract" |
263 assume "q \<noteq> 0" |
260 assume "q \<noteq> 0" |
264 then show "inverse q * q = 1" apply (cases q rule: Fract_cases_nonzero) |
261 then show "inverse q * q = 1" apply (cases q rule: Fract_cases_nonzero) |
265 by (simp_all add: mult_fract inverse_fract fract_expand eq_fract mult_commute) |
262 by (simp_all add: mult_fract inverse_fract fract_expand eq_fract mult_commute) |
266 next |
263 next |
268 show "q / r = q * inverse r" by (simp add: divide_fract_def) |
265 show "q / r = q * inverse r" by (simp add: divide_fract_def) |
269 qed |
266 qed |
270 |
267 |
271 end |
268 end |
272 |
269 |
273 |
270 instance fract :: (idom) division_by_zero |
274 end |
271 proof |
|
272 show "inverse 0 = (0:: 'a fract)" by (simp add: fract_expand) |
|
273 (simp add: fract_collapse) |
|
274 qed |
|
275 |
|
276 |
|
277 end |