(* 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 Group_kernel.
(** Title "Factorisation of a group homomorphism: G -> G/Kerf -> coKerf -> G'." *)
Section Def.
Variable G G' : GROUP.
Variable f : Hom G G'.

Definition surj_group_quo_ker :
  Hom G (group_quo G (Ker f) (kernel_normal (G:=G) (G':=G') (f:=f))) :=
  group_quo_surj (kernel_normal (f:=f)).

Lemma surj_group_quo_ker_surjective : surjective surj_group_quo_ker.
(* Goal: @surjective (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) *)
red in |- *.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (_ : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@coKer_prop G G' f x)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@coKer_prop G G' f y))), @group_quo_eq G (@Ker G G' f) x y *)
(* Goal: @surjective (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) *)
unfold group_quo_eq, subtype_image_equal in |- *.
(* Goal: forall y : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @ex (Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (fun x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @in_part (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) y (group_inverse G x)) (@subsgroup_part (monoid_sgroup (group_monoid G)) (@submonoid_subsgroup (group_monoid G) (@subgroup_submonoid G (@Ker G G' f))))) *)
intros y; exists y; try assumption.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
apply Trans with (Ap (sgroup_map (monoid_sgroup_hom f)) (monoid_unit G));
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) *)
 auto with algebra.
Qed.

Definition inj_coKer_group : Hom (coKer f:GROUP) G'.
(* Goal: Carrier (@Hom GROUP (@group_of_subgroup G' (@coKer G G' f) : Ob GROUP) G') *)
apply (BUILD_HOM_GROUP (G:=coKer f) (G':=G') (ff:=inj_part (coKer f))).
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) *)
auto with algebra.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) *)
auto with algebra.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) *)
auto with algebra.
Defined.

Lemma inj_coKer_group_injective : injective inj_coKer_group.
(* Goal: @injective (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid (@group_of_subgroup G' (@coKer G G' f))) (group_monoid G') inj_coKer_group)) *)
exact (inj_part_injective (E:=G') (A:=coKer f)).
Qed.

Definition bij_group_quo_ker_coKer :
  Hom (group_quo G (Ker f) (kernel_normal (G:=G) (G':=G') (f:=f)):GROUP)
    (coKer f).
apply
 (BUILD_HOM_GROUP
    (G:=group_quo G (Ker f) (kernel_normal (G:=G) (G':=G') (f:=f)))
    (G':=coKer f)
    (ff:=fun x : G =>
         Build_subtype (P:=image (sgroup_map (monoid_sgroup_hom f)) (full G))
           (subtype_elt:=f x) (coKer_prop f x))).
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (_ : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@coKer_prop G G' f x)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@coKer_prop G G' f y))), @group_quo_eq G (@Ker G G' f) x y *)
(* Goal: @surjective (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) *)
unfold group_quo_eq, subtype_image_equal in |- *.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (_ : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) *)
(* Goal: @surjective (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) *)
intros x y H'; try assumption.
apply
 GROUP_reg_right
  with (group_inverse _ (Ap (sgroup_map (monoid_sgroup_hom f)) y));
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) *)
 auto with algebra.
apply
 Trans
  with
    (sgroup_law G' (Ap (sgroup_map (monoid_sgroup_hom f)) x)
       (Ap (sgroup_map (monoid_sgroup_hom f)) (group_inverse G y)));
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) *)
 auto with algebra.
apply
 Trans
  with
    (Ap (sgroup_map (monoid_sgroup_hom f))
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) *)
       (sgroup_law G x (group_inverse G y))); auto with algebra.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) *)
