simpl in |- *.
intros.
red in |- *.
intro i.
simpl in |- *.
apply RING_comp; auto with algebra.
Qed.
(********************************)
(* But that takes quite a while *)
(********************************)
Section necessary_module_stuff.
Let Fn_scmult_fun_map :
forall (F : ring) (n : Nat), F -> MAP (Fn_set F n) (Fn_set F n).
intros F n c.
apply (Build_Map (Ap:=fun v : Fn_set F n => Fn_scmult_fun c v)).
red in |- *.
intros v v' H.
apply Fn_scmult_fun_comp; auto with algebra.
Defined.
Let Fn_scmult_F_to_EndoSet :
forall (F : ring) (n : Nat),
Map (Build_monoid (ring_monoid F)) (Endo_SET (Fn_set F n)).
intros F n.
simpl in |- *.
apply (Build_Map (Ap:=fun c : F => Fn_scmult_fun_map (F:=F) n c)).
red in |- *.
intros c c' H.
simpl in |- *.
red in |- *.
intro v.
generalize
(Fn_scmult_fun_comp (F:=F) (n:=n) (c:=c) (c':=c') (v:=v) (v':=v) H).
simpl in |- *.
generalize (Refl v).
auto.
Defined.
Let Fn_scmult_sgroup_hom :
forall (F : ring) (n : Nat),
sgroup_hom (Build_monoid (ring_monoid F)) (Endo_SET (Fn_set F n)).
intros F n.
apply (Build_sgroup_hom (sgroup_map:=Fn_scmult_F_to_EndoSet F n)).
red in |- *.
simpl in |- *.
red in |- *.
intros c c' v.
simpl in |- *.
red in |- *.
intro i.
simpl in |- *.
apply Trans with ((c rX c') rX Ap v i); auto with algebra.
Defined.
Let Fn_scmult_monoid_hom :
forall (F : ring) (n : Nat),
monoid_hom (Build_monoid (ring_monoid F)) (Endo_SET (Fn_set F n)).
intros.
apply (Build_monoid_hom (monoid_sgroup_hom:=Fn_scmult_sgroup_hom F n)).
red in |- *.
simpl in |- *.
red in |- *.
intro v.
simpl in |- *.
red in |- *.
intro i.
simpl in |- *.
apply Trans with (one rX v i); auto with algebra.
Defined.
Definition Fn_scmult :
forall (F : ring) (n : Nat),
operation (Build_monoid (ring_monoid F)) (Fn_abgp F n).
intros.
simpl in |- *.
exact (Fn_scmult_monoid_hom F n).
Defined.
End necessary_module_stuff.

(* Specifications: *)
Lemma Fn_scmult_l_lin :
forall (F : ring) (n : Nat), op_lin_left (Fn_scmult F n).