Proof Ring.prod_intro_r ring.
(** Accepts two elements, x and y, and asserts that y is x's left inverse. *)
Definition prod_is_inv_l := Ring.prod_is_inv_l ring.
(** Accepts two elements, x and y, and asserts that y is x's right inverse. *)
Definition prod_is_inv_r := Ring.prod_is_inv_r ring.
(** Accepts two elements, x and y, and asserts that y is x's inverse. *)
Definition prod_is_inv := Ring.prod_is_inv ring.
(** Accepts one argument, x, and asserts that x has a left inverse. *)
Definition prod_has_inv_l := Ring.prod_has_inv_l ring.
(** Accepts one argument, x, and asserts that x has a right inverse. *)
Definition prod_has_inv_r := Ring.prod_has_inv_r ring.
(** Accepts one argument, x, and asserts that x has an inverse. *)
Definition prod_has_inv := Ring.prod_has_inv ring.

(* Specifications: *)
(** Proves that every left inverse must also be a right inverse. *)
Theorem prod_is_inv_lr
:  forall x y : E, prod_is_inv_l x y -> prod_is_inv_r x y.