Hint Rewrite
Pphi0
Pphi1
mkPinj_ok
mkPX_ok
(morph0 CRmorph)
(morph1 CRmorph)
(morph0 CRmorph)
(morph_add CRmorph)
(morph_mul CRmorph)
(morph_sub CRmorph)
(morph_opp CRmorph)
: Esimpl.
(* 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.
Hint Rewrite PaddC_ok PsubC_ok PmulC_ok Popp_ok : Esimpl.
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 PsubX_ok P' P k l :
(forall P l, (P--P')@l == P@l - P'@l) ->
(PsubX Psub P' k P) @ l == P@l - P'@l * (hd l)^k.
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 Psquare_ok P l : (Psquare P)@l == P@l * P@l.
Lemma Mphi_morph M e1 e2 :
(forall x, e1 x = e2 x) -> M @@ e1 = M @@ e2.
Lemma Mjump_xO_tail M p l :
M @@ (jump (xO p) (tail l)) = M @@ (jump (xI p) l).
Lemma Mjump_pred_double M p l :
M @@ (jump (Pos.pred_double p) (tail l)) = M @@ (jump (xO p) l).
Lemma Mjump_add M i j l :
M @@ (jump (i + j) l) = M @@ (jump j (jump i 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.