cut (~ zeroP (A:=A) A0 eqA (n:=n) c); [ intros nZc | auto ].
apply divTerm_def with (nZb := nZc); auto.
apply divP_inv1 with (b := b); auto.
2: apply divP_inv2 with (a := b); auto.
cut (~ zeroP (A:=A) A0 eqA (n:=n) b); [ intros nZb | auto ].
apply
(eqTerm_trans _ _ _ _ _ _ _ _ _ cs n)
with
(y := multTerm (A:=A) multA (n:=n)
(multTerm (A:=A) multA (n:=n) (divTerm a nZb) (divTerm b nZc)) c);
auto.
apply
(eqTerm_trans _ _ _ _ _ _ _ _ _ cs n)
with
(y := multTerm (A:=A) multA (n:=n) (divTerm a nZb)
(multTerm (A:=A) multA (n:=n) (divTerm b nZc) c));
auto.
apply
(eqTerm_trans _ _ _ _ _ _ _ _ _ cs n)
with (y := multTerm (A:=A) multA (n:=n) (divTerm a nZb) b);
auto.
apply eqTerm_multTerm_comp with (1 := cs); auto.
inversion H'0; inversion H'.
apply
(eqTerm_trans _ _ _ _ _ _ _ _ _ cs n)
with (y := divTerm (multTerm (A:=A) multA (n:=n) (divTerm a nZb) b) nZc);
auto.
apply (eqTerm_sym _ _ _ _ _ _ _ _ _ cs n); apply divTerm_multTerm_l; auto.
apply eqTerm_divTerm_comp; auto.
apply (eqTerm_sym _ _ _ _ _ _ _ _ _ cs n);
apply (eqTerm_trans _ _ _ _ _ _ _ _ _ cs n) with (1 := H4);
auto.
apply divP_inv2 with (a := a); auto.
Qed.
Hint Resolve divP_trans.

(* Specifications: *)
Theorem divP_nZero :
forall (a b : Term A n) (nZb : ~ zeroP (A:=A) A0 eqA (n:=n) b),
divP a b -> ~ zeroP (A:=A) A0 eqA (n:=n) (divTerm a nZb).