Section PolyOverAdd.ewrite qualifE polyseqC; case: eqP => [->|] /=; rewrite ?andbT ?rpred0.
Qed.pply/polyOverP=> i; rewrite coefD rpredD ?(polyOverP _).
Qed.End PolyOverAdd.

Fact polyOverNr S (addS : zmove=> p /polyOverP Sp; apply/polyOverP=> i; rewrite coefN rpredN.
Qed.Canonical polyOver_opprPred S addS kS := OpprPred (@polyOverNr S addS kS).Context (S : pred_class) (ringS : @semiringPred R S) (kS : keyed_pred ringS).pply/polyOverP=> i; rewrite coefM rpred_sum // => j _; apply: rpredM.
Qed.Canonical polyOver_mulrPred := MulrPred polyOver_mulr_closed.ringS).
Canonical polyOver_smulrPred := SmulrPred (polyOver_mulr_closed kS).ase: eqP => [-> // | _]; rewrite !mul0rn.
Qed.ewrite !(coef_deriv, coefD, coefZ) mulrnDl mulrnAr.
Qed.Canonical deriv_additive := Additive deriv_is_linewrite deriv_mulC IHp !mulrDl -!mulrA !commr_polyX !addrA.
Qed.

Definition derivE := Eval lazy beta delta [morphism_2 morphism_1] in
  (derivZ, deriv_mulC, derivC, derivX, derivMXaddC, derivXsubC, derivM, derivB,
   derivD, derivN, derivXn, derivM, derivMn).

(* Iterated derivative. *)