Definition divPp : Term A n -> list (Term A n) -> Prop.Definition divpf :
  forall (a : Term A n) (nZa : ~ zeroP (A:=A) A0 eqA (n:=n) a),
  list (Term A n) -> list (Term A n).

(* Specifications: *)
Theorem divpf_canonical : forall (a : Term A n) (p : list (Term A n)) (nZa : ~ zeroP (A:=A) A0 eqA (n:=n) a), canonical A0 eqA ltM p -> canonical A0 eqA ltM (divpf a nZa p).
Theorem divPp_divpf : forall (a : Term A n) (nZa : ~ zeroP (A:=A) A0 eqA (n:=n) a) (p : list (Term A n)), canonical A0 eqA ltM p -> divPp a p -> eqP A eqA n p (mults (A:=A) multA (n:=n) a (divpf a nZa p)).
Theorem canonical_Rminus : forall (r p q : list (Term A n)) (a : Term A n) (nZa : ~ zeroP (A:=A) A0 eqA (n:=n) a), canonical A0 eqA ltM p -> canonical A0 eqA ltM q -> canonical A0 eqA ltM r -> canonical A0 eqA ltM (Rminus a nZa p q r).
Theorem Rminus_in : forall (r p q : list (Term A n)) (a b : Term A n) (nZb : ~ zeroP (A:=A) A0 eqA (n:=n) b), divPp b r -> In a p -> canonical A0 eqA ltM p -> canonical A0 eqA ltM (pX b q) -> canonical A0 eqA ltM (pX a r) -> In a (Rminus b nZb p (pX b q) r).
Theorem Rminus_is_reduceplus : forall (Q : list (poly A0 eqA ltM)) (a : Term A n) (q : list (Term A n)) (nZa : ~ zeroP (A:=A) A0 eqA (n:=n) a), canonical A0 eqA ltM q -> inPolySet A A0 eqA n ltM (pX a q) Q -> forall r : list (Term A n), canonical A0 eqA ltM r -> divPp a r -> forall p : list (Term A n), canonical A0 eqA ltM p -> incl r p -> reduceplus A A0 A1 eqA invA minusA multA divA eqA_dec n ltM ltM_dec Q p (Rminus a nZa p (pX a q) r).