(** ** Shifting of a polynomial

  - [pshift p] is the polynomial [p] with one more variable and where each variable [i] is replaced by [i+1].
*)

Definition pshift_pow (xn:pow) : pow :=
  (S (fst xn), snd xn).Definition pshift_mon (m:mon) : mon :=
  (fst m, map pshift_pow (snd m)).Definition pshift (p:pol) : pol :=
  (S (fst p), map pshift_mon (snd p)).

(* Specifications: *)
Lemma parity_pshift : forall p, parity (pshift p) = S (parity p).
Lemma pWF_pshift_mon : forall ar m, pWF_mon ar m -> pWF_mon (S ar) (pshift_mon m).
Lemma pWF_pshift : forall p, pWF p -> pWF (pshift p).
Lemma pshift_pow_correct : forall xn l, peval_pow (pshift_pow xn) l = peval_pow xn (tl l).
Lemma pshift_mon_correct : forall m l, peval_mon (pshift_mon m) l = peval_mon m (tl l).
Lemma pshift_correct : forall p l, peval (pshift p) l = peval p (tl l).