intros p q r H'; elim H'; auto.
intros l1; case l1; simpl in |- *; auto.
intros t l H; inversion H.
intros a1 a2 l1 l2 l3 H H0 H1 H2; inversion H2.
intros a1 a2 l1 l2 l3 H H0 H1 H2 H3.
apply eqpP1; auto.
apply zerop_is_eqTerm; auto.
intros a1 a2 l1 l2 l3 H H0 H1 H2 H3; inversion H3.
intros a1 a2 l1 l2 l3 H H0 H1 H2; inversion H2.
Qed.

(* Specifications: *)
Lemma minusP_inv :
forall (p q l : list (Term A n)) (a b : Term A n),
minusP (pX a p) (pX b q) l ->
exists l1 : list (Term A n),
ltT ltM b a /\ minusP p (pX b q) l1 /\ l = pX a l1 \/
ltT ltM a b /\
minusP (pX a p) q l1 /\ l = pX (invTerm (A:=A) invA (n:=n) b) l1 \/
eqT a b /\
(zeroP (A:=A) A0 eqA (n:=n) (minusTerm (A:=A) minusA (n:=n) a b) /\
minusP p q l \/
~ zeroP (A:=A) A0 eqA (n:=n) (minusTerm (A:=A) minusA (n:=n) a b) /\
minusP p q l1 /\ l = pX (minusTerm (A:=A) minusA (n:=n) a b) l1).