Definition genPcPf0 :
  forall (i : poly A0 eqA ltM) (aP R : list (poly A0 eqA ltM)),
  {Q : list (poly A0 eqA ltM) | genPcP i aP R Q}.Definition genPcPf :
  poly A0 eqA ltM ->
  list (poly A0 eqA ltM) -> list (poly A0 eqA ltM) -> list (poly A0 eqA ltM).

(* Specifications: *)
Theorem Cb_genPcPf : forall (b : poly A0 eqA ltM) (P Q R : list (poly A0 eqA ltM)), Cb A A0 eqA plusA multA eqA_dec n ltM ltM_dec b R -> (forall a : poly A0 eqA ltM, In a P -> Cb A A0 eqA plusA multA eqA_dec n ltM ltM_dec a R) -> (forall a : poly A0 eqA ltM, In a Q -> Cb A A0 eqA plusA multA eqA_dec n ltM ltM_dec a R) -> forall a : poly A0 eqA ltM, In a (genPcPf b P Q) -> Cb A A0 eqA plusA multA eqA_dec n ltM ltM_dec a R.
Theorem genPcPf_incl : forall (a : poly A0 eqA ltM) (aL Q : list (poly A0 eqA ltM)), incl Q (genPcPf a aL Q).
Theorem spolyp_addEnd_genPcPf : forall (aP R Q : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM), ~ BuchAux.zerop A A0 eqA n ltM a -> ~ BuchAux.zerop A A0 eqA n ltM b -> In b aP -> exists c : poly A0 eqA ltM, In c aP /\ (In (spolyp A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM ltM_dec os a c) (genPcPf a aP Q) \/ red A A0 A1 eqA invA minusA multA divA eqA_dec n ltM ltM_dec (spolyp A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM ltM_dec os a c) (addEnd A A0 eqA n ltM a aP)) /\ divp A A0 eqA multA divA n ltM (ppcp A A0 A1 eqA plusA invA minusA multA divA cs n ltM a b) c.