src/HOL/Fields.thy
changeset 58776 95e58e04e534
parent 58512 dc4d76dfa8f0
child 58826 2ed2eaabe3df
equal deleted inserted replaced
58775:9cd64a66a765 58776:95e58e04e534
    21 
    21 
    22 class inverse =
    22 class inverse =
    23   fixes inverse :: "'a \<Rightarrow> 'a"
    23   fixes inverse :: "'a \<Rightarrow> 'a"
    24     and divide :: "'a \<Rightarrow> 'a \<Rightarrow> 'a"  (infixl "'/" 70)
    24     and divide :: "'a \<Rightarrow> 'a \<Rightarrow> 'a"  (infixl "'/" 70)
    25 
    25 
       
    26 setup {* Sign.add_const_constraint
       
    27   (@{const_name "divide"}, SOME @{typ "'a \<Rightarrow> 'a \<Rightarrow> 'a"}) *}
       
    28 
       
    29 
       
    30 context semiring
       
    31 begin
       
    32 
       
    33 lemma [field_simps]:
       
    34   shows distrib_left_NO_MATCH: "NO_MATCH a (x / y) \<Longrightarrow> a * (b + c) = a * b + a * c"
       
    35     and distrib_right_NO_MATCH: "NO_MATCH c (x / y) \<Longrightarrow> (a + b) * c = a * c + b * c"
       
    36   by (rule distrib_left distrib_right)+
       
    37 
       
    38 end
       
    39 
       
    40 context ring
       
    41 begin
       
    42 
       
    43 lemma [field_simps]:
       
    44   shows left_diff_distrib_NO_MATCH: "NO_MATCH c (x / y) \<Longrightarrow> (a - b) * c = a * c - b * c"
       
    45     and right_diff_distrib_NO_MATCH: "NO_MATCH a (x / y) \<Longrightarrow> a * (b - c) = a * b - a * c"
       
    46   by (rule left_diff_distrib right_diff_distrib)+
       
    47 
       
    48 end
       
    49 
       
    50 setup {* Sign.add_const_constraint
       
    51   (@{const_name "divide"}, SOME @{typ "'a::inverse \<Rightarrow> 'a \<Rightarrow> 'a"}) *}
       
    52 
    26 text{* Lemmas @{text divide_simps} move division to the outside and eliminates them on (in)equalities. *}
    53 text{* Lemmas @{text divide_simps} move division to the outside and eliminates them on (in)equalities. *}
    27 
    54 
    28 named_theorems divide_simps "rewrite rules to eliminate divisions"
    55 named_theorems divide_simps "rewrite rules to eliminate divisions"
    29 
       
    30 
    56 
    31 class division_ring = ring_1 + inverse +
    57 class division_ring = ring_1 + inverse +
    32   assumes left_inverse [simp]:  "a \<noteq> 0 \<Longrightarrow> inverse a * a = 1"
    58   assumes left_inverse [simp]:  "a \<noteq> 0 \<Longrightarrow> inverse a * a = 1"
    33   assumes right_inverse [simp]: "a \<noteq> 0 \<Longrightarrow> a * inverse a = 1"
    59   assumes right_inverse [simp]: "a \<noteq> 0 \<Longrightarrow> a * inverse a = 1"
    34   assumes divide_inverse: "a / b = a * inverse b"
    60   assumes divide_inverse: "a / b = a * inverse b"