(** Represents strongly-specified negation. *)
Definition op_neg_strong
  :  forall x : E, { y | op_is_inv x y }
  := Group.op_neg_strong op_group.(** Represents negation. *)
Definition op_neg
  :  E -> E
  := Group.op_neg op_group.Notation "{-}" := (Abelian_Group.op_neg _) : abelian_group_scope.Notation "- x" := (Abelian_Group.op_neg _ x) : abelian_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, op_neg (- x) = x.
Theorem op_neg_onto : is_onto E E op_neg.
Theorem op_neg_bijective : is_bijective E E op_neg.
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.