intros a nZa p; elim p; simpl in |- *; auto.
intros a0 l H' q H'0 H'1.
cut (canonical A0 eqA ltM l);
[ idtac | apply canonical_imp_canonical with (a := a0); auto ].
cut (~ zeroP (A:=A) A0 eqA (n:=n) a0); auto.
apply canonical_nzeroP with (ltM := ltM) (p := l); auto.
Qed.
Hint Resolve canonical_Dmult.

(* Specifications: *)
Theorem divp_is_multTerm :
forall (a b : Term A n) (nZb : ~ zeroP (A:=A) A0 eqA (n:=n) b),
divP A A0 eqA multA divA n a b ->
forall p : list (Term A n),
canonical A0 eqA ltM p ->
eqP A eqA n
(mults (A:=A) multA (n:=n)
(divTerm (A:=A) (A0:=A0) (eqA:=eqA) divA (n:=n) a (b:=b) nZb) p)
(divpf b nZb (mults (A:=A) multA (n:=n) a p)).