unfold irreducible in |- *.
intros Q p q H' H'0 H'1 q0; red in |- *; intros H'2.
apply H' with (q := q0); auto.
apply reduce_eqp_com with (p := q) (q := q0); auto.
apply eqp_imp_canonical with (1 := cs) (p := p); auto.
apply (eqp_sym _ _ _ _ _ _ _ _ _ cs n); auto.
Qed.
Inductive pickinSetp :
Term A n -> list (Term A n) -> list (poly A0 eqA ltM) -> Prop :=
| pickinSeteqp :
forall (a b : Term A n) (p : list (Term A n))
(H : canonical A0 eqA ltM (pX b p)) (P : list (poly A0 eqA ltM)),
divP A A0 eqA multA divA n a b ->
pickinSetp a (pX b p)
(exist (fun l0 : list (Term A n) => canonical A0 eqA ltM l0)
(pX b p) H :: P)
| pickinSetskip :
forall (a b : Term A n) (p : list (Term A n))
(q : poly A0 eqA ltM) (P : list (poly A0 eqA ltM)),
pickinSetp a p P -> pickinSetp a p (q :: P).
Hint Resolve pickinSeteqp pickinSetskip.

(* Specifications: *)
Lemma pickin_is_pX :
forall (a : Term A n) (p : list (Term A n)) (Q : list (poly A0 eqA ltM)),
pickinSetp a p Q ->
exists b : Term A n, (exists q : list (Term A n), p = pX b q).