src/HOL/Library/Fraction_Field.thy
changeset 36312 26eea417ccc4
parent 35372 ca158c7b1144
child 36331 6b9e487450ba
equal deleted inserted replaced
36311:ed3a87a7f977 36312:26eea417ccc4
   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