Require Export Lci.
Require Export misc.
Require Export groups.
Require Export Compare_dec.
Section ring.
Variable S : Set.
Variable A : S -> Prop.
Variable Add Mult : S -> S -> S.
Variable O I : S.
Variable Opp : S -> S.
Variable v : S -> nat.
Definition is_ring :=
commutativity S Add /\
is_group S A Add O Opp /\
intern S A Mult /\ associativity S Mult /\ distributivity S Add Mult.

(* Specifications: *)
Lemma mult_O : is_ring -> forall x : S, A x -> Mult x O = O /\ Mult O x = O.
Lemma mult_opp_r :
is_ring -> forall x y : S, A x -> A y -> Mult x (Opp y) = Opp (Mult x y).
Lemma mult_opp_l :
is_ring -> forall x y : S, A x -> A y -> Mult (Opp x) y = Opp (Mult x y).
Lemma mult_opp_opp :
is_ring -> forall x y : S, A x -> A y -> Mult (Opp x) (Opp y) = Mult x y.