apply Trans with (monoid_unit G'); auto with algebra.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (_ : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@coKer_prop G G' f x)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@coKer_prop G G' f y))), @group_quo_eq G (@Ker G G' f) x y *)
(* Goal: @surjective (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) *)
unfold group_quo_eq, subtype_image_equal in |- *.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
(* Goal: forall x y : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (@sg (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) (fun (x0 x' y0 y' : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (group_inverse G y'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x' y')))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x' y'))) (@normal_com_in G (@Ker G G' f) (@kernel_normal G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x' y'))) x0 (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y') (group_inverse G x'))) x0) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x' y'))) x0) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (group_inverse G y')) (group_inverse G x')) x0) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y') (group_inverse G x'))) x0) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (group_inverse G y')) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G x') x0)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (group_inverse G y')) (group_inverse G x')) x0) (@subsgroup_in_prop (monoid_sgroup (group_monoid G)) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y1 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'2 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y1)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y1)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y1) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y1)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'1 H'2) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (group_inverse G y')) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G x') x0) H'0 (@normal_com_in G (@Ker G G' f) (@kernel_normal G G' f) x0 (group_inverse G x') H')) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (group_inverse G y')) (group_inverse G x') x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y') (group_inverse G x'))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (group_inverse G y')) (group_inverse G x')) x0 x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (group_inverse G y')) (group_inverse G x')) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y') (group_inverse G x'))) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) y0 (group_inverse G y') (group_inverse G x'))) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x' y'))) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y') (group_inverse G x'))) x0 x0 (@SGROUP_comp (monoid_sgroup (group_monoid G)) y0 y0 (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x' y')) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y') (group_inverse G x')) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) y0) (@GROUP_inverse_law G x' y')) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0)))) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) x0 y0 (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x' y')))) (fun x0 y0 z : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) y0 z)) (group_inverse G x0))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) z) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 z)))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) z) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (group_inverse G y0)) (group_inverse G x0))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) y0 z)) (group_inverse G x0))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) z) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (group_inverse G y0)) (group_inverse G x0))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) z (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) z (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0))) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y1 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y1)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y1)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y1) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y1)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H' H'0) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)) (@GROUP_inverse_law G x0 y0)))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) x0 y0 (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@SGROUP_comp (monoid_sgroup (group_monoid G)) y0 y0 (sgroup_law (monoid_sgroup (group_monoid G)) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) y0) (@MONOID_unit_l (group_monoid G) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@SGROUP_comp (monoid_sgroup (group_monoid G)) y0 y0 (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))) (sgroup_law (monoid_sgroup (group_monoid G)) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) y0) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)) (@GROUP_inverse_r G z) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))))))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) z (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))))) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@SGROUP_comp (monoid_sgroup (group_monoid G)) y0 y0 (sgroup_law (monoid_sgroup (group_monoid G)) z (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) y0) (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))) (sgroup_law (monoid_sgroup (group_monoid G)) z (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) z (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))))))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y0 z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))) (sgroup_law (monoid_sgroup (group_monoid G)) y0 (sgroup_law (monoid_sgroup (group_monoid G)) z (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))))) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) y0 z (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0)))))) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) z) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 z)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (group_inverse G y0)) (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y0) (group_inverse G x0))) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) x0 y0 z) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) (group_inverse G z) (group_inverse G y0) (group_inverse G x0)))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) z) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) y0 z)) (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (group_inverse G y0)) (group_inverse G x0)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) z)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) y0 z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (group_inverse G y0)) (group_inverse G x0) (group_inverse G x0) (@GROUP_inverse_law G y0 z) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) (group_inverse G x0))))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) z) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) z) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 z))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) y0 z)) (group_inverse G x0)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0) z)) (@GROUP_inverse_law G x0 (sgroup_law (monoid_sgroup (group_monoid G)) y0 z))))) x y)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) *)
(* Goal: @Equal (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (@monoid_unit (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_on_def (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))))) (@coKer_prop G G' f (@monoid_unit (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_on_def (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))))) (@monoid_unit (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (monoid_on_def (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) *)
intros x y; try assumption.
(* Goal: @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (@sg (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (fun x y : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => sgroup_law (monoid_sgroup (group_monoid G)) x y) (fun (x x' y y' : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x (group_inverse G x'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) y (group_inverse G y'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x' y')))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x' y'))) (@normal_com_in G (@Ker G G' f) (@kernel_normal G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) y (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x' y'))) x (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y') (group_inverse G x'))) x) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x' y'))) x) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y (group_inverse G y')) (group_inverse G x')) x) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y') (group_inverse G x'))) x) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y (group_inverse G y')) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G x') x)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y (group_inverse G y')) (group_inverse G x')) x) (@subsgroup_in_prop (monoid_sgroup (group_monoid G)) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x0 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'2 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'1 H'2) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (sgroup_law (monoid_sgroup (group_monoid G)) y (group_inverse G y')) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G x') x) H'0 (@normal_com_in G (@Ker G G' f) (@kernel_normal G G' f) x (group_inverse G x') H')) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y (group_inverse G y')) (group_inverse G x') x)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y') (group_inverse G x'))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y (group_inverse G y')) (group_inverse G x')) x x (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y (group_inverse G y')) (group_inverse G x')) (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y') (group_inverse G x'))) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) y (group_inverse G y') (group_inverse G x'))) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x' y'))) (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y') (group_inverse G x'))) x x (@SGROUP_comp (monoid_sgroup (group_monoid G)) y y (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x' y')) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y') (group_inverse G x')) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) y) (@GROUP_inverse_law G x' y')) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x)))) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) x y (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x' y')))) (fun x y z : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) y z)) (group_inverse G x))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) z) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y z)))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) z) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (group_inverse G y)) (group_inverse G x))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) y z)) (group_inverse G x))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) z) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (group_inverse G y)) (group_inverse G x))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) z (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))))) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))))) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) z (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))))) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x y))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x y))) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x0 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H' H'0) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G (sgroup_law (monoid_sgroup (group_monoid G)) x y))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) (sgroup_law (monoid_sgroup (group_monoid G)) x y) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x y)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x y)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)) (@GROUP_inverse_law G x y)))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) x y (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x x (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))) (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x) (@SGROUP_comp (monoid_sgroup (group_monoid G)) y y (sgroup_law (monoid_sgroup (group_monoid G)) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) y) (@MONOID_unit_l (group_monoid G) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x x (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))) (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x) (@SGROUP_comp (monoid_sgroup (group_monoid G)) y y (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))) (sgroup_law (monoid_sgroup (group_monoid G)) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) y) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)) (@GROUP_inverse_r G z) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))))))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x x (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) z (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))))) (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x) (@SGROUP_comp (monoid_sgroup (group_monoid G)) y y (sgroup_law (monoid_sgroup (group_monoid G)) z (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) y) (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) z (group_inverse G z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))) (sgroup_law (monoid_sgroup (group_monoid G)) z (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) z (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))))))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x x (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) y z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))) (sgroup_law (monoid_sgroup (group_monoid G)) y (sgroup_law (monoid_sgroup (group_monoid G)) z (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))))) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) y z (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x)))))) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) z) (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y z)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (group_inverse G y)) (group_inverse G x)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G y) (group_inverse G x))) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) x y z) (@SGROUP_assoc (monoid_sgroup (group_monoid G)) (group_inverse G z) (group_inverse G y) (group_inverse G x)))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) z) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) z) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) y z)) (group_inverse G x)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (group_inverse G y)) (group_inverse G x)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) z)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) y z)) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G z) (group_inverse G y)) (group_inverse G x) (group_inverse G x) (@GROUP_inverse_law G y z) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) (group_inverse G x))))) (@SGROUP_comp (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) z) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) z) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) x (sgroup_law (monoid_sgroup (group_monoid G)) y z))) (sgroup_law (monoid_sgroup (group_monoid G)) (group_inverse G (sgroup_law (monoid_sgroup (group_monoid G)) y z)) (group_inverse G x)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) (sgroup_law (monoid_sgroup (group_monoid G)) x y) z)) (@GROUP_inverse_law G x (sgroup_law (monoid_sgroup (group_monoid G)) y z))))) x y)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) *)
(* Goal: @Equal (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (@monoid_unit (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_on_def (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))))) (@coKer_prop G G' f (@monoid_unit (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_on_def (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))))) (@monoid_unit (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (monoid_on_def (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) *)
exact (SGROUP_hom_prop f x y).
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (_ : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@coKer_prop G G' f x)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@coKer_prop G G' f y))), @group_quo_eq G (@Ker G G' f) x y *)
(* Goal: @surjective (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) *)
unfold group_quo_eq, subtype_image_equal in |- *.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) *)
auto with algebra.
Defined.

