(** Represents -1 and proves that it exists. *)
Definition E_n1_strong
  :  { x : E | sum_is_inv 1 x }
  := Ring.E_n1_strong ring.(** Represents -1. *)
Definition E_n1 : E := Ring.E_n1 ring.(**
  Defines a symbolic representation for -1
  
  Note: here we represent the inverse of 1
  rather than the negation of 1. Letter we prove
  that the negation equals the inverse.

  Note: brackets are needed to ensure Coq parses
  the symbol as a single token instead of a
  prefixed function call.
*)
Notation "{-1}" := E_n1 : commutative_ring_scope.(** Asserts that -1 is the additive inverse of 1. *)
Definition E_n1_def
  :  sum_is_inv 1 {-1}
  := Ring.E_n1_def ring.

(* Specifications: *)
Theorem E_n1_inv_l : sum_is_inv_l 1 {-1}.
Theorem E_n1_inv_r : sum_is_inv_r 1 {-1}.
Theorem E_n1_uniq : forall x : E, sum_is_inv 1 x -> x = {-1}.
Theorem prod_n1_x_inv_l : forall x : E, sum_is_inv_l x ({-1} # x).
Theorem prod_x_n1_inv_l : forall x : E, sum_is_inv_l x (x # {-1}).
Theorem prod_n1_x_inv_r : forall x : E, sum_is_inv_r x ({-1} # x).
Theorem prod_x_n1_inv_r : forall x : E, sum_is_inv_r x (x # {-1}).
Theorem prod_n1_x_inv : forall x : E, sum_is_inv x ({-1} # x).
Theorem prod_x_n1_inv : forall x : E, sum_is_inv x (x # {-1}).
Theorem prod_n1_neg : {#} {-1} = sum_neg.
Theorem prod_x_n1_neg : forall x : E, x # {-1} = - x.
Theorem prod_n1_x_neg : forall x : E, {-1} # x = - x.
Theorem prod_n1_eq : forall x : E, {-1} # x = x # {-1} .
Theorem neg_n1 : sum_neg {-1} = 1.
Theorem prod_n1_n1 : {-1} # {-1} = 1.
Theorem E_n1_inv : prod_is_inv {-1} {-1}.