Proof
fun x y
=> conj
(fun H : op_is_inv x y
=> conj (proj2 H) (proj1 H))
(fun H : op_is_inv y x
=> conj (proj2 H) (proj1 H)).
(** The next few lemmas define special cases where cancellation holds and culminate in the Unique Inverse theorem which asserts that, in a Monoid, every value has at most one inverse. *)

(* Specifications: *)
(** Proves the left cancellation law for elements possessing a left inverse. *)
Theorem op_cancel_l
:  forall x y z : M, has_inv_l z -> z + x = z + y -> x = y.