src/HOL/Fields.thy
changeset 36343 30bcceed0dc2
parent 36304 6984744e6b34
child 36348 89c54f51f55a
equal deleted inserted replaced
36338:7808fbc9c3b4 36343:30bcceed0dc2
    10 header {* Fields *}
    10 header {* Fields *}
    11 
    11 
    12 theory Fields
    12 theory Fields
    13 imports Rings
    13 imports Rings
    14 begin
    14 begin
       
    15 
       
    16 text{* Lemmas @{text field_simps} multiply with denominators in (in)equations
       
    17 if they can be proved to be non-zero (for equations) or positive/negative
       
    18 (for inequations). Can be too aggressive and is therefore separate from the
       
    19 more benign @{text algebra_simps}. *}
       
    20 
       
    21 ML {*
       
    22 structure Field_Simps = Named_Thms(
       
    23   val name = "field_simps"
       
    24   val description = "algebra simplification rules for fields"
       
    25 )
       
    26 *}
       
    27 
       
    28 setup Field_Simps.setup
    15 
    29 
    16 class field = comm_ring_1 + inverse +
    30 class field = comm_ring_1 + inverse +
    17   assumes field_inverse: "a \<noteq> 0 \<Longrightarrow> inverse a * a = 1"
    31   assumes field_inverse: "a \<noteq> 0 \<Longrightarrow> inverse a * a = 1"
    18   assumes field_divide_inverse: "a / b = a * inverse b"
    32   assumes field_divide_inverse: "a / b = a * inverse b"
    19 begin
    33 begin
   110 
   124 
   111 lemma divide_diff_eq_iff:
   125 lemma divide_diff_eq_iff:
   112   "z \<noteq> 0 \<Longrightarrow> x / z - y = (x - z * y) / z"
   126   "z \<noteq> 0 \<Longrightarrow> x / z - y = (x - z * y) / z"
   113   by (simp add: diff_divide_distrib)
   127   by (simp add: diff_divide_distrib)
   114 
   128 
   115 lemmas field_eq_simps[no_atp] = algebra_simps
   129 lemmas field_eq_simps [field_simps, no_atp] = algebra_simps
   116   (* pull / out*)
   130   (* pull / out*)
   117   add_divide_eq_iff divide_add_eq_iff
   131   add_divide_eq_iff divide_add_eq_iff
   118   diff_divide_eq_iff divide_diff_eq_iff
   132   diff_divide_eq_iff divide_diff_eq_iff
   119   (* multiply eqn *)
   133   (* multiply eqn *)
   120   nonzero_eq_divide_eq nonzero_divide_eq_eq
   134   nonzero_eq_divide_eq nonzero_divide_eq_eq
   473   also have "... = (a*c \<le> b)"
   487   also have "... = (a*c \<le> b)"
   474     by (simp add: less_imp_not_eq [OF less] divide_inverse mult_assoc) 
   488     by (simp add: less_imp_not_eq [OF less] divide_inverse mult_assoc) 
   475   finally show ?thesis .
   489   finally show ?thesis .
   476 qed
   490 qed
   477 
   491 
   478 text{* Lemmas @{text field_simps} multiply with denominators in in(equations)
   492 lemmas [field_simps, no_atp] =
   479 if they can be proved to be non-zero (for equations) or positive/negative
       
   480 (for inequations). Can be too aggressive and is therefore separate from the
       
   481 more benign @{text algebra_simps}. *}
       
   482 
       
   483 lemmas field_simps[no_atp] = field_eq_simps
       
   484   (* multiply ineqn *)
   493   (* multiply ineqn *)
   485   pos_divide_less_eq neg_divide_less_eq
   494   pos_divide_less_eq neg_divide_less_eq
   486   pos_less_divide_eq neg_less_divide_eq
   495   pos_less_divide_eq neg_less_divide_eq
   487   pos_divide_le_eq neg_divide_le_eq
   496   pos_divide_le_eq neg_divide_le_eq
   488   pos_le_divide_eq neg_le_divide_eq
   497   pos_le_divide_eq neg_le_divide_eq