intros a b nZb p; elim p; simpl in |- *; auto.
intros H' c H'0; elim H'0; auto.
intros a0 l H' H'0 c H'1; elim H'1;
[ intros H'2; rewrite <- H'2; clear H'1 | intros H'2; clear H'1 ];
auto.
2: apply H'; auto.
2: apply canonical_skip_fst with (b := a0); auto.
split; auto.
apply eqT_compat_ltTr with (b := multTerm (A:=A) multA (n:=n) b a); auto.
apply (eqTerm_imp_eqT A eqA n); auto.
apply multTerm_ltT_l; auto.
apply (canonical_pX_order A A0 eqA) with (l := l); auto.
apply (eqT_trans A n) with (y := multTerm (A:=A) multA (n:=n) a0 b); auto.
apply (eqTerm_imp_eqT A eqA n); auto.
apply multTerm_eqT; auto.
apply (eqTerm_imp_eqT A eqA n); auto.
apply (eqTerm_sym _ _ _ _ _ _ _ _ _ cs n); auto.
apply
(eqTerm_trans _ _ _ _ _ _ _ _ _ cs n)
with
(y := multTerm (A:=A) multA (n:=n)
(divTerm (A:=A) (A0:=A0) (eqA:=eqA) divA (n:=n) b (b:=b) nZb) a0);
auto.
apply
(eqTerm_trans _ _ _ _ _ _ _ _ _ cs n)
with (y := multTerm (A:=A) multA (n:=n) (T1 A1 n) a0);
auto.
apply (eqTerm_sym _ _ _ _ _ _ _ _ _ cs n); auto.
Qed.

(* Specifications: *)
Theorem multTerm_or_z_d2 :
forall (a b : Term A n) (nZb : ~ zeroP (A:=A) A0 eqA (n:=n) b)
(p : list (Term A n)),
canonical A0 eqA ltM (pX a p) ->
forall c : Term A n,
In c (mults (A:=A) multA (n:=n) b p) ->
ltT ltM c (multTerm (A:=A) multA (n:=n) b a) /\
eqT c
(multTerm (A:=A) multA (n:=n)
(divTerm (A:=A) (A0:=A0) (eqA:=eqA) divA (n:=n) c (b:=b) nZb) b).