intros a b nZb p q H'; unfold spminusf in |- *; simpl in |- *; inversion H'.
intros H'0 H'1;
apply
(eqp_trans _ _ _ _ _ _ _ _ _ cs n)
with
(y := minuspf A A0 A1 eqA invA minusA multA eqA_dec n ltM ltM_dec
(pX a p)
(pX a
(mults (A:=A) multA (n:=n)
(divTerm (A:=A) (A0:=A0) (eqA:=eqA) divA (n:=n) a (b:=b)
nZb) q))); auto.
apply minuspf_inv3a with (1 := cs); auto.
apply minuspf_comp with (1 := cs); auto.
apply
canonical_pX_eqT
with
(a := multTerm (A:=A) multA (n:=n)
(divTerm (A:=A) (A0:=A0) (eqA:=eqA) divA (n:=n) a (b:=b) nZb) b);
auto.
change
(canonical A0 eqA ltM
(mults (A:=A) multA (n:=n) (divTerm divA a nZb) (pX b q)))
in |- *; auto.
apply (eqT_sym A n); apply (eqTerm_imp_eqT A eqA n); auto.
change
(canonical A0 eqA ltM
(mults (A:=A) multA (n:=n) (divTerm divA a nZb) (pX b q)))
in |- *; auto.
Qed.

(* Specifications: *)
Theorem canonical_spminusf_full :
forall (a b : Term A n) (nZb : ~ zeroP (A:=A) A0 eqA (n:=n) b)
(p q : list (Term A n)),
canonical A0 eqA ltM (pX a p) ->
canonical A0 eqA ltM (pX b q) ->
divP A A0 eqA multA divA n a b ->
canonical A0 eqA ltM (spminusf a b nZb p q).