Inductive redIn :
poly A0 eqA ltM ->
poly A0 eqA ltM ->
list (poly A0 eqA ltM) ->
list (poly A0 eqA ltM) -> list (poly A0 eqA ltM) -> Prop :=
  | redIn0b :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      redIn b a P Q R -> redIn a b P Q R
  | redIn0 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      In
        (spolyp A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM
           ltM_dec os a b) Q -> redIn a b P Q R
  | redIn1 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      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 b) R -> redIn a b P Q R
  | redIn2 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b c : poly A0 eqA ltM),
      In c P ->
      redIn a c P Q R ->
      redIn b c P Q R ->
      divp A A0 eqA multA divA n ltM
        (ppcp A A0 A1 eqA plusA invA minusA multA divA cs n ltM a b) c ->
      redIn a b P Q R.Inductive redIn :
poly A0 eqA ltM ->
poly A0 eqA ltM ->
list (poly A0 eqA ltM) ->
list (poly A0 eqA ltM) -> list (poly A0 eqA ltM) -> Prop :=
  | redIn0b :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      redIn b a P Q R -> redIn a b P Q R
  | redIn0 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      In
        (spolyp A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM
           ltM_dec os a b) Q -> redIn a b P Q R
  | redIn1 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      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 b) R -> redIn a b P Q R
  | redIn2 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b c : poly A0 eqA ltM),
      In c P ->
      redIn a c P Q R ->
      redIn b c P Q R ->
      divp A A0 eqA multA divA n ltM
        (ppcp A A0 A1 eqA plusA invA minusA multA divA cs n ltM a b) c ->
      redIn a b P Q R.Inductive redIn :
poly A0 eqA ltM ->
poly A0 eqA ltM ->
list (poly A0 eqA ltM) ->
list (poly A0 eqA ltM) -> list (poly A0 eqA ltM) -> Prop :=
  | redIn0b :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      redIn b a P Q R -> redIn a b P Q R
  | redIn0 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      In
        (spolyp A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM
           ltM_dec os a b) Q -> redIn a b P Q R
  | redIn1 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      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 b) R -> redIn a b P Q R
  | redIn2 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b c : poly A0 eqA ltM),
      In c P ->
      redIn a c P Q R ->
      redIn b c P Q R ->
      divp A A0 eqA multA divA n ltM
        (ppcp A A0 A1 eqA plusA invA minusA multA divA cs n ltM a b) c ->
      redIn a b P Q R.Inductive redIn :
poly A0 eqA ltM ->
poly A0 eqA ltM ->
list (poly A0 eqA ltM) ->
list (poly A0 eqA ltM) -> list (poly A0 eqA ltM) -> Prop :=
  | redIn0b :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      redIn b a P Q R -> redIn a b P Q R
  | redIn0 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      In
        (spolyp A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM
           ltM_dec os a b) Q -> redIn a b P Q R
  | redIn1 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      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 b) R -> redIn a b P Q R
  | redIn2 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b c : poly A0 eqA ltM),
      In c P ->
      redIn a c P Q R ->
      redIn b c P Q R ->
      divp A A0 eqA multA divA n ltM
        (ppcp A A0 A1 eqA plusA invA minusA multA divA cs n ltM a b) c ->
      redIn a b P Q R.Inductive redIn :
poly A0 eqA ltM ->
poly A0 eqA ltM ->
list (poly A0 eqA ltM) ->
list (poly A0 eqA ltM) -> list (poly A0 eqA ltM) -> Prop :=
  | redIn0b :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      redIn b a P Q R -> redIn a b P Q R
  | redIn0 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      In
        (spolyp A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM
           ltM_dec os a b) Q -> redIn a b P Q R
  | redIn1 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
      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 b) R -> redIn a b P Q R
  | redIn2 :
      forall (P Q R : list (poly A0 eqA ltM)) (a b c : poly A0 eqA ltM),
      In c P ->
      redIn a c P Q R ->
      redIn b c P Q R ->
      divp A A0 eqA multA divA n ltM
        (ppcp A A0 A1 eqA plusA invA minusA multA divA cs n ltM a b) c ->
      redIn a b P Q R.Remark lem_redIn_nil :
 forall (aP Q R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM),
 In a R -> In b R -> redIn a b aP Q R -> Q = nil -> aP = R -> reds a b R.

(* Specifications: *)
Theorem redIn_nil : forall (R : list (poly A0 eqA ltM)) (a b : poly A0 eqA ltM), In a R -> In b R -> redIn a b R nil R -> reds a b R.