Fact mul_polyA : associative mul_poly.
Fact mul_1poly : left_id 1%:P mul_poly.
Fact mul_poly1 : right_id 1%:P mul_poly.
Fact mul_polyDl : left_distributive mul_poly +%R.
Fact mul_polyDr : right_distributive mul_poly +%R.
Fact poly1_neq0 : 1%:P != 0 :> {poly R}.

(* Specifications: *)
Lemma size_proper_mul p q :
lead_coef p * lead_coef q != 0 -> size (p * q) = (size p + size q).-1.
Lemma lead_coef_proper_mul p q :
let c := lead_coef p * lead_coef q in c != 0 -> lead_coef (p * q) = c.
Lemma coefCM c p i : (c%:P * p)`_i = c * p`_i.
Lemma coefMC c p i : (p * c%:P)`_i = p`_i * c.
Lemma polyC_mul : {morph polyC : a b / a * b}.
Lemma size_Msign p n : size ((-1) ^+ n * p) = size p.
Fact coefp0_multiplicative : multiplicative (coefp 0 : {poly R} -> R).