Section Horner.Variables z : L._horner 'X = z.
Proof. exact: horner_morphX. Qed.ewrite -scalerAl mul1r.
Qed.: {rmorphism F -> L}).
Variables (z : L) (p : {poly F}).

Local Notation "p ^iota" := (map_poly (GRing.RNotation "E * F" := (prodv_aspace E F) : aspace_scope.finally. *)
Section MoreFieldOver.Variables (F0 : fieldType) (L : fieldExtType F0) (F : {subfield L}).: Type := L.
Local Notation K_F := (subvs_of F)._F].
Canonical fieldOver_fieldType := [fieldType of L_F].F := vsval a * u.
Local Infix "*F:" := fieldOver_scale (at level 40).u : a *F: (b *F: u) = (a * b) *F: u.
Proof. exact: mulrA. Qed.Proof. by rewrite /(1 *F: u) /= algid1 mul1r. Qed.v : a *F: (u + v) = a *F: u + a *F: v.
Proof. exact: mulrDr. Qed.b : (a + b) *F: v = a *F: v + b *F: v.
Proof. exact: mulrDl. Qed.

Definition fieldOver_lmodMixin :=
  LmodMixin fieldOver_scaleA fieldOver_scale1fieldOver_scaleDr fieldOver_scaleDl.aleE a (u : L) : a *: (u : L_F) = vsval a * u.
Proof. by []. Qed.u v : a *F: (u * v) = (a *F: u) * v.
Proof. exact: mulrA. Qed.Canonical fieldOver_lalgType := LalgType K_F L_F fieldOver_scaleAl.v : a *F: (u * v) = u * (a *F: v).
Proof. exact: mulrCA. Qed.leAr.
Canonical fieldOver_unitAlgType := [unitAlgType K_F of L_F].pply/forall_inP; move/directv_sum_unique: dxSbL => <- //; apply/eqP/v2rK.
Qed.Canonical fieldOver_fieldExtType := [fieldExtType K_F of L_F].