intros r; elim r; simpl in |- *; auto.
intros a l H' p q a0 b nZb H'0 H'1 H'2 H'3 H'4.
cut (~ zeroP (A:=A) A0 eqA (n:=n) b);
[ intros Z1 | apply canonical_nzeroP with (ltM := ltM) (p := q); auto ].
elim H'0; intros H'6 H'7; clear H'0.
apply minuspf_in; auto.
apply H'; auto.
apply canonical_skip_fst with (b := a); auto.
apply eqT_compat_ltTl with (b := a); auto.
apply (eqTerm_imp_eqT A eqA n); auto.
inversion H'6; auto.
apply (canonical_pX_order A A0 eqA) with (l := l); auto.
apply canonical_Rminus; auto.
apply canonical_imp_canonical with (a := a); auto.
apply canonical_imp_canonical with (a := a0); auto.
change
(canonical A0 eqA ltM
(mults (A:=A) multA (n:=n)
(divTerm (A:=A) (A0:=A0) (eqA:=eqA) divA (n:=n) a (b:=b) nZb)
(pX b q))) in |- *; auto.
Qed.

(* Specifications: *)
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).