Proof
fun y H
=> ex_intro
(fun x => exists H0 : has_inv x, {-} x H0 = y)
({-} y H)
(ex_intro
(fun H0 => {-} ({-} y H) H0 = y)
(op_neg_inv_ex y H)
(op_cancel_neg y H)).

(* Specifications: *)
(** Proves that invertability is closed over the monoid operation.  Note: given this theorem, we can conclude that the set of invertible elements within a monoid, which must be nonempty, forms a group. *)
Theorem op_inv_closed
:  forall (x : M) (H : has_inv x) (y : M) (H0 : has_inv y), has_inv (x + y).