Definition redacc : list poly -> list poly -> list poly.Definition red (L : list poly) : list poly := redacc L nil.

(* Specifications: *)
Theorem redacc_cb : forall (L1 L2 : list poly) (p : poly), In p (redacc L1 L2) -> cb (L1 ++ L2) p.
Theorem red_cb : forall (L : list poly) (p : poly), In p (red L) -> cb L p.
Theorem cb_redacc : forall (L1 L2 : list poly) (p : poly), In p L1 -> cb (redacc L1 L2 ++ L2) p.
Theorem cb_red : forall (L : list poly) (p : poly), In p L -> cb (red L) p.
Theorem cb_red_cb1 : forall (p : poly) (L : list poly), cb L p -> cb (red L) p.
Theorem cb_red_cb2 : forall (p : poly) (L : list poly), cb (red L) p -> cb L p.
Theorem redacc_divp : forall (L1 L2 : list poly) (p : poly), ~ zerop p -> In p (L1 ++ L2) -> exists q : poly, In q (redacc L1 L2 ++ L2) /\ divp p q /\ ~ zerop q.
Theorem red_divp : forall (L : list poly) (p : poly), In p L -> ~ zerop p -> exists q : poly, In q (red L) /\ divp p q /\ ~ zerop q.
Theorem red_grobner : forall L : list poly, grobner L -> grobner (red L).