Inductive genPcP :
poly A0 eqA ltM ->
list (poly A0 eqA ltM) ->
list (poly A0 eqA ltM) -> list (poly A0 eqA ltM) -> Prop :=
  | genPcP0 :
      forall (i : poly A0 eqA ltM) (L : list (poly A0 eqA ltM)),
      genPcP i nil L L
  | genPcP1 :
      forall (L L1 L2 L3 : list _) (a i : poly A0 eqA ltM),
      slice i a L1 = Keep L2 ->
      genPcP i L2 L L3 ->
      genPcP i (a :: L1) L
        (addEnd A A0 eqA n ltM
           (spolyp A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM
              ltM_dec os i a) L3)
  | genPcP2 :
      forall (L L1 L2 L3 : list _) (a i : poly A0 eqA ltM),
      slice i a L1 = DontKeep L2 ->
      genPcP i L2 L L3 -> genPcP i (a :: L1) L L3.Inductive genPcP :
poly A0 eqA ltM ->
list (poly A0 eqA ltM) ->
list (poly A0 eqA ltM) -> list (poly A0 eqA ltM) -> Prop :=
  | genPcP0 :
      forall (i : poly A0 eqA ltM) (L : list (poly A0 eqA ltM)),
      genPcP i nil L L
  | genPcP1 :
      forall (L L1 L2 L3 : list _) (a i : poly A0 eqA ltM),
      slice i a L1 = Keep L2 ->
      genPcP i L2 L L3 ->
      genPcP i (a :: L1) L
        (addEnd A A0 eqA n ltM
           (spolyp A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM
              ltM_dec os i a) L3)
  | genPcP2 :
      forall (L L1 L2 L3 : list _) (a i : poly A0 eqA ltM),
      slice i a L1 = DontKeep L2 ->
      genPcP i L2 L L3 -> genPcP i (a :: L1) L L3.Inductive genPcP :
poly A0 eqA ltM ->
list (poly A0 eqA ltM) ->
list (poly A0 eqA ltM) -> list (poly A0 eqA ltM) -> Prop :=
  | genPcP0 :
      forall (i : poly A0 eqA ltM) (L : list (poly A0 eqA ltM)),
      genPcP i nil L L
  | genPcP1 :
      forall (L L1 L2 L3 : list _) (a i : poly A0 eqA ltM),
      slice i a L1 = Keep L2 ->
      genPcP i L2 L L3 ->
      genPcP i (a :: L1) L
        (addEnd A A0 eqA n ltM
           (spolyp A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM
              ltM_dec os i a) L3)
  | genPcP2 :
      forall (L L1 L2 L3 : list _) (a i : poly A0 eqA ltM),
      slice i a L1 = DontKeep L2 ->
      genPcP i L2 L L3 -> genPcP i (a :: L1) L L3.Inductive genPcP :
poly A0 eqA ltM ->
list (poly A0 eqA ltM) ->
list (poly A0 eqA ltM) -> list (poly A0 eqA ltM) -> Prop :=
  | genPcP0 :
      forall (i : poly A0 eqA ltM) (L : list (poly A0 eqA ltM)),
      genPcP i nil L L
  | genPcP1 :
      forall (L L1 L2 L3 : list _) (a i : poly A0 eqA ltM),
      slice i a L1 = Keep L2 ->
      genPcP i L2 L L3 ->
      genPcP i (a :: L1) L
        (addEnd A A0 eqA n ltM
           (spolyp A A0 A1 eqA plusA invA minusA multA divA cs eqA_dec n ltM
              ltM_dec os i a) L3)
  | genPcP2 :
      forall (L L1 L2 L3 : list _) (a i : poly A0 eqA ltM),
      slice i a L1 = DontKeep L2 ->
      genPcP i L2 L L3 -> genPcP i (a :: L1) L L3.

Theorem genPcP_incl : forall (i : poly A0 eqA ltM) (L L1 L2 : list _), genPcP i L1 L L2 -> incl L L2.