Inductive divP : Term A n -> Term A n -> Prop :=
    divTerm_def :
      forall a b : Term A n,
      ~ zeroP (A:=A) A0 eqA (n:=n) a ->
      forall nZb : ~ zeroP (A:=A) A0 eqA (n:=n) b,
      eqTerm (A:=A) eqA (n:=n) a
        (multTerm (A:=A) multA (n:=n) (divTerm a nZb) b) -> 
      divP a b.Inductive divP : Term A n -> Term A n -> Prop :=
    divTerm_def :
      forall a b : Term A n,
      ~ zeroP (A:=A) A0 eqA (n:=n) a ->
      forall nZb : ~ zeroP (A:=A) A0 eqA (n:=n) b,
      eqTerm (A:=A) eqA (n:=n) a
        (multTerm (A:=A) multA (n:=n) (divTerm a nZb) b) -> 
      divP a b.

(* Specifications: *)
Theorem divP_inv1 : forall a b : Term A n, divP a b -> ~ zeroP (A:=A) A0 eqA (n:=n) a.
Theorem divP_inv2 : forall a b : Term A n, divP a b -> ~ zeroP (A:=A) A0 eqA (n:=n) b.
Theorem divP_inv3 : forall (a b : Term A n) (nZb : ~ zeroP (A:=A) A0 eqA (n:=n) b), divP a b -> eqTerm (A:=A) eqA (n:=n) a (multTerm (A:=A) multA (n:=n) (divTerm a nZb) b).
Theorem divP_plusTerm : forall a b c : Term A n, divP a c -> divP b c -> eqT a b -> ~ zeroP (A:=A) A0 eqA (n:=n) (plusTerm (A:=A) plusA (n:=n) a b) -> divP (plusTerm (A:=A) plusA (n:=n) a b) c.
Theorem divP_invTerm_l : forall a b : Term A n, divP a b -> divP (invTerm (A:=A) invA (n:=n) a) b.
Theorem divP_invTerm_r : forall a b : Term A n, divP a b -> divP a (invTerm (A:=A) invA (n:=n) b).
Theorem divTerm_multTerml : forall a b : Term A n, ~ zeroP (A:=A) A0 eqA (n:=n) a -> ~ zeroP (A:=A) A0 eqA (n:=n) b -> divP (multTerm (A:=A) multA (n:=n) a b) a.
Theorem divTerm_multTermr : forall a b : Term A n, ~ zeroP (A:=A) A0 eqA (n:=n) a -> ~ zeroP (A:=A) A0 eqA (n:=n) b -> divP (multTerm (A:=A) multA (n:=n) a b) b.
Theorem divP_trans : transitive (Term A n) divP.
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).
Theorem divP_eqTerm_comp : forall a b c : Term A n, divP a c -> eqTerm (A:=A) eqA (n:=n) a b -> divP b c.
Theorem divP_on_eqT : forall a b : Term A n, ~ zeroP (A:=A) A0 eqA (n:=n) a -> ~ zeroP (A:=A) A0 eqA (n:=n) b -> eqT a b -> divP a b.
Theorem divP_on_eqT_eqT : forall a b : Term A n, ~ zeroP (A:=A) A0 eqA (n:=n) a -> forall nZb : ~ zeroP (A:=A) A0 eqA (n:=n) b, eqT a b -> eqT (divTerm a nZb) (T1 A1 n).