intros a p; case p; auto.
intros a0 l H'.
apply
(eqp_trans _ _ _ _ _ _ _ _ _ cs n)
with (y := pX a (pluspf (pO A n) (a0 :: l))); auto.
change
(eqP A eqA n (pluspf (pX a (pO A n)) (pX a0 l))
(pX a (pluspf (pO A n) (pX a0 l)))) in |- *.
apply (eqp_sym _ _ _ _ _ _ _ _ _ cs n); apply pluspf_inv1; auto.
apply (canonical_pX_order A A0 eqA) with (l := l); auto.
Qed.
Hint Resolve plusTerm_is_pX.

(* Specifications: *)
Theorem pluspf3_assoc :
forall l,
canonical A0 eqA ltM (fst l) ->
canonical A0 eqA ltM (fst (snd l)) ->
canonical A0 eqA ltM (snd (snd l)) ->
eqP A eqA n (pluspf (pluspf (fst l) (fst (snd l))) (snd (snd l)))
(pluspf (fst l) (pluspf (fst (snd l)) (snd (snd l)))).