src/HOL/Fields.thy
changeset 35216 7641e8d831d2
parent 35090 88cc65ae046e
child 35579 cc9a5a0ab5ea
equal deleted inserted replaced
35215:a03462cbf86f 35216:7641e8d831d2
   228 by (force dest: inverse_zero_imp_zero) 
   228 by (force dest: inverse_zero_imp_zero) 
   229 
   229 
   230 lemma inverse_minus_eq [simp]:
   230 lemma inverse_minus_eq [simp]:
   231    "inverse(-a) = -inverse(a::'a::{division_ring,division_by_zero})"
   231    "inverse(-a) = -inverse(a::'a::{division_ring,division_by_zero})"
   232 proof cases
   232 proof cases
   233   assume "a=0" thus ?thesis by (simp add: inverse_zero)
   233   assume "a=0" thus ?thesis by simp
   234 next
   234 next
   235   assume "a\<noteq>0" 
   235   assume "a\<noteq>0" 
   236   thus ?thesis by (simp add: nonzero_inverse_minus_eq)
   236   thus ?thesis by (simp add: nonzero_inverse_minus_eq)
   237 qed
   237 qed
   238 
   238 
   281 because the latter are covered by a simproc. *}
   281 because the latter are covered by a simproc. *}
   282 
   282 
   283 lemma mult_divide_mult_cancel_left:
   283 lemma mult_divide_mult_cancel_left:
   284   "c\<noteq>0 ==> (c*a) / (c*b) = a / (b::'a::{field,division_by_zero})"
   284   "c\<noteq>0 ==> (c*a) / (c*b) = a / (b::'a::{field,division_by_zero})"
   285 apply (cases "b = 0")
   285 apply (cases "b = 0")
   286 apply (simp_all add: nonzero_mult_divide_mult_cancel_left)
   286 apply simp_all
   287 done
   287 done
   288 
   288 
   289 lemma mult_divide_mult_cancel_right:
   289 lemma mult_divide_mult_cancel_right:
   290   "c\<noteq>0 ==> (a*c) / (b*c) = a / (b::'a::{field,division_by_zero})"
   290   "c\<noteq>0 ==> (a*c) / (b*c) = a / (b::'a::{field,division_by_zero})"
   291 apply (cases "b = 0")
   291 apply (cases "b = 0")
   292 apply (simp_all add: nonzero_mult_divide_mult_cancel_right)
   292 apply simp_all
   293 done
   293 done
   294 
   294 
   295 lemma divide_divide_eq_right [simp,noatp]:
   295 lemma divide_divide_eq_right [simp,noatp]:
   296   "a / (b/c) = (a*c) / (b::'a::{field,division_by_zero})"
   296   "a / (b/c) = (a*c) / (b::'a::{field,division_by_zero})"
   297 by (simp add: divide_inverse mult_ac)
   297 by (simp add: divide_inverse mult_ac)
   337 
   337 
   338 lemma positive_imp_inverse_positive: 
   338 lemma positive_imp_inverse_positive: 
   339 assumes a_gt_0: "0 < a"  shows "0 < inverse (a::'a::linordered_field)"
   339 assumes a_gt_0: "0 < a"  shows "0 < inverse (a::'a::linordered_field)"
   340 proof -
   340 proof -
   341   have "0 < a * inverse a" 
   341   have "0 < a * inverse a" 
   342     by (simp add: a_gt_0 [THEN order_less_imp_not_eq2] zero_less_one)
   342     by (simp add: a_gt_0 [THEN order_less_imp_not_eq2])
   343   thus "0 < inverse a" 
   343   thus "0 < inverse a" 
   344     by (simp add: a_gt_0 [THEN order_less_not_sym] zero_less_mult_iff)
   344     by (simp add: a_gt_0 [THEN order_less_not_sym] zero_less_mult_iff)
   345 qed
   345 qed
   346 
   346 
   347 lemma negative_imp_inverse_negative:
   347 lemma negative_imp_inverse_negative:
   522   "(inverse x = 1) = (x = (1::'a::{field,division_by_zero}))"
   522   "(inverse x = 1) = (x = (1::'a::{field,division_by_zero}))"
   523 by (insert inverse_eq_iff_eq [of x 1], simp) 
   523 by (insert inverse_eq_iff_eq [of x 1], simp) 
   524 
   524 
   525 lemma one_le_inverse_iff:
   525 lemma one_le_inverse_iff:
   526   "(1 \<le> inverse x) = (0 < x & x \<le> (1::'a::{linordered_field,division_by_zero}))"
   526   "(1 \<le> inverse x) = (0 < x & x \<le> (1::'a::{linordered_field,division_by_zero}))"
   527 by (force simp add: order_le_less one_less_inverse_iff zero_less_one 
   527 by (force simp add: order_le_less one_less_inverse_iff)
   528                     eq_commute [of 1]) 
       
   529 
   528 
   530 lemma inverse_less_1_iff:
   529 lemma inverse_less_1_iff:
   531   "(inverse x < 1) = (x \<le> 0 | 1 < (x::'a::{linordered_field,division_by_zero}))"
   530   "(inverse x < 1) = (x \<le> 0 | 1 < (x::'a::{linordered_field,division_by_zero}))"
   532 by (simp add: linorder_not_le [symmetric] one_le_inverse_iff) 
   531 by (simp add: linorder_not_le [symmetric] one_le_inverse_iff) 
   533 
   532