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.

(* Specifications: *)
Lemma size_polyX : size 'X = 2.
Lemma lead_coefX : lead_coef 'X = 1.
Lemma commr_polyX p : GRing.comm p 'X.
Lemma cons_poly_def p a : cons_poly a p = p * 'X + a%:P.
Lemma poly_ind (K : {poly R} -> Type) : K 0 -> (forall p c, K p -> K (p * 'X + c%:P)) -> (forall p, K p).
Lemma size_XsubC a : size ('X - a%:P) = 2%N.
Lemma size_XaddC b : size ('X + b%:P) = 2.
Lemma lead_coefXsubC a : lead_coef ('X - a%:P) = 1.
Lemma lead_coefMX p : lead_coef (p * 'X) = lead_coef p.
Lemma polyseqXn n : 'X^n = rcons (nseq n 0) 1 :> seq R.
Lemma commr_polyXn p n : GRing.comm p 'X^n.
Lemma lead_coefXn n : lead_coef 'X^n = 1.