intros a p; elim p; auto.
intros q; case q; simpl in |- *; auto.
intros t l H'; inversion_clear H'; auto.
intros a0 l H' q; case q; simpl in |- *; auto.
intros H'0; inversion_clear H'0; auto.
intros t l0 H'0; inversion_clear H'0; auto.
intros H'1.
change (eqP A eqA n (pX a0 l) (pX t l0)) in |- *.
apply eqpP1; auto.
apply multTerm_eqTerm_inv with (1 := cs) (a := a); auto.
Qed.

(* Specifications: *)
Theorem reduce_mults_invf :
forall (a : Term A n) (nZa : ~ zeroP (A:=A) A0 eqA (n:=n) a),
eqT a (T1 A1 n) ->
forall (Q : list (poly A0 eqA ltM)) (p q : list (Term A n)),
canonical A0 eqA ltM p ->
reduce Q (mults (A:=A) multA (n:=n) a p) q ->
reduce Q p
(mults (A:=A) multA (n:=n)
(divTerm (A:=A) (A0:=A0) (eqA:=eqA) divA (n:=n) (T1 A1 n) (b:=a) nZa) q).