Section inverses_comp_def.
Variable x y : Inverses_setoid.
Definition Inv_comp_elt_l := Inv_elt_l x +_M Inv_elt_l y.
Definition Inv_comp_elt_r := Inv_elt_r y +_M Inv_elt_r x.
Canonical Structure Inverses_comp : Inverses_setoid :=
Build_Inverses Inv_comp_invs1 Inv_comp_invs2.
End inverses_comp_def.
Definition Inverses_op := Build_Map2 Inverses_congl Inverses_congr.
(* The Monoid of inverse pairs *)
Canonical Structure Inverses_unit :=
Build_Inverses Inverses_unit_invs Inverses_unit_invs.
Canonical Structure Inverses_Monoid :=
Build_Monoid Mass_Inverses Midl_Inverses Midr_Inverses.
(* opposite operation *)
Definition Opposite (x : Inverses_setoid) : Inverses_setoid :=
Build_Inverses (Prf_invs2 x) (Prf_invs1 x).
Canonical Structure Opposite_map := Build_Map Opposite_map_law.

Lemma Inverses_invl : Group_invl Opposite_map.