proposition: Theorem eqTerm_spolyf_red3 : forall (a b : Term A n) (nZa : ~ zeroP (A:=A) A0 eqA (n:=n) a) (nZb : ~ zeroP (A:=A) A0 eqA (n:=n) b) (p q r : list (Term A n)) (Cpxa : canonical A0 eqA ltM (pX a p)) (Cpxb : canonical A0 eqA ltM (pX b q)), canonical A0 eqA ltM r -> eqP A eqA n (spolyf (pX a p) (pX b q) Cpxa Cpxb) (minuspf A A0 A1 eqA invA minusA multA eqA_dec n ltM ltM_dec (spminusf A A0 A1 eqA invA minusA multA divA eqA_dec n ltM ltM_dec (ppc (A:=A) A1 (n:=n) a b) b nZb r q) (spminusf A A0 A1 eqA invA minusA multA divA eqA_dec n ltM ltM_dec (ppc (A:=A) A1 (n:=n) a b) a nZa r p)).
proof: Proof. Proof using plusA os cs. intros a b nZa nZb p q r Cpxa Cpxb H'1. cut (~ zeroP (A:=A) A0 eqA (n:=n) (ppc (A:=A) A1 (n:=n) a b)); [ intros nZppab | auto ]. apply (eqp_trans _ _ _ _ _ _ _ _ _ cs n) with (y := mults (A:=A) multA (n:=n) (T1 A1 n) (spolyf (pX a p) (pX b q) Cpxa Cpxb)). apply (eqp_sym _ _ _ _ _ _ _ _ _ cs n); auto. apply (eqp_trans _ _ _ _ _ _ _ _ _ cs n) with (y := mults (A:=A) multA (n:=n) (divTerm (A:=A) (A0:=A0) (eqA:=eqA) divA (n:=n) (ppc (A:=A) A1 (n:=n) a b) (b:=ppc (A:=A) A1 (n:=n) a b) nZppab) (spolyf (pX a p) (pX b q) Cpxa Cpxb)). apply (eqp_sym _ _ _ _ _ _ _ _ _ cs n); auto. apply eqTerm_spolyf_red2; auto. Qed.