Notation NPEeval := (PEeval rO rI radd rmul rsub ropp phi Cp_phi rpow).Notation "P @ l" := (NPEeval l P) (at level 10, no associativity).Notation "0" := (PEc 0) : PE_scope.Notation "1" := (PEc 1) : PE_scope.Infix "+" := PEadd : PE_scope.Infix "-" := PEsub : PE_scope.Infix "*" := PEmul : PE_scope.Notation "- e" := (PEopp e) : PE_scope.Infix "^" := PEpow : PE_scope.Definition NPEequiv e e' := forall l, e@l == e'@l.Infix "===" := NPEequiv (at level 70, no associativity) : PE_scope.Instance NPEequiv_eq : Equivalence NPEequiv.Instance NPEeval_ext : Proper (eq ==> NPEequiv ==> req) NPEeval.Notation Nnorm :=
  (norm_subst cO cI cadd cmul csub copp ceqb cdiv).Notation NPphi_dev :=
  (Pphi_dev rO rI radd rmul rsub ropp cO cI ceqb phi get_sign).Notation NPphi_pow :=
  (Pphi_pow rO rI radd rmul rsub ropp cO cI ceqb phi Cp_phi rpow get_sign).(* add abstract semi-ring to help with some proofs *)
Add Ring Rring : (ARth_SRth ARth).

(* Specifications: *)
Lemma rsub_0_l r : 0 - r == - r.
Lemma rsub_0_r r : r - 0 == r.
Theorem rdiv_simpl p q : ~ q == 0 -> q * (p / q) == p.