Remark lem_redln_cons_gen :
 forall (aP R Q : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
 In a aP ->
 In b aP ->
 redIn a b aP Q R ->
 forall (c : poly A0 eqA ltM) (Q1 : list (poly A0 eqA ltM)),
 incl
   (addEnd A A0 eqA n ltM
      (nf A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM ltM_dec
         os c aP) aP) R ->
 Q = c :: Q1 ->
 redIn a b
   (addEnd A A0 eqA n ltM
      (nf A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM ltM_dec
         os c aP) aP) Q1 R.

(* Specifications: *)
Theorem redln_cons_gen : forall (aP R Q : list (poly A0 eqA ltM)) (a b c : poly A0 eqA ltM), In a aP -> In b aP -> redIn a b aP (c :: Q) R -> incl (addEnd A A0 eqA n ltM (nf A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM ltM_dec os c aP) aP) R -> redIn a b (addEnd A A0 eqA n ltM (nf A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM ltM_dec os c aP) aP) Q R.
Theorem red_gen_in : forall (a : poly A0 eqA ltM) (aP R Q : list (poly A0 eqA ltM)), ~ BuchAux.zerop A A0 eqA n ltM (nf A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM ltM_dec os a aP) -> OBuch (addEnd A A0 eqA n ltM (nf A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM ltM_dec os a aP) aP) (genPcPf (nf A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM ltM_dec os a aP) aP Q) R -> (forall b c : poly A0 eqA ltM, In b aP -> In c aP -> redIn b c aP (a :: Q) R) -> forall b : poly A0 eqA ltM, In b aP -> ~ BuchAux.zerop A A0 eqA n ltM b -> redIn (nf A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM ltM_dec os a aP) b (addEnd A A0 eqA n ltM (nf A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM ltM_dec os a aP) aP) (genPcPf (nf A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM ltM_dec os a aP) aP Q) R.
Theorem OBuch_Inv : forall aP R Q : list (poly A0 eqA ltM), OBuch aP Q R -> (forall a b : poly A0 eqA ltM, In a aP -> In b aP -> redIn a b aP Q R) -> forall a b : poly A0 eqA ltM, In a R -> In b R -> reds a b R.
Theorem addEnd_incl : forall (a : poly A0 eqA ltM) (L1 L2 : list (poly A0 eqA ltM)), incl (a :: L1) L2 -> incl (addEnd A A0 eqA n ltM a L1) L2.
Theorem genOCp_redln : forall aL1 R : list (poly A0 eqA ltM), incl aL1 R -> forall a b : poly A0 eqA ltM, In a aL1 -> In b aL1 -> redIn a b aL1 (genOCPf aL1) R.
Theorem OBuch_Stable_f : forall P Q : list (poly A0 eqA ltM), OBuch P (genOCPf P) Q -> stable P Q.
Theorem OBuch_Inv_f : forall P Q : list (poly A0 eqA ltM), OBuch P (genOCPf P) Q -> forall a b : poly A0 eqA ltM, In a Q -> In b Q -> reds a b Q.