intros P a H'; elim H'; auto.
intros a0 p H P0;
exists
(exist (fun l0 : list (Term A n) => canonical A0 eqA ltM l0) (pX a0 p) H);
split; auto.
simpl in |- *; auto.
intros a0 p P0 H'0 H'1; elim H'1; intros b E; elim E; intros H'2 H'3;
clear E H'1; auto.
exists b; split; auto with datatypes.
Qed.

(* Specifications: *)
Theorem reds_SpolyQ1 :
forall P : list (poly A0 eqA ltM),
(forall a b : poly A0 eqA ltM, In a P -> In b P -> reds a b P) ->
SpolyQ A A0 A1 eqA invA minusA multA divA eqA_dec n ltM ltM_dec P.