Lemma bij_group_quo_ker_coKer_bijective : bijective bij_group_quo_ker_coKer.
(* Goal: @surjective (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) *)
red in |- *.
(* Goal: and (@injective (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer))) (@surjective (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer))) *)
split; [ try assumption | idtac ].
(* Goal: @surjective (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) *)
red in |- *.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (_ : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@coKer_prop G G' f x)) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@coKer_prop G G' f y))), @group_quo_eq G (@Ker G G' f) x y *)
(* Goal: @surjective (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) *)
unfold group_quo_eq, subtype_image_equal in |- *.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
(* Goal: forall (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (_ : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) *)
(* Goal: @surjective (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) *)
intros x y H'; try assumption.
apply
 Trans
  with
    (sgroup_law G' (Ap (sgroup_map (monoid_sgroup_hom f)) x)
       (Ap (sgroup_map (monoid_sgroup_hom f)) (group_inverse G y)));
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) *)
 auto with algebra.
apply
 Trans
  with
    (sgroup_law G' (Ap (sgroup_map (monoid_sgroup_hom f)) x)
       (group_inverse _ (Ap (sgroup_map (monoid_sgroup_hom f)) y)));
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) *)
 auto with algebra.
apply
 Trans
  with
    (sgroup_law G' (Ap (sgroup_map (monoid_sgroup_hom f)) x)
       (group_inverse _ (Ap (sgroup_map (monoid_sgroup_hom f)) x)));
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) *)
 auto with algebra.
