Fact polyC_multiplicative : multiplicative polyC.Canonical polyC_rmorphism := AddRMorphism polyC_multiplicative.Fact coefp0_multiplicative : multiplicative (coefp 0 : {poly R} -> R).Canonical coefp0_rmorphism := AddRMorphism coefp0_multiplicative.Fact scale_poly_key : unit.Definition scale_poly := locked_with scale_poly_key scale_poly_def.Fact scale_polyE a p : scale_poly a p = a%:P * p.Fact scale_polyA a b p : scale_poly a (scale_poly b p) = scale_poly (a * b) p.Fact scale_1poly : left_id 1 scale_poly.Fact scale_polyDl p : {morph scale_poly^~ p : a b / a + b}.Fact scale_polyAl a p q : scale_poly a (p * q) = scale_poly a p * q.Definition poly_lmodMixin :=
  LmodMixin scale_polyA scale_1poly scale_polyDr scale_polyDl.Canonical poly_lmodType :=
  Eval hnf in LmodType R {poly R} poly_lmodMixin.Canonical polynomial_lmodType :=
  Eval hnf in LmodType R (polynomial R) poly_lmodMixin.Canonical poly_lalgType :=
  Eval hnf in LalgType R {poly R} scale_polyAl.Canonical polynomial_lalgType :=
  Eval hnf in LalgType R (polynomial R) scale_polyAl.Fact polyX_key : unit.Definition polyX : {poly R} := locked_with polyX_key polyX_def.

Lemma commr_polyXn p n : GRing.comm p 'X^n.