Section HornerMx.
Variables (R : comRingType) (n' : nat).
Local Notation n := n'.+1.
Variable A : 'M[R]_n.
Implicit Types p q : {poly R}.
Definition horner_mx := horner_morph (fun a => scalar_mx_comm a A).
Canonical horner_mx_additive := [additive of horner_mx].
Canonical horner_mx_rmorphism := [rmorphism of horner_mx].

(* Specifications: *)
Lemma horner_mx_C a : horner_mx a%:P = a%:M.
Canonical horner_mx_linear := AddLinear horner_mxZ.