(* This program is free software; you can redistribute it and/or      *)
(* modify it under the terms of the GNU Lesser General Public License *)
(* as published by the Free Software Foundation; either version 2.1   *)
(* of the License, or (at your option) any later version.             *)
(*                                                                    *)
(* This program is distributed in the hope that it will be useful,    *)
(* but WITHOUT ANY WARRANTY; without even the implied warranty of     *)
(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      *)
(* GNU General Public License for more details.                       *)
(*                                                                    *)
(* You should have received a copy of the GNU Lesser General Public   *)
(* License along with this program; if not, write to the Free         *)
(* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *)
(* 02110-1301 USA                                                     *)


Set Implicit Arguments.
Unset Strict Implicit.
Require Export Sub_group.
Require Export Module_facts.
Require Export Module_util.
Require Export Monoid_util.
Require Export Group_util.
Section Def.
Variable R : RING.
Variable M : MODULE R.
Section Sub_module.
Variable N : subgroup M.
Hypothesis
  Nop : forall (a : R) (x : M), in_part x N -> in_part (module_mult a x) N.

Let Na : ABELIAN_GROUP.
apply
 (BUILD_ABELIAN_GROUP (E:=N) (genlaw:=sgroup_law N) (e:=
    monoid_unit N) (geninv:=group_inverse_map N)); 
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))))) (_ : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) y)), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) x y *)
 auto with algebra.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) x0 x') (H0 : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) y0 y') => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) *)
unfold subtype_image_equal in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))))) (_ : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) y)), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) x y *)
auto with algebra.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) x0 x') (H0 : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) y0 y') => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) *)
unfold subtype_image_equal in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))))) (_ : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) y)), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) x y *)
auto with algebra.
Defined.

Let endofun : R -> Endo_SET Na.
(* Goal: forall _ : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R))))), Carrier (sgroup_set (monoid_sgroup (Endo_SET (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group Na))))))) *)
intros a; try assumption.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
apply
 (Build_Map (A:=N) (B:=N)
    (Ap:=fun x : N => Build_subtype (Nop a (subtype_prf x)))).
(* Goal: @injective (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) *)
red in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) x0 x') (H0 : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) y0 y') => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) *)
unfold subtype_image_equal in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))))) (_ : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) y)), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) x y *)
auto with algebra.
Defined.

Definition submodule_op : operation (ring_monoid R) Na.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: monoid_hom (@Build_monoid (@Build_sgroup (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R))))) (@ring_mult_sgroup (ring_group R) (ring_on_def R))) (@ring_monoid (ring_group R) (ring_on_def R))) (Endo_SET (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))))) *)
apply (BUILD_HOM_MONOID (G:=ring_monoid R) (G':=Endo_SET N) (ff:=endofun)).
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: @injective (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) *)
intros x y H'; red in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) x0 x') (H0 : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) y0 y') => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) *)
unfold subtype_image_equal in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))))) (_ : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) y)), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) x y *)
auto with algebra.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: @injective (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) *)
intros x y; red in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) x0 x') (H0 : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) y0 y') => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) *)
unfold subtype_image_equal in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@module_mult R M (sgroup_law (@Build_sgroup (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R))))) (@ring_mult_sgroup (ring_group R) (ring_on_def R))) x y) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0)) (@module_mult R M x (@module_mult R M y (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0))) *)
(* Goal: @Equal (sgroup_set (monoid_sgroup (Endo_SET (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup (abelian_group_group (@module_carrier R M)) N))))))) (endofun (@monoid_unit (monoid_sgroup (@Build_monoid (monoid_sgroup (@Build_monoid (@Build_sgroup (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R))))) (@ring_mult_sgroup (ring_group R) (ring_on_def R))) (@ring_mult_monoid (ring_group R) (ring_on_def R)))) (@ring_monoid (ring_group R) (ring_on_def R)))) (monoid_on_def (@Build_monoid (monoid_sgroup (@Build_monoid (@Build_sgroup (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R))))) (@ring_mult_sgroup (ring_group R) (ring_on_def R))) (@ring_mult_monoid (ring_group R) (ring_on_def R)))) (@ring_monoid (ring_group R) (ring_on_def R)))))) (@monoid_unit (monoid_sgroup (Endo_SET (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup (abelian_group_group (@module_carrier R M)) N)))))) (monoid_on_def (Endo_SET (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup (abelian_group_group (@module_carrier R M)) N))))))) *)
intros x0; try assumption.
(* Goal: @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@module_mult R M (sgroup_law (@Build_sgroup (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R))))) (@ring_mult_sgroup (ring_group R) (ring_on_def R))) x y) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0)) (@module_mult R M x (@module_mult R M y (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0))) *)
(* Goal: @Equal (sgroup_set (monoid_sgroup (Endo_SET (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup (abelian_group_group (@module_carrier R M)) N))))))) (endofun (@monoid_unit (monoid_sgroup (@Build_monoid (monoid_sgroup (@Build_monoid (@Build_sgroup (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R))))) (@ring_mult_sgroup (ring_group R) (ring_on_def R))) (@ring_mult_monoid (ring_group R) (ring_on_def R)))) (@ring_monoid (ring_group R) (ring_on_def R)))) (monoid_on_def (@Build_monoid (monoid_sgroup (@Build_monoid (@Build_sgroup (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R))))) (@ring_mult_sgroup (ring_group R) (ring_on_def R))) (@ring_mult_monoid (ring_group R) (ring_on_def R)))) (@ring_monoid (ring_group R) (ring_on_def R)))))) (@monoid_unit (monoid_sgroup (Endo_SET (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup (abelian_group_group (@module_carrier R M)) N)))))) (monoid_on_def (Endo_SET (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup (abelian_group_group (@module_carrier R M)) N))))))) *)
exact (MODULE_assoc x y (subtype_elt x0)).
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: @injective (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) *)
red in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) x0 x') (H0 : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) y0 y') => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) *)
unfold subtype_image_equal in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall x : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@module_mult R M (@monoid_unit (@Build_sgroup (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R))))) (@ring_mult_sgroup (ring_group R) (ring_on_def R))) (@ring_monoid (ring_group R) (ring_on_def R))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) *)
intros x; try assumption.
(* Goal: @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@module_mult R M (@monoid_unit (@Build_sgroup (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R))))) (@ring_mult_sgroup (ring_group R) (ring_on_def R))) (@ring_monoid (ring_group R) (ring_on_def R))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) *)
exact (MODULE_unit_l (subtype_elt x)).
Defined.

Definition submodule_module : module R.
(* Goal: module R *)
apply (Build_module (R:=R) (module_carrier:=Na)).
(* Goal: module_on R Na *)
apply (Build_module_on (R:=R) (M:=Na) (module_op:=submodule_op)).
(* Goal: @injective (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) *)
red in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) x0 x') (H0 : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) y0 y') => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) *)
unfold subtype_image_equal in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))))) (_ : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) y)), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) x y *)
auto with algebra.
(* Goal: @injective (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) *)
red in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) x0 x') (H0 : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) y0 y') => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)))) *)
unfold subtype_image_equal in |- *.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))) (@Nop a (sgroup_law (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@subsgroup_prop (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (sgroup_law (@sg (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))))) (sgroup_law (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (fun (x0 x' y0 y' : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N)))) (H : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x')) (H0 : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y0) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y')) => @SGROUP_comp (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 x' y0 y' H H0) (fun x0 y0 z : @subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) => @SGROUP_assoc (@sgroup_of_subsgroup (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x0 y0 z)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) x))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) (@module_mult R M a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y)) (@Nop a (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y) (@subtype_prf (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) N))) y))))) *)
simpl in |- *.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))))) (_ : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) y)), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) x y *)
auto with algebra.
Defined.
End Sub_module.

Record submodule : Type := 
  {submodule_subgroup : subgroup M;
   submodule_prop :
    forall (a : R) (x : M),
    in_part x submodule_subgroup ->
    in_part (module_mult a x) submodule_subgroup}.

Definition module_of_submodule (N : submodule) :=
  submodule_module (submodule_prop (s:=N)).
End Def.
Coercion module_of_submodule : submodule >-> module.
Coercion submodule_subgroup : submodule >-> subgroup.
Section Injection.
Variable R : RING.
Variable M : MODULE R.
Variable N : submodule M.

Lemma submodule_in_prop :
 forall (a : R) (x : M), in_part x N -> in_part (module_mult a x) N.
(* Goal: forall (a : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (ring_group R)))))) (x : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))))) (_ : @in_part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) x (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) (@submodule_subgroup R M N))))), @in_part (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@module_mult R M a x) (@subsgroup_part (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@submonoid_subsgroup (group_monoid (abelian_group_group (@module_carrier R M))) (@subgroup_submonoid (abelian_group_group (@module_carrier R M)) (@submodule_subgroup R M N)))) *)
intros a x H'; try assumption.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))))) (_ : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) y)), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) x y *)
apply (submodule_prop (R:=R) (M:=M) (s:=N)); auto with algebra.
Qed.

Definition inj_submodule : Hom (N:MODULE R) M.
apply
 (BUILD_HOM_MODULE (R:=R) (Mod:=N:MODULE R) (Mod':=M)
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))))) (_ : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) y)), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) x y *)
    (ff:=fun x : N => subtype_elt x)); auto with algebra.
Defined.

Lemma inj_submodule_injective : injective inj_submodule.
(* Goal: @injective (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) *)
red in |- *.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))))) (_ : @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M))))) (@sgroup_map (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N))))) (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R M)))) (@monoid_sgroup_hom (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))) (group_monoid (abelian_group_group (@module_carrier R M))) (@module_monoid_hom R (@module_of_submodule R M N) M inj_submodule))) y)), @Equal (sgroup_set (monoid_sgroup (group_monoid (abelian_group_group (@module_carrier R (@module_of_submodule R M N)))))) x y *)
auto with algebra.
Qed.
End Injection.
Hint Resolve submodule_in_prop inj_submodule_injective: algebra.
