Section Lemmas.
Variable R : RING.
exact (sgroup_assoc_prf (E:=R) (ring_monoid R)).
Qed.
unfold ring_mult in |- *; auto with algebra.
Qed.
exact (monoid_unit_r_prf (ring_monoid R)).
Qed.
exact (monoid_unit_l_prf (ring_monoid R)).
Qed.
exact (ring_dist_r_prf R).
Qed.
exact (ring_dist_l_prf R).
Qed.
Hint Resolve RING_assoc RING_comp RING_unit_r RING_unit_l RING_dist_r
RING_dist_l: algebra.
intros x; try assumption.
apply GROUP_reg_right with (ring_mult x (monoid_unit R)).
apply Trans with (ring_mult x (sgroup_law R (monoid_unit R) (monoid_unit R)));
auto with algebra.
apply Trans with (ring_mult x (monoid_unit R)); auto with algebra.
Qed.
Hint Resolve RING_absorbant_r: algebra.
intros x; try assumption.
apply GROUP_reg_right with (ring_mult (monoid_unit R) x).
apply Trans with (ring_mult (sgroup_law R (monoid_unit R) (monoid_unit R)) x);
auto with algebra.
apply Trans with (ring_mult (monoid_unit R) x); auto with algebra.
Qed.
Hint Resolve RING_absorbant_l: algebra.

Lemma RING_op_mult_l :
forall x y : R,
Equal (ring_mult (group_inverse R x) y) (group_inverse R (ring_mult x y)).