(** Represents strongly-specified negation. *)
Definition sum_neg_strong
  :  forall x : E, { y | sum_is_inv x y }
  := Abelian_Group.op_neg_strong sum_abelian_group.(** Represents negation. *)
Definition sum_neg 
  :  E -> E
  := Abelian_Group.op_neg sum_abelian_group.Notation "{-}" := (Ring.sum_neg _) : ring_scope.Notation "- x" := (Ring.sum_neg _ x) : ring_scope.(**
  Asserts that the negation returns the inverse
  of its argument.
*)
Definition sum_neg_def 
  :  forall x : E, sum_is_inv x (- x)
  := Abelian_Group.op_neg_def sum_abelian_group.

(* Specifications: *)
Theorem sum_cancel_neg : forall x : E, - (- x) = x.
Theorem sum_neg_rev : forall x y : E, - x = y -> - y = x.
Theorem sum_neg_distrib_inv_l : forall x y : E, sum_is_inv_l (x + y) (- y + - x).
Theorem sum_neg_distrib_inv_r : forall x y : E, sum_is_inv_r (x + y) (- y + - x).
Theorem sum_neg_distrib_inv : forall x y : E, sum_is_inv (x + y) (- y + - x).
Theorem sum_neg_distrib : forall x y : E, - (x + y) = - y + - x.
Theorem sum_0_neg : - 0 = 0.
Theorem sum_neg_0 : forall x : E, - x = 0 -> x = 0.
Theorem sum_neg_0_uniq : unique (fun x => - x = 0) 0.