(** Represents strongly-specified negation. *)
Definition op_neg_strong
  :  forall x : E, { y | op_is_inv x y }
  := fun x => Monoid.op_neg_strong op_monoid x (op_inv_ex x).(** Represents negation. *)
Definition op_neg
  :  E -> E
  := fun x => Monoid.op_neg op_monoid x (op_inv_ex x).Notation "{-}" := (Group.op_neg _) : group_scope.Notation "- x" := (Group.op_neg _ x) : group_scope.

(* Specifications: *)
Theorem op_neg_def : forall x : E, op_is_inv x (- x).
Theorem op_neg_inj : is_injective E E op_neg.
Theorem op_cancel_neg : forall x : E, - (- x) = x.
Theorem op_neg_rev : forall x y : E, - x = y -> - y = x.
Theorem op_neg_distrib_inv_l : forall x y : E, op_is_inv_l (x + y) (- y + - x).
Theorem op_neg_distrib_inv_r : forall x y : E, op_is_inv_r (x + y) (- y + - x).
Theorem op_neg_distrib_inv : forall x y : E, op_is_inv (x + y) (- y + - x).
Theorem op_neg_distrib : forall x y : E, - (x + y) = - y + - x.