Instance mkPX_ext : Proper (Pequiv ==> eq ==> Pequiv ==> Pequiv) mkPX.(* Quicker than autorewrite with Esimpl :-) *)
 Ltac Esimpl := try rewrite_db Esimpl; rsimpl; simpl.

(* Specifications: *)
Lemma PaddC_ok c P l : (PaddC P c)@l == P@l + [c].
Lemma PsubC_ok c P l : (PsubC P c)@l == P@l - [c].
Lemma PmulC_aux_ok c P l : (PmulC_aux P c)@l == P@l * [c].
Lemma PmulC_ok c P l : (PmulC P c)@l == P@l * [c].
Lemma Popp_ok P l : (--P)@l == - P@l.
Lemma PaddX_ok P' P k l : (forall P l, (P++P')@l == P@l + P'@l) -> (PaddX Padd P' k P) @ l == P@l + P'@l * (hd l)^k.
Lemma Padd_ok P' P l : (P ++ P')@l == P@l + P'@l.
Lemma Psub_opp P' P : P -- P' === P ++ (--P').
Lemma Psub_ok P' P l : (P -- P')@l == P@l - P'@l.
Lemma PmulI_ok P' : (forall P l, (Pmul P P') @ l == P @ l * P' @ l) -> forall P p l, (PmulI Pmul P' p P) @ l == P @ l * P' @ (jump p l).
Lemma Pmul_ok P P' l : (P**P')@l == P@l * P'@l.
Lemma mkZmon_ok M j l : (mkZmon j M) @@ l == (zmon j M) @@ l.
Lemma zmon_pred_ok M j l : (zmon_pred j M) @@ (tail l) == (zmon j M) @@ l.
Lemma mkVmon_ok M i l : (mkVmon i M)@@l == M@@l * (hd l)^i.