(* Goal: @surjective (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) *)
red in |- *.
(* Goal: forall y : Carrier (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))), @ex (Carrier (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))))) (fun x : Carrier (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) => @Equal (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) y (@Ap (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) x)) *)
intros y; try assumption.
(* Goal: @ex (Carrier (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))))) (fun x : Carrier (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) => @Equal (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) y (@Ap (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) x)) *)
elim y.
(* Goal: forall (subtype_elt : Carrier (sgroup_set (monoid_sgroup (group_monoid G')))) (subtype_prf : @Pred_fun (sgroup_set (monoid_sgroup (group_monoid G'))) (@subsgroup_part (monoid_sgroup (group_monoid G')) (@submonoid_subsgroup (group_monoid G') (@subgroup_submonoid G' (@coKer G G' f)))) subtype_elt), @ex (Carrier (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))))) (fun x : Carrier (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) => @Equal (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@subsgroup_part (monoid_sgroup (group_monoid G')) (@submonoid_subsgroup (group_monoid G') (@subgroup_submonoid G' (@coKer G G' f)))) subtype_elt subtype_prf) (@Ap (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) x)) *)
intros y' subtype_prf; try assumption.
(* Goal: @ex (Carrier (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))))) (fun x : Carrier (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) => @Equal (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@subsgroup_part (monoid_sgroup (group_monoid G')) (@submonoid_subsgroup (group_monoid G') (@subgroup_submonoid G' (@coKer G G' f)))) y' subtype_prf) (@Ap (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) x)) *)
elim subtype_prf.
(* Goal: forall (x : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (_ : and (@in_part (sgroup_set (monoid_sgroup (group_monoid G))) x (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Equal (sgroup_set (monoid_sgroup (group_monoid G'))) y' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x))), @ex (Carrier (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))))) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) => @Equal (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@subsgroup_part (monoid_sgroup (group_monoid G')) (@submonoid_subsgroup (group_monoid G') (@subgroup_submonoid G' (@coKer G G' f)))) y' subtype_prf) (@Ap (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) x0)) *)
intros x H'; try assumption.
(* Goal: @ex (Carrier (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))))) (fun x : Carrier (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) => @Equal (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@subsgroup_part (monoid_sgroup (group_monoid G')) (@submonoid_subsgroup (group_monoid G') (@subgroup_submonoid G' (@coKer G G' f)))) y' subtype_prf) (@Ap (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) x)) *)
elim H'; intros H'0 H'1; try exact H'0; clear H'.
(* Goal: @ex (Carrier (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))))) (fun x : Carrier (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) => @Equal (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@subsgroup_part (monoid_sgroup (group_monoid G')) (@submonoid_subsgroup (group_monoid G') (@subgroup_submonoid G' (@coKer G G' f)))) y' subtype_prf) (@Ap (sgroup_set (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))))) (sgroup_set (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f))))) (@sgroup_map (monoid_sgroup (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f)))) (monoid_sgroup (group_monoid (@group_of_subgroup G' (@coKer G G' f)))) (@monoid_sgroup_hom (group_monoid (group_quo G (@Ker G G' f) (@kernel_normal G G' f))) (group_monoid (@group_of_subgroup G' (@coKer G G' f))) bij_group_quo_ker_coKer)) x)) *)
exists x; try assumption.
Qed.

Theorem factor_group_hom :
 Equal f
   (comp_hom inj_coKer_group
      (comp_hom bij_group_quo_ker_coKer surj_group_quo_ker)).
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
(* Goal: @Map_eq (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x) (fun (x y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@coKer_prop G G' f x)) (fun (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x) (fun (x y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x (group_inverse G x)) (sgroup_law (monoid_sgroup (group_monoid G)) x (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x (group_inverse G x)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x0 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x x (group_inverse G y) (group_inverse G x) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x) (@GROUP_comp G y x (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x y H'))))))) *)
unfold Map_eq in |- *.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@f2 (@group_of_subgroup G' (@coKer G G' f)) G' (fun x0 : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) => @subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) x0) (fun (x0 y : @subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (H : @subtype_image_equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) (@subtype_elt (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G)))))) x0 y) => H)) (@comp_map_map (sgroup_set (monoid_sgroup (group_monoid G))) (@group_quo_set G (@Ker G G' f) (@kernel_normal G G' f)) (@set_of_subtype_image (sgroup_set (monoid_sgroup (group_monoid G'))) (@part (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))))) (@f2 (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (@group_of_subgroup G' (@coKer G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => @Build_subtype (sgroup_set (monoid_sgroup (group_monoid G'))) (@image (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (full (sgroup_set (monoid_sgroup (group_monoid G))))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@coKer_prop G G' f x0)) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @GROUP_reg_right G' (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (@Refl (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0)) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y)) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)) (@GROUP_hom_prop G G' f y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x0) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (group_inverse G y))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x0 (group_inverse G y))) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) H' (@Sym (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y) (group_inverse G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@GROUP_inverse_r G' (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y)))))))) (@f2 G (group_quo G (@Ker G G' f) (@kernel_normal G G' f)) (fun x0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G))) => x0) (fun (x0 y : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H' : @Equal (sgroup_set (monoid_sgroup (group_monoid G))) x0 y) => @in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G y)) (@in_part_comp_l (sgroup_set (monoid_sgroup (group_monoid G))) (@kernel_part G G' f) (@monoid_unit (monoid_sgroup (group_monoid G)) (monoid_on_def (group_monoid G))) (sgroup_law (monoid_sgroup (group_monoid G)) x0 (group_inverse G x0)) (@submonoid_in_prop (group_monoid G) (@Build_submonoid (group_monoid G) (@Build_subsgroup (monoid_sgroup (group_monoid G)) (@kernel_part G G' f) (fun (x1 y0 : Carrier (sgroup_set (monoid_sgroup (group_monoid G)))) (H'0 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (H'1 : @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) => @Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) (sgroup_law (monoid_sgroup (group_monoid G)) x1 y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_hom_prop (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f) x1 y0) (@Trans (sgroup_set (monoid_sgroup (group_monoid G'))) (sgroup_law (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0)) (sgroup_law (monoid_sgroup (group_monoid G')) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G')))) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@SGROUP_comp (monoid_sgroup (group_monoid G')) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x1) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) y0) (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))) H'0 H'1) (@MONOID_unit_l (group_monoid G') (@monoid_unit (monoid_sgroup (group_monoid G')) (monoid_on_def (group_monoid G'))))))) (@MONOID_hom_prop (group_monoid G) (group_monoid G') f))) (@GROUP_inverse_r G x0)) (@SGROUP_comp (monoid_sgroup (group_monoid G)) x0 x0 (group_inverse G y) (group_inverse G x0) (@Refl (sgroup_set (monoid_sgroup (group_monoid G))) x0) (@GROUP_comp G y x0 (@Sym (sgroup_set (monoid_sgroup (group_monoid G))) x0 y H'))))))) x) *)
simpl in |- *.
(* Goal: forall x : Carrier (sgroup_set (monoid_sgroup (group_monoid G))), @Equal (sgroup_set (monoid_sgroup (group_monoid G'))) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) (@Ap (sgroup_set (monoid_sgroup (group_monoid G))) (sgroup_set (monoid_sgroup (group_monoid G'))) (@sgroup_map (monoid_sgroup (group_monoid G)) (monoid_sgroup (group_monoid G')) (@monoid_sgroup_hom (group_monoid G) (group_monoid G') f)) x) *)
auto with algebra.
Qed.
End Def.
Hint Resolve factor_group_hom bij_group_quo_ker_coKer_bijective
  inj_coKer_group_injective surj_group_quo_ker_surjective: algebra.