intros A B.
simpl in |- *.
intros.
red in |- *.
intro i.
simpl in |- *.
apply RING_comp; auto with algebra.
Qed.
Section necessary_module_stuff.
Let func_scmult_fun_map :
forall (A : Setoid) (B : ring), B -> MAP (func_set A B) (func_set A B).
intros A B c.
apply (Build_Map (Ap:=fun v : func_set A B => func_scmult_fun c v)).
red in |- *.
intros v v' H.
apply func_scmult_fun_comp; auto with algebra.
Defined.
Let func_scmult_F_to_EndoSet :
forall (A : Setoid) (B : ring),
Map (Build_monoid (ring_monoid B)) (Endo_SET (func_set A B)).
intros A B.
simpl in |- *.
apply (Build_Map (Ap:=fun c : B => func_scmult_fun_map A (B:=B) c)).
red in |- *.
intros c c' H.
simpl in |- *.
red in |- *.
intro v.
generalize
(func_scmult_fun_comp (A:=A) (B:=B) (c:=c) (c':=c') (v:=v) (v':=v) H).
simpl in |- *.
generalize (Refl v).
intros.
simpl in H0.
apply H1; auto with algebra.
Defined.
Let func_scmult_sgroup_hom :
forall (A : Setoid) (B : ring),
sgroup_hom (Build_monoid (ring_monoid B)) (Endo_SET (func_set A B)).
intros.
apply (Build_sgroup_hom (sgroup_map:=func_scmult_F_to_EndoSet A B)).
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 v i); auto with algebra.
Defined.
Let func_scmult_monoid_hom :
forall (A : Setoid) (B : ring),
monoid_hom (Build_monoid (ring_monoid B)) (Endo_SET (func_set A B)).
intros A B.
apply (Build_monoid_hom (monoid_sgroup_hom:=func_scmult_sgroup_hom A B)).
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 func_scmult :
forall (A : Setoid) (B : ring),
operation (Build_monoid (ring_monoid B)) (func_group A B).
simpl in |- *.
intros.
exact (func_scmult_monoid_hom A B).
Defined.
End necessary_module_stuff.

(* Specifications: *)
Lemma func_scmult_l_lin :
forall (A : Setoid) (B : ring),
op_lin_left (Mod:=func_abgp A B) (func_scmult A B).