Section Lemmas.
Variable G : GROUP.
unfold group_inverse in |- *.
auto with algebra.
Qed.
intros; apply (group_inverse_r_prf G x); auto with algebra.
Qed.
intros; apply (group_inverse_l_prf G x); auto with algebra.
Qed.
Hint Resolve GROUP_comp GROUP_inverse_r GROUP_inverse_l: algebra.
apply
Trans with (sgroup_law _ (group_inverse _ (monoid_unit G)) (monoid_unit G));
auto with algebra.
Qed.
intros x y z H'; try assumption.
apply Trans with (sgroup_law _ (sgroup_law _ (group_inverse _ x) x) y);
auto with algebra.
apply Trans with (sgroup_law _ (monoid_unit G) y); auto with algebra.
apply Trans with (sgroup_law _ (group_inverse _ x) (sgroup_law _ x y));
auto with algebra.
apply Trans with (sgroup_law _ (group_inverse _ x) (sgroup_law _ x z));
auto with algebra.
apply Trans with (sgroup_law _ (sgroup_law _ (group_inverse _ x) x) z);
auto with algebra.
apply Trans with (sgroup_law _ (monoid_unit G) z); auto with algebra.
Qed.

Lemma GROUP_reg_right :
forall x y z : G, Equal (sgroup_law _ y x) (sgroup_law _ z x) -> Equal y z.