:: On the Lattice of Subgroups of a Group
::  by Janusz Ganczarski
::
:: Received May 23, 1995
:: Copyright (c) 1995-2019 Association of Mizar Users
::           (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland).
:: This code can be distributed under the GNU General Public Licence
:: version 3.0 or later, or the Creative Commons Attribution-ShareAlike
:: License version 3.0 or later, subject to the binding interpretation
:: detailed in file COPYING.interpretation.
:: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these
:: licenses, or see http://www.gnu.org/licenses/gpl.html and
:: http://creativecommons.org/licenses/by-sa/3.0/.

environ

 vocabularies GROUP_1, GROUP_2, STRUCT_0, XBOOLE_0, GROUP_3, SUBSET_1, GROUP_4,
      EQREL_1, TARSKI, GROUP_6, RELAT_1, FUNCT_1, ZFMISC_1, SETFAM_1, RLSUB_2,
      LATTICES, PBOOLE, REWRITE1, LATTICE3, VECTSP_8;
 notations TARSKI, XBOOLE_0, SUBSET_1, FUNCT_1, SETFAM_1, RELAT_1, RELSET_1,
      PARTFUN1, FUNCT_2, BINOP_1, STRUCT_0, ALGSTR_0, LATTICES, GROUP_1,
      GROUP_2, GROUP_3, GROUP_4, GROUP_6, LATTICE3, LATTICE4, VECTSP_8;
 constructors BINOP_1, REALSET1, GROUP_4, GROUP_6, LATTICE3, LATTICE4,
      VECTSP_8, RELSET_1;
 registrations SUBSET_1, FUNCT_1, FUNCT_2, STRUCT_0, LATTICES, GROUP_3,
      GROUP_4, RELSET_1;
 requirements BOOLE, SUBSET;
 definitions TARSKI, LATTICE3, VECTSP_8, XBOOLE_0;
 equalities XBOOLE_0, RELAT_1, GROUP_4;
 expansions TARSKI, LATTICE3, XBOOLE_0;
 theorems TARSKI, FUNCT_1, SUBSET_1, SETFAM_1, FUNCT_2, LATTICES, GROUP_2,
      GROUP_3, GROUP_4, GROUP_6, VECTSP_8, RELAT_1, XBOOLE_0, XBOOLE_1,
      STRUCT_0, LATTICE4;
 schemes FUNCT_2;

begin

theorem Th1:
  for G being Group for H1, H2 being Subgroup of G holds the
  carrier of H1 /\ H2 = (the carrier of H1) /\ the carrier of H2
proof
  let G be Group;
  let H1, H2 be Subgroup of G;
  the carrier of H2 = carr H2 by GROUP_2:def 9;
  then (the carrier of H1) /\ the carrier of H2 = carr H1 /\ carr H2 by
GROUP_2:def 9;
  hence thesis by GROUP_2:def 10;
end;

theorem Th2:
  for G being Group for h being set holds h in Subgroups G iff ex H
  being strict Subgroup of G st h = H
proof
  let G be Group;
  let h be set;
  thus h in Subgroups G implies ex H being strict Subgroup of G st h = H
  proof
    assume h in Subgroups G;
    then h is strict Subgroup of G by GROUP_3:def 1;
    hence thesis;
  end;
  thus thesis by GROUP_3:def 1;
end;

theorem Th3:
  for G being Group for A being Subset of G for H being strict
  Subgroup of G st A = the carrier of H holds gr A = H
proof
  let G be Group;
  let A be Subset of G;
  let H be strict Subgroup of G such that
A1: A = the carrier of H;
  gr carr H = H by GROUP_4:31;
  hence thesis by A1,GROUP_2:def 9;
end;

theorem Th4:
  for G being Group for H1, H2 being Subgroup of G for A being
Subset of G st A = (the carrier of H1) \/ the carrier of H2 holds H1 "\/" H2 =
  gr A
proof
  let G be Group;
  let H1, H2 be Subgroup of G;
A1: the carrier of H2 = carr H2 by GROUP_2:def 9;
  let A be Subset of G;
  assume A = (the carrier of H1) \/ the carrier of H2;
  hence thesis by A1,GROUP_2:def 9;
end;

theorem Th5:
  for G being Group for H1, H2 being Subgroup of G for g being
  Element of G holds g in H1 or g in H2 implies g in H1 "\/" H2
proof
  let G be Group;
  let H1, H2 be Subgroup of G;
  let g be Element of G;
  assume
A1: g in H1 or g in H2;
  now
    per cases by A1;
    suppose
A2:   g in H1;
      the carrier of H1 c= the carrier of G & the carrier of H2 c= the
      carrier of G by GROUP_2:def 5;
      then reconsider
      A = (the carrier of H1) \/ the carrier of H2 as Subset of G
      by XBOOLE_1:8;
      g in the carrier of H1 by A2,STRUCT_0:def 5;
      then g in A by XBOOLE_0:def 3;
      then g in gr A by GROUP_4:29;
      hence thesis by Th4;
    end;
    suppose
A3:   g in H2;
      the carrier of H1 c= the carrier of G & the carrier of H2 c= the
      carrier of G by GROUP_2:def 5;
      then reconsider
      A = (the carrier of H1) \/ the carrier of H2 as Subset of G
      by XBOOLE_1:8;
      g in the carrier of H2 by A3,STRUCT_0:def 5;
      then g in A by XBOOLE_0:def 3;
      then g in gr A by GROUP_4:29;
      hence thesis by Th4;
    end;
  end;
  hence thesis;
end;

theorem
  for G1, G2 being Group for f being Homomorphism of G1, G2 for H1 being
Subgroup of G1 holds ex H2 being strict Subgroup of G2 st the carrier of H2 = f
  .:the carrier of H1
proof
  let G1, G2 be Group;
  let f be Homomorphism of G1, G2;
  let H1 be Subgroup of G1;
  reconsider y = f.1_G1 as Element of G2;
A1: for g being Element of G2 st g in f.:the carrier of H1 holds g" in f.:
  the carrier of H1
  proof
    let g be Element of G2;
    assume g in f.:the carrier of H1;
    then consider x being Element of G1 such that
A2: x in the carrier of H1 and
A3: g = f.x by FUNCT_2:65;
    x in H1 by A2,STRUCT_0:def 5;
    then x" in H1 by GROUP_2:51;
    then
A4: x" in the carrier of H1 by STRUCT_0:def 5;
    f.x" = (f.x)" by GROUP_6:32;
    hence thesis by A3,A4,FUNCT_2:35;
  end;
A5: for g1, g2 being Element of G2 st g1 in f.:the carrier of H1 & g2 in f
  .:the carrier of H1 holds g1 * g2 in f.:the carrier of H1
  proof
    let g1, g2 be Element of G2;
    assume that
A6: g1 in f.:the carrier of H1 and
A7: g2 in f.:the carrier of H1;
    consider x being Element of G1 such that
A8: x in the carrier of H1 and
A9: g1 = f.x by A6,FUNCT_2:65;
    consider y being Element of G1 such that
A10: y in the carrier of H1 and
A11: g2 = f.y by A7,FUNCT_2:65;
A12: y in H1 by A10,STRUCT_0:def 5;
    x in H1 by A8,STRUCT_0:def 5;
    then x * y in H1 by A12,GROUP_2:50;
    then
A13: x * y in the carrier of H1 by STRUCT_0:def 5;
    f.(x * y) = f.x * f.y by GROUP_6:def 6;
    hence thesis by A9,A11,A13,FUNCT_2:35;
  end;
  1_G1 in H1 by GROUP_2:46;
  then dom f = the carrier of G1 & 1_G1 in the carrier of H1 by FUNCT_2:def 1
,STRUCT_0:def 5;
  then y in f.:the carrier of H1 by FUNCT_1:def 6;
  then consider H2 being strict Subgroup of G2 such that
A14: the carrier of H2 = f.:the carrier of H1 by A1,A5,GROUP_2:52;
  take H2;
  thus thesis by A14;
end;

theorem
  for G1, G2 being Group for f being Homomorphism of G1, G2 for H2 being
  Subgroup of G2 ex H1 being strict Subgroup of G1 st the carrier of H1 = f"the
  carrier of H2
proof
  let G1, G2 be Group;
  let f be Homomorphism of G1, G2;
  let H2 be Subgroup of G2;
A1: for g being Element of G1 st g in f"the carrier of H2 holds g" in f"the
  carrier of H2
  proof
    let g be Element of G1;
    assume g in f"the carrier of H2;
    then f.g in the carrier of H2 by FUNCT_2:38;
    then f.g in H2 by STRUCT_0:def 5;
    then (f.g)" in H2 by GROUP_2:51;
    then f.g" in H2 by GROUP_6:32;
    then f.g" in the carrier of H2 by STRUCT_0:def 5;
    hence thesis by FUNCT_2:38;
  end;
A2: for g1, g2 being Element of G1 st g1 in f"the carrier of H2 & g2 in f"
  the carrier of H2 holds g1 * g2 in f"the carrier of H2
  proof
    let g1, g2 be Element of G1;
    assume that
A3: g1 in f"the carrier of H2 and
A4: g2 in f"the carrier of H2;
    f.g2 in the carrier of H2 by A4,FUNCT_2:38;
    then
A5: f.g2 in H2 by STRUCT_0:def 5;
    f.g1 in the carrier of H2 by A3,FUNCT_2:38;
    then f.g1 in H2 by STRUCT_0:def 5;
    then f.g1 * f.g2 in H2 by A5,GROUP_2:50;
    then f.(g1 * g2) in H2 by GROUP_6:def 6;
    then f.(g1 * g2) in the carrier of H2 by STRUCT_0:def 5;
    hence thesis by FUNCT_2:38;
  end;
  1_G2 in H2 by GROUP_2:46;
  then 1_G2 in the carrier of H2 by STRUCT_0:def 5;
  then f.1_G1 in the carrier of H2 by GROUP_6:31;
  then f"the carrier of H2 <> {} by FUNCT_2:38;
  then consider H1 being strict Subgroup of G1 such that
A6: the carrier of H1 = f"the carrier of H2 by A1,A2,GROUP_2:52;
  take H1;
  thus thesis by A6;
end;

theorem
  for G1, G2 being Group for f being Homomorphism of G1, G2 for H1, H2
being Subgroup of G1 for H3, H4 being Subgroup of G2 st the carrier of H3 = f.:
  the carrier of H1 & the carrier of H4 = f.:the carrier of H2 holds H1 is
  Subgroup of H2 implies H3 is Subgroup of H4
proof
  let G1, G2 be Group;
  let f be Homomorphism of G1, G2;
  let H1, H2 be Subgroup of G1;
  let H3, H4 be Subgroup of G2 such that
A1: the carrier of H3 = f.:the carrier of H1 & the carrier of H4 = f.:
  the carrier of H2;
  assume H1 is Subgroup of H2;
  then the carrier of H1 c= the carrier of H2 by GROUP_2:def 5;
  hence thesis by A1,GROUP_2:57,RELAT_1:123;
end;

theorem
  for G1, G2 being Group for f being Homomorphism of G1, G2 for H1, H2
being Subgroup of G2 for H3, H4 being Subgroup of G1 st the carrier of H3 = f"
  the carrier of H1 & the carrier of H4 = f"the carrier of H2 holds H1 is
  Subgroup of H2 implies H3 is Subgroup of H4
proof
  let G1, G2 be Group;
  let f be Homomorphism of G1, G2;
  let H1, H2 be Subgroup of G2;
  let H3, H4 be Subgroup of G1 such that
A1: the carrier of H3 = f"the carrier of H1 & the carrier of H4 = f"the
  carrier of H2;
  assume H1 is Subgroup of H2;
  then the carrier of H1 c= the carrier of H2 by GROUP_2:def 5;
  hence thesis by A1,GROUP_2:57,RELAT_1:143;
end;

theorem
  for G1, G2 being Group for f being Function of the carrier of G1, the
  carrier of G2 for A being Subset of G1 holds f.:A c= f.:the carrier of gr A
proof
  let G1, G2 be Group;
  let f be Function of the carrier of G1, the carrier of G2;
  let A be Subset of G1;
  A c= the carrier of gr A by GROUP_4:def 4;
  hence thesis by RELAT_1:123;
end;

theorem
  for G1, G2 being Group for H1, H2 being Subgroup of G1 for f being
Function of the carrier of G1, the carrier of G2 for A being Subset of G1 st A
= (the carrier of H1) \/ the carrier of H2 holds f.:the carrier of H1 "\/" H2 =
  f.:the carrier of gr A by Th4;

theorem Th12:
  for G being Group for A being Subset of G st A = {1_G} holds gr A = (1).G
proof
  let G be Group;
  let A be Subset of G;
  assume A = {1_G};
  then A = the carrier of (1).G by GROUP_2:def 7;
  hence thesis by Th3;
end;

definition
  let G be Group;
  func carr G -> Function of Subgroups G, bool the carrier of G means
  :Def1:
  for H being strict Subgroup of G holds it.H = the carrier of H;
  existence
  proof
    defpred P [object, object] means
     for h being strict Subgroup of G st h = $1
    holds $2 = the carrier of h;
A1: for e being object st e in Subgroups G
     ex u being object st u in bool the carrier of G & P [e,u]
    proof
      let e be object;
      assume e in Subgroups G;
      then reconsider E = e as strict Subgroup of G by GROUP_3:def 1;
      reconsider u = carr E as Subset of G;
      take u;
      thus thesis by GROUP_2:def 9;
    end;
    consider f being Function of Subgroups G, bool the carrier of G such that
A2: for e being object st e in Subgroups G holds P [e,f.e] from FUNCT_2:
    sch 1 (A1);
    take f;
    let H be strict Subgroup of G;
    H in Subgroups G by GROUP_3:def 1;
    hence thesis by A2;
  end;
  uniqueness
  proof
    let F1, F2 be Function of Subgroups G, bool the carrier of G such that
A3: for H1 being strict Subgroup of G holds F1.H1 = the carrier of H1 and
A4: for H2 being strict Subgroup of G holds F2.H2 = the carrier of H2;
    for h being object st h in Subgroups G holds F1.h = F2.h
    proof
      let h be object;
      assume h in Subgroups G;
      then reconsider H = h as strict Subgroup of G by GROUP_3:def 1;
      thus F1.h = the carrier of H by A3
        .= F2.h by A4;
    end;
    hence thesis by FUNCT_2:12;
  end;
end;

theorem Th13:
  for G being Group for H being strict Subgroup of G for x being
  Element of G holds x in carr G.H iff x in H
proof
  let G be Group;
  let H be strict Subgroup of G;
  let x be Element of G;
  thus x in carr G.H implies x in H
  proof
    assume x in carr G.H;
    then x in the carrier of H by Def1;
    hence thesis by STRUCT_0:def 5;
  end;
  assume
A1: x in H;
  carr G.H = the carrier of H by Def1;
  hence thesis by A1,STRUCT_0:def 5;
end;

theorem
  for G being Group for H being strict Subgroup of G holds 1_G in carr G .H
proof
  let G be Group;
  let H be strict Subgroup of G;
  carr G.H = the carrier of H & 1_H = 1_G by Def1,GROUP_2:44;
  hence thesis;
end;

theorem
  for G being Group for H being strict Subgroup of G holds carr G.H <>
  {} by Def1;

theorem
  for G being Group for H being strict Subgroup of G for g1, g2 being
Element of G holds g1 in carr G.H & g2 in carr G.H implies g1 * g2 in carr G.H
proof
  let G be Group;
  let H be strict Subgroup of G;
  let g1, g2 be Element of G;
  assume g1 in carr G.H & g2 in carr G.H;
  then g1 in H & g2 in H by Th13;
  then g1 * g2 in H by GROUP_2:50;
  hence thesis by Th13;
end;

theorem
  for G being Group for H being strict Subgroup of G for g being Element
  of G holds g in carr G.H implies g" in carr G.H
proof
  let G be Group;
  let H be strict Subgroup of G;
  let g be Element of G;
  assume g in carr G.H;
  then g in H by Th13;
  then g" in H by GROUP_2:51;
  hence thesis by Th13;
end;

theorem Th18:
  for G being Group for H1, H2 being strict Subgroup of G holds
  the carrier of H1 /\ H2 = carr G.H1 /\ carr G.H2
proof
  let G be Group;
  let H1, H2 be strict Subgroup of G;
  carr G.H1 = the carrier of H1 & carr G.H2 = the carrier of H2 by Def1;
  hence thesis by Th1;
end;

theorem
  for G being Group for H1, H2 being strict Subgroup of G holds carr G.(
  H1 /\ H2) = carr G.H1 /\ carr G.H2
proof
  let G be Group;
  let H1, H2 be strict Subgroup of G;
  carr G.H1 /\ carr G.H2 = the carrier of H1 /\ H2 by Th18;
  hence thesis by Def1;
end;

definition
  let G be Group;
  let F be non empty Subset of Subgroups G;
  func meet F -> strict Subgroup of G means
  :Def2:
  the carrier of it = meet ( carr G.:F);
  existence
  proof
    reconsider CG = carr G.:F as Subset-Family of G;
A1: carr G.:F <> {}
    proof
      consider x being Element of Subgroups G such that
A2:   x in F by SUBSET_1:4;
      carr G.x in carr G.:F by A2,FUNCT_2:35;
      hence thesis;
    end;
A3: for g being Element of G st g in meet CG holds g" in meet CG
    proof
      let g be Element of G such that
A4:   g in meet CG;
      for X being set st X in carr G.:F holds g" in X
      proof
        reconsider h = g as Element of G;
        let X be set;
        assume
A5:     X in carr G.:F;
        then
A6:     g in X by A4,SETFAM_1:def 1;
        reconsider X as Subset of G by A5;
        consider X1 being Element of Subgroups G such that
        X1 in F and
A7:     X = carr G.X1 by A5,FUNCT_2:65;
        reconsider X1 as strict Subgroup of G by GROUP_3:def 1;
A8:     X = the carrier of X1 by A7,Def1;
        then h in X1 by A6,STRUCT_0:def 5;
        then h" in X1 by GROUP_2:51;
        hence thesis by A8,STRUCT_0:def 5;
      end;
      hence thesis by A1,SETFAM_1:def 1;
    end;
A9: for g1, g2 being Element of G st g1 in meet (carr G.:F) & g2 in meet
    (carr G.:F) holds g1 * g2 in meet (carr G.:F)
    proof
      let g1, g2 be Element of G such that
A10:  g1 in meet (carr G.:F) and
A11:  g2 in meet (carr G.:F);
      for X being set st X in carr G.:F holds g1 * g2 in X
      proof
        reconsider h1 = g1, h2 = g2 as Element of G;
        let X be set;
        assume
A12:    X in carr G.:F;
        then
A13:    g1 in X by A10,SETFAM_1:def 1;
A14:    g2 in X by A11,A12,SETFAM_1:def 1;
        reconsider X as Subset of G by A12;
        consider X1 being Element of Subgroups G such that
        X1 in F and
A15:    X = carr G.X1 by A12,FUNCT_2:65;
        reconsider X1 as strict Subgroup of G by GROUP_3:def 1;
A16:    X = the carrier of X1 by A15,Def1;
        then
A17:    h2 in X1 by A14,STRUCT_0:def 5;
        h1 in X1 by A13,A16,STRUCT_0:def 5;
        then h1 * h2 in X1 by A17,GROUP_2:50;
        hence thesis by A16,STRUCT_0:def 5;
      end;
      hence thesis by A1,SETFAM_1:def 1;
    end;
    for X being set st X in carr G.:F holds 1_G in X
    proof
      let X be set;
      assume
A18:  X in carr G.:F;
      then reconsider X as Subset of G;
      consider X1 being Element of Subgroups G such that
      X1 in F and
A19:  X = carr G.X1 by A18,FUNCT_2:65;
      reconsider X1 as strict Subgroup of G by GROUP_3:def 1;
A20:  1_G in X1 by GROUP_2:46;
      X = the carrier of X1 by A19,Def1;
      hence thesis by A20,STRUCT_0:def 5;
    end;
    then meet (carr G.:F) <> {} by A1,SETFAM_1:def 1;
    hence thesis by A9,A3,GROUP_2:52;
  end;
  uniqueness by GROUP_2:59;
end;

theorem
  for G being Group for F being non empty Subset of Subgroups G holds
  (1).G in F implies meet F = (1).G
proof
  let G be Group;
  let F be non empty Subset of Subgroups G;
  assume
A1: (1).G in F;
  reconsider 1G = (1).G as Element of Subgroups G by GROUP_3:def 1;
  carr G.1G = the carrier of (1).G by Def1;
  then the carrier of (1).G in carr G.:F by A1,FUNCT_2:35;
  then {1_G} in carr G.:F by GROUP_2:def 7;
  then meet (carr G.:F) c= {1_G} by SETFAM_1:3;
  then
A2: the carrier of meet F c= {1_G} by Def2;
  (1).G is Subgroup of meet F by GROUP_2:65;
  then the carrier of (1).G c= the carrier of meet F by GROUP_2:def 5;
  then {1_G} c= the carrier of meet F by GROUP_2:def 7;
  then the carrier of meet F = {1_G} by A2;
  hence thesis by GROUP_2:def 7;
end;

theorem
  for G being Group for h being Element of Subgroups G for F being non
  empty Subset of Subgroups G st F = { h } holds meet F = h
proof
  let G be Group;
  let h be Element of Subgroups G;
  let F be non empty Subset of Subgroups G such that
A1: F = { h };
  reconsider H = h as strict Subgroup of G by GROUP_3:def 1;
  h in Subgroups G;
  then h in dom carr G by FUNCT_2:def 1;
  then meet Im(carr G,h) = meet {carr G.h} by FUNCT_1:59;
  then
A2: meet Im(carr G,h) = carr G.h by SETFAM_1:10;
  the carrier of meet F = meet (carr G.:F) by Def2;
  then the carrier of meet F = the carrier of H by A1,A2,Def1;
  hence thesis by GROUP_2:59;
end;

theorem Th22:
  for G being Group for H1, H2 being Subgroup of G for h1, h2
  being Element of lattice G st h1 = H1 & h2 = H2 holds h1 "\/" h2 = H1 "\/" H2
proof
  let G be Group;
  let H1, H2 be Subgroup of G;
  let h1, h2 be Element of lattice G;
A1: h1 "\/" h2 = SubJoin G.(h1,h2) by LATTICES:def 1;
  assume
A2: h1 = H1 & h2 = H2;
  then H1 is strict & H2 is strict by GROUP_3:def 1;
  hence thesis by A2,A1,GROUP_4:def 10;
end;

theorem Th23:
  for G being Group for H1, H2 being Subgroup of G for h1, h2
  being Element of lattice G st h1 = H1 & h2 = H2 holds h1 "/\" h2 = H1 /\ H2
proof
  let G be Group;
  let H1, H2 be Subgroup of G;
  let h1, h2 be Element of lattice G;
A1: h1 "/\" h2 = SubMeet G.(h1,h2) by LATTICES:def 2;
  assume
A2: h1 = H1 & h2 = H2;
  then H1 is strict & H2 is strict by GROUP_3:def 1;
  hence thesis by A2,A1,GROUP_4:def 11;
end;

theorem
  for G being Group for p being Element of lattice G for H being
  Subgroup of G st p = H holds H is strict Subgroup of G by GROUP_3:def 1;

theorem Th25:
  for G being Group for H1, H2 being Subgroup of G for p, q being
  Element of lattice G st p = H1 & q = H2 holds p [= q iff the carrier of H1 c=
  the carrier of H2
proof
  let G be Group;
  let H1, H2 be Subgroup of G;
  let p, q be Element of lattice G such that
A1: p = H1 and
A2: q = H2;
A3: H1 is strict Subgroup of G by A1,GROUP_3:def 1;
A4: H2 is strict Subgroup of G by A2,GROUP_3:def 1;
  thus p [= q implies the carrier of H1 c= the carrier of H2
  proof
    assume p [= q;
    then
A5: p "/\" q = p by LATTICES:4;
    p "/\" q = (the L_meet of lattice G).(p,q) by LATTICES:def 2
      .= H1 /\ H2 by A1,A2,A3,A4,GROUP_4:def 11;
    then
    (the carrier of H1) /\ the carrier of H2 = the carrier of H1 by A1,A5,Th1;
    hence thesis by XBOOLE_1:17;
  end;
  thus the carrier of H1 c= the carrier of H2 implies p [= q
  proof
    assume the carrier of H1 c= the carrier of H2;
    then H1 is Subgroup of H2 by GROUP_2:57;
    then
A6: H1 /\ H2 = H1 by A3,GROUP_2:89;
    H1 /\ H2 = (the L_meet of lattice G).(p,q) by A1,A2,A3,A4,GROUP_4:def 11
      .= p "/\" q by LATTICES:def 2;
    hence thesis by A1,A6,LATTICES:4;
  end;
end;

theorem
  for G being Group for H1, H2 being Subgroup of G for p, q being
  Element of lattice G st p = H1 & q = H2 holds p [= q iff H1 is Subgroup of H2
proof
  let G be Group;
  let H1, H2 be Subgroup of G;
  let p, q be Element of lattice G;
  assume that
A1: p = H1 and
A2: q = H2;
  thus p [= q implies H1 is Subgroup of H2
  proof
    assume p [= q;
    then the carrier of H1 c= the carrier of H2 by A1,A2,Th25;
    hence thesis by GROUP_2:57;
  end;
A3: H1 is strict Subgroup of G by A1,GROUP_3:def 1;
A4: H2 is strict Subgroup of G by A2,GROUP_3:def 1;
  thus H1 is Subgroup of H2 implies p [= q
  proof
    assume H1 is Subgroup of H2;
    then
A5: H1 /\ H2 = H1 by A3,GROUP_2:89;
    H1 /\ H2 = (the L_meet of lattice G).(p,q) by A1,A2,A3,A4,GROUP_4:def 11
      .= p "/\" q by LATTICES:def 2;
    hence thesis by A1,A5,LATTICES:4;
  end;
end;

theorem
  for G being Group holds lattice G is complete
proof
  let G be Group;
  let Y be Subset of lattice G;
  per cases;
  suppose
A1: Y = {};
    take Top lattice G;
    thus Top lattice G is_less_than Y
    by A1;
    let b be Element of lattice G;
    assume b is_less_than Y;
    thus thesis by LATTICES:19;
  end;
  suppose
    Y <> {};
    then reconsider X = Y as non empty Subset of Subgroups G;
    reconsider p = meet X as Element of lattice G by GROUP_3:def 1;
    take p;
    set x = the Element of X;
    thus p is_less_than Y
    proof
      let q be Element of lattice G;
      reconsider H = q as strict Subgroup of G by GROUP_3:def 1;
      reconsider h = q as Element of Subgroups G;
      assume
A2:   q in Y;
      carr G.h = the carrier of H by Def1;
      then meet (carr G.:X) c= the carrier of H by A2,FUNCT_2:35,SETFAM_1:3;
      then the carrier of meet X c= the carrier of H by Def2;
      hence thesis by Th25;
    end;
    let r be Element of lattice G;
    reconsider H = r as Subgroup of G by GROUP_3:def 1;
    assume
A3: r is_less_than Y;
A4: for Z1 being set st Z1 in carr G.:X holds the carrier of H c= Z1
    proof
      let Z1 be set;
      assume
A5:   Z1 in carr G.:X;
      then reconsider Z2 = Z1 as Subset of G;
      consider z1 being Element of Subgroups G such that
A6:   z1 in X & Z2 = carr G.z1 by A5,FUNCT_2:65;
      reconsider z1 as Element of lattice G;
      reconsider z3 = z1 as strict Subgroup of G by GROUP_3:def 1;
      Z1 = the carrier of z3 & r [= z1 by A3,A6,Def1;
      hence thesis by Th25;
    end;
    carr G.x in carr G.:X by FUNCT_2:35;
    then the carrier of H c= meet (carr G.:X) by A4,SETFAM_1:5;
    then the carrier of H c= the carrier of meet X by Def2;
    hence thesis by Th25;
  end;
end;

definition
  let G1, G2 be Group;
  let f be Function of the carrier of G1, the carrier of G2;
  func FuncLatt f -> Function of the carrier of lattice G1, the carrier of
  lattice G2 means
  :Def3:
  for H being strict Subgroup of G1, A being Subset of G2
  st A = f.:the carrier of H holds it.H = gr A;
  existence
  proof
    defpred P [object, object] means
for H being strict Subgroup of G1 st H = $1 for
A being Subset of G2 st A = f.:the carrier of H holds $2 = gr (f.:the carrier
    of H);
A1: for e being object st e in the carrier of lattice G1
     ex u being object st u in the carrier of lattice G2 & P [e,u]
    proof
      let e be object;
      assume e in the carrier of lattice G1;
      then reconsider E = e as strict Subgroup of G1 by GROUP_3:def 1;
      reconsider u = gr (f.:the carrier of E) as strict Subgroup of G2;
      reconsider u as Element of lattice G2 by GROUP_3:def 1;
      take u;
      thus thesis;
    end;
    consider f1 being Function of the carrier of lattice G1, the carrier of
    lattice G2 such that
A2: for e being object st e in the carrier of lattice G1 holds P [e,f1.e]
    from FUNCT_2:sch 1 (A1);
    take f1;
    let H be strict Subgroup of G1;
    let A be Subset of G2;
A3: H in the carrier of lattice G1 by GROUP_3:def 1;
    assume A = f.:the carrier of H;
    hence thesis by A2,A3;
  end;
  uniqueness
  proof
    let f1, f2 be Function of the carrier of lattice G1, the carrier of
    lattice G2 such that
A4: for H being strict Subgroup of G1, A being Subset of G2 st A = f.:
    the carrier of H holds f1.H = gr A and
A5: for H being strict Subgroup of G1, A being Subset of G2 st A = f.:
    the carrier of H holds f2.H = gr A;
    for h being object st h in the carrier of lattice G1 holds f1.h = f2.h
    proof
      let h be object;
      assume h in the carrier of lattice G1;
      then reconsider H = h as strict Subgroup of G1 by GROUP_3:def 1;
      thus f1.h = gr (f.:the carrier of H) by A4
        .= f2.h by A5;
    end;
    hence thesis by FUNCT_2:12;
  end;
end;

theorem
  for G being Group holds FuncLatt id the carrier of G = id the carrier
  of lattice G
proof
  let G be Group;
  set f = id the carrier of G;
A1: for x being object st x in the carrier of lattice G
    holds (FuncLatt f).x = x
  proof
    let x be object;
    assume x in the carrier of lattice G;
    then reconsider x as strict Subgroup of G by GROUP_3:def 1;
A2: the carrier of x c= f.:the carrier of x
    proof
      let z be object;
      assume
A3:   z in the carrier of x;
      the carrier of x c= the carrier of G by GROUP_2:def 5;
      then reconsider z as Element of G by A3;
      f.z = z;
      hence thesis by A3,FUNCT_2:35;
    end;
A4: f.:the carrier of x c= the carrier of x
    proof
      let z be object;
      assume
A5:   z in f.:the carrier of x;
      then reconsider z as Element of G;
      ex Z being Element of G st Z in the carrier of x & z = f. Z by A5,
FUNCT_2:65;
      hence thesis;
    end;
    then reconsider X = the carrier of x as Subset of G by A2,XBOOLE_0:def 10;
    f.:the carrier of x = the carrier of x by A4,A2;
    then (FuncLatt f).x = gr X by Def3;
    hence thesis by Th3;
  end;
  dom FuncLatt f = the carrier of lattice G by FUNCT_2:def 1;
  hence thesis by A1,FUNCT_1:17;
end;

theorem
  for G1, G2 being Group for f being Homomorphism of G1, G2 st f is
  one-to-one holds FuncLatt f is one-to-one
proof
  let G1, G2 be Group;
  let f be Homomorphism of G1, G2 such that
A1: f is one-to-one;
  for x1, x2 being object st x1 in dom FuncLatt f & x2 in dom FuncLatt f & (
  FuncLatt f).x1 = (FuncLatt f).x2 holds x1 = x2
  proof
    reconsider y = f.(1_G1) as Element of G2;
    let x1, x2 be object;
    assume that
A2: x1 in dom FuncLatt f & x2 in dom FuncLatt f and
A3: (FuncLatt f).x1 = (FuncLatt f).x2;
    reconsider x1, x2 as strict Subgroup of G1 by A2,GROUP_3:def 1;
    reconsider A1 = f.:the carrier of x1, A2 = f.:the carrier of x2 as Subset
    of G2;
A4: for g being Element of G2 st g in f.:the carrier of x1 holds g" in f
    .:the carrier of x1
    proof
      let g be Element of G2;
      assume g in f.:the carrier of x1;
      then consider x being Element of G1 such that
A5:   x in the carrier of x1 and
A6:   g = f.x by FUNCT_2:65;
      x in x1 by A5,STRUCT_0:def 5;
      then x" in x1 by GROUP_2:51;
      then
A7:   x" in the carrier of x1 by STRUCT_0:def 5;
      f.x" = (f.x)" by GROUP_6:32;
      hence thesis by A6,A7,FUNCT_2:35;
    end;
A8: for g1, g2 being Element of G2 st g1 in f.:the carrier of x1 & g2 in
    f.:the carrier of x1 holds g1 * g2 in f.:the carrier of x1
    proof
      let g1, g2 be Element of G2;
      assume that
A9:   g1 in f.:the carrier of x1 and
A10:  g2 in f.:the carrier of x1;
      consider x being Element of G1 such that
A11:  x in the carrier of x1 and
A12:  g1 = f.x by A9,FUNCT_2:65;
      consider y being Element of G1 such that
A13:  y in the carrier of x1 and
A14:  g2 = f.y by A10,FUNCT_2:65;
A15:  y in x1 by A13,STRUCT_0:def 5;
      x in x1 by A11,STRUCT_0:def 5;
      then x * y in x1 by A15,GROUP_2:50;
      then
A16:  x * y in the carrier of x1 by STRUCT_0:def 5;
      f.(x * y) = f.x * f.y by GROUP_6:def 6;
      hence thesis by A12,A14,A16,FUNCT_2:35;
    end;
A17: for g being Element of G2 st g in f.:the carrier of x2 holds g" in f
    .:the carrier of x2
    proof
      let g be Element of G2;
      assume g in f.:the carrier of x2;
      then consider x being Element of G1 such that
A18:  x in the carrier of x2 and
A19:  g = f.x by FUNCT_2:65;
      x in x2 by A18,STRUCT_0:def 5;
      then x" in x2 by GROUP_2:51;
      then
A20:  x" in the carrier of x2 by STRUCT_0:def 5;
      f.x" = (f.x)" by GROUP_6:32;
      hence thesis by A19,A20,FUNCT_2:35;
    end;
A21: dom f = the carrier of G1 by FUNCT_2:def 1;
A22: for g1, g2 being Element of G2 st g1 in f.:the carrier of x2 & g2 in
    f.:the carrier of x2 holds g1 * g2 in f.:the carrier of x2
    proof
      let g1, g2 be Element of G2;
      assume that
A23:  g1 in f.:the carrier of x2 and
A24:  g2 in f.:the carrier of x2;
      consider x being Element of G1 such that
A25:  x in the carrier of x2 and
A26:  g1 = f.x by A23,FUNCT_2:65;
      consider y being Element of G1 such that
A27:  y in the carrier of x2 and
A28:  g2 = f.y by A24,FUNCT_2:65;
A29:  y in x2 by A27,STRUCT_0:def 5;
      x in x2 by A25,STRUCT_0:def 5;
      then x * y in x2 by A29,GROUP_2:50;
      then
A30:  x * y in the carrier of x2 by STRUCT_0:def 5;
      f.(x * y) = f.x * f.y by GROUP_6:def 6;
      hence thesis by A26,A28,A30,FUNCT_2:35;
    end;
    1_G1 in x2 by GROUP_2:46;
    then
A31: 1_G1 in the carrier of x2 by STRUCT_0:def 5;
A32: (FuncLatt f).x1 = gr A1 & (FuncLatt f).x2 = gr A2 by Def3;
    ex y being Element of G2 st y = f.(1_G1);
    then f.:the carrier of x2 <> {} by A21,A31,FUNCT_1:def 6;
    then consider B2 being strict Subgroup of G2 such that
A33: the carrier of B2 = f.:the carrier of x2 by A17,A22,GROUP_2:52;
    1_G1 in x1 by GROUP_2:46;
    then 1_G1 in the carrier of x1 by STRUCT_0:def 5;
    then y in f.:the carrier of x1 by A21,FUNCT_1:def 6;
    then
A34: ex B1 being strict Subgroup of G2 st the carrier of B1 = f .:the
    carrier of x1 by A4,A8,GROUP_2:52;
    gr (f.:the carrier of x2) = B2 by A33,Th3;
    then
A35: f.:the carrier of x1 = f.:the carrier of x2 by A3,A32,A34,A33,Th3;
    the carrier of x2 c= dom f by A21,GROUP_2:def 5;
    then
A36: the carrier of x2 c= the carrier of x1 by A1,A35,FUNCT_1:87;
    the carrier of x1 c= dom f by A21,GROUP_2:def 5;
    then the carrier of x1 c= the carrier of x2 by A1,A35,FUNCT_1:87;
    then the carrier of x1 = the carrier of x2 by A36;
    hence thesis by GROUP_2:59;
  end;
  hence thesis by FUNCT_1:def 4;
end;

theorem
  for G1, G2 being Group for f being Homomorphism of G1, G2 holds (
  FuncLatt f).(1).G1 = (1).G2
proof
  let G1, G2 be Group;
  let f be Homomorphism of G1, G2;
  consider A being Subset of G2 such that
A1: A = f.:the carrier of (1).G1;
A2: A = f.:{1_G1} by A1,GROUP_2:def 7;
A3: 1_G1 in {1_G1} & 1_G2 = f.1_G1 by GROUP_6:31,TARSKI:def 1;
  for x being object holds x in A iff x = 1_G2
  proof
    let x be object;
    thus x in A implies x = 1_G2
    proof
      assume
A4:   x in A;
      then reconsider x as Element of G2;
      consider y being Element of G1 such that
A5:   y in {1_G1} and
A6:   x = f.y by A2,A4,FUNCT_2:65;
      y = 1_G1 by A5,TARSKI:def 1;
      hence thesis by A6,GROUP_6:31;
    end;
    thus thesis by A2,A3,FUNCT_2:35;
  end;
  then A = {1_G2} by TARSKI:def 1;
  then gr A = (1).G2 by Th12;
  hence thesis by A1,Def3;
end;

theorem Th31:
  for G1, G2 being Group for f being Homomorphism of G1, G2 st f
  is one-to-one holds FuncLatt f is Semilattice-Homomorphism of lattice G1,
  lattice G2
proof
  let G1, G2 be Group;
  let f be Homomorphism of G1, G2 such that
A1: f is one-to-one;
  for a, b being Element of lattice G1 holds (FuncLatt f).(a "/\" b) = (
  FuncLatt f).a "/\" (FuncLatt f).b
  proof
    let a, b be Element of lattice G1;
    consider A1 being strict Subgroup of G1 such that
A2: A1 = a by Th2;
    consider B1 being strict Subgroup of G1 such that
A3: B1 = b by Th2;
    thus thesis
    proof
A4:   for g1, g2 being Element of G2 st g1 in f.:the carrier of B1 & g2
      in f.:the carrier of B1 holds g1 * g2 in f.:the carrier of B1
      proof
        let g1, g2 be Element of G2;
        assume that
A5:     g1 in f.:the carrier of B1 and
A6:     g2 in f.:the carrier of B1;
        consider x being Element of G1 such that
A7:     x in the carrier of B1 and
A8:     g1 = f.x by A5,FUNCT_2:65;
        consider y being Element of G1 such that
A9:     y in the carrier of B1 and
A10:    g2 = f.y by A6,FUNCT_2:65;
A11:    y in B1 by A9,STRUCT_0:def 5;
        x in B1 by A7,STRUCT_0:def 5;
        then x * y in B1 by A11,GROUP_2:50;
        then
A12:    x * y in the carrier of B1 by STRUCT_0:def 5;
        f.(x * y) = f.x * f.y by GROUP_6:def 6;
        hence thesis by A8,A10,A12,FUNCT_2:35;
      end;
A13:  for g being Element of G2 st g in f.:the carrier of B1 holds g" in
      f.:the carrier of B1
      proof
        let g be Element of G2;
        assume g in f.:the carrier of B1;
        then consider x being Element of G1 such that
A14:    x in the carrier of B1 and
A15:    g = f.x by FUNCT_2:65;
        x in B1 by A14,STRUCT_0:def 5;
        then x" in B1 by GROUP_2:51;
        then
A16:    x" in the carrier of B1 by STRUCT_0:def 5;
        f.x" = (f.x)" by GROUP_6:32;
        hence thesis by A15,A16,FUNCT_2:35;
      end;
A17:  for g being Element of G2 st g in f.:the carrier of A1 holds g" in
      f.:the carrier of A1
      proof
        let g be Element of G2;
        assume g in f.:the carrier of A1;
        then consider x being Element of G1 such that
A18:    x in the carrier of A1 and
A19:    g = f.x by FUNCT_2:65;
        x in A1 by A18,STRUCT_0:def 5;
        then x" in A1 by GROUP_2:51;
        then
A20:    x" in the carrier of A1 by STRUCT_0:def 5;
        f.x" = (f.x)" by GROUP_6:32;
        hence thesis by A19,A20,FUNCT_2:35;
      end;
      1_G1 in A1 by GROUP_2:46;
      then
A21:  1_G1 in the carrier of A1 by STRUCT_0:def 5;
A22:  (FuncLatt f).(A1 /\ B1) = gr (f.:the carrier of A1 /\ B1) by Def3;
      consider C1 being strict Subgroup of G1 such that
A23:  C1 = A1 /\ B1;
A24:  for g1, g2 being Element of G2 st g1 in f.:the carrier of A1 & g2
      in f.:the carrier of A1 holds g1 * g2 in f.:the carrier of A1
      proof
        let g1, g2 be Element of G2;
        assume that
A25:    g1 in f.:the carrier of A1 and
A26:    g2 in f.:the carrier of A1;
        consider x being Element of G1 such that
A27:    x in the carrier of A1 and
A28:    g1 = f.x by A25,FUNCT_2:65;
        consider y being Element of G1 such that
A29:    y in the carrier of A1 and
A30:    g2 = f.y by A26,FUNCT_2:65;
A31:    y in A1 by A29,STRUCT_0:def 5;
        x in A1 by A27,STRUCT_0:def 5;
        then x * y in A1 by A31,GROUP_2:50;
        then
A32:    x * y in the carrier of A1 by STRUCT_0:def 5;
        f.(x * y) = f.x * f.y by GROUP_6:def 6;
        hence thesis by A28,A30,A32,FUNCT_2:35;
      end;
      1_G1 in B1 by GROUP_2:46;
      then
A33:  1_G1 in the carrier of B1 by STRUCT_0:def 5;
A34:  (FuncLatt f).a = gr (f.:the carrier of A1) & (FuncLatt f).b = gr (f
      .:the carrier of B1) by A2,A3,Def3;
A35:  dom f = the carrier of G1 by FUNCT_2:def 1;
A36:  for g1, g2 being Element of G2 st g1 in f.:the carrier of C1 & g2
      in f.:the carrier of C1 holds g1 * g2 in f.:the carrier of C1
      proof
        let g1, g2 be Element of G2;
        assume that
A37:    g1 in f.:the carrier of C1 and
A38:    g2 in f.:the carrier of C1;
        consider x being Element of G1 such that
A39:    x in the carrier of C1 and
A40:    g1 = f.x by A37,FUNCT_2:65;
        consider y being Element of G1 such that
A41:    y in the carrier of C1 and
A42:    g2 = f.y by A38,FUNCT_2:65;
A43:    y in C1 by A41,STRUCT_0:def 5;
        x in C1 by A39,STRUCT_0:def 5;
        then x * y in C1 by A43,GROUP_2:50;
        then
A44:    x * y in the carrier of C1 by STRUCT_0:def 5;
        f.(x * y) = f.x * f.y by GROUP_6:def 6;
        hence thesis by A40,A42,A44,FUNCT_2:35;
      end;
A45:  for g being Element of G2 st g in f.:the carrier of C1 holds g" in
      f.:the carrier of C1
      proof
        let g be Element of G2;
        assume g in f.:the carrier of C1;
        then consider x being Element of G1 such that
A46:    x in the carrier of C1 and
A47:    g = f.x by FUNCT_2:65;
        x in C1 by A46,STRUCT_0:def 5;
        then x" in C1 by GROUP_2:51;
        then
A48:    x" in the carrier of C1 by STRUCT_0:def 5;
        f.x" = (f.x)" by GROUP_6:32;
        hence thesis by A47,A48,FUNCT_2:35;
      end;
      1_G1 in C1 by GROUP_2:46;
      then
A49:  1_G1 in the carrier of C1 by STRUCT_0:def 5;
      ex y2 being Element of G2 st y2 = f.1_G1;
      then f.:the carrier of C1 <> {} by A35,A49,FUNCT_1:def 6;
      then consider C3 being strict Subgroup of G2 such that
A50:  the carrier of C3 = f.:the carrier of C1 by A45,A36,GROUP_2:52;
      ex y1 being Element of G2 st y1 = f.1_G1;
      then f.:the carrier of B1 <> {} by A35,A33,FUNCT_1:def 6;
      then consider B3 being strict Subgroup of G2 such that
A51:  the carrier of B3 = f.:the carrier of B1 by A13,A4,GROUP_2:52;
      ex y being Element of G2 st y = f.1_G1;
      then f.:the carrier of A1 <> {} by A35,A21,FUNCT_1:def 6;
      then consider A3 being strict Subgroup of G2 such that
A52:  the carrier of A3 = f.:the carrier of A1 by A17,A24,GROUP_2:52;
A53:  the carrier of C3 c= the carrier of A3 /\ B3
      proof
A54:    f.:the carrier of A1 /\ B1 c= f.:the carrier of B1
        proof
          let x be object;
          assume
A55:      x in f.:the carrier of A1 /\ B1;
          then reconsider x as Element of G2;
          consider y being Element of G1 such that
A56:      y in the carrier of A1 /\ B1 and
A57:      x = f.y by A55,FUNCT_2:65;
          y in (the carrier of A1) /\ the carrier of B1 by A56,Th1;
          then y in the carrier of B1 by XBOOLE_0:def 4;
          hence thesis by A57,FUNCT_2:35;
        end;
A58:    f.:the carrier of A1 /\ B1 c= f.:the carrier of A1
        proof
          let x be object;
          assume
A59:      x in f.:the carrier of A1 /\ B1;
          then reconsider x as Element of G2;
          consider y being Element of G1 such that
A60:      y in the carrier of A1 /\ B1 and
A61:      x = f.y by A59,FUNCT_2:65;
          y in (the carrier of A1) /\ the carrier of B1 by A60,Th1;
          then y in the carrier of A1 by XBOOLE_0:def 4;
          hence thesis by A61,FUNCT_2:35;
        end;
        let x be object;
        assume
A62:    x in the carrier of C3;
        the carrier of C3 c= the carrier of G2 by GROUP_2:def 5;
        then reconsider x as Element of G2 by A62;
        consider y being Element of G1 such that
A63:    y in the carrier of A1 /\ B1 and
A64:    x = f.y by A23,A50,A62,FUNCT_2:65;
        f.y in f.:the carrier of A1 /\ B1 by A63,FUNCT_2:35;
        then f.y in (the carrier of A3) /\ the carrier of B3 by A52,A51,A58,A54
,XBOOLE_0:def 4;
        hence thesis by A64,Th1;
      end;
A65:  gr (f.:the carrier of B1) = B3 by A51,Th3;
      the carrier of A3 /\ B3 c= the carrier of C3
      proof
        let x be object;
        assume x in the carrier of A3 /\ B3;
        then x in (the carrier of A3) /\ the carrier of B3 by Th1;
        then
        x in f.:((the carrier of A1) /\ the carrier of B1) by A1,A52,A51,
FUNCT_1:62;
        hence thesis by A23,A50,Th1;
      end;
      then the carrier of A3 /\ B3 = the carrier of C3 by A53;
      then gr (f.:the carrier of A1 /\ B1) = A3 /\ B3 by A23,A50,Th3
        .= gr (f.:the carrier of A1) /\ gr (f.:the carrier of B1) by A52,A65
,Th3
        .= (FuncLatt f).a "/\" (FuncLatt f).b by A34,Th23;
      hence thesis by A2,A3,A22,Th23;
    end;
  end;
  hence thesis by LATTICE4:def 2;
end;

theorem Th32:
  for G1, G2 being Group for f being Homomorphism of G1, G2 holds
  FuncLatt f is sup-Semilattice-Homomorphism of lattice G1, lattice G2
proof
  let G1, G2 be Group;
  let f be Homomorphism of G1, G2;
  for a, b being Element of lattice G1 holds (FuncLatt f).(a "\/" b) = (
  FuncLatt f).a "\/" (FuncLatt f).b
  proof
    let a, b be Element of lattice G1;
    consider A1 being strict Subgroup of G1 such that
A1: A1 = a by Th2;
    consider B1 being strict Subgroup of G1 such that
A2: B1 = b by Th2;
    thus thesis
    proof
A3:   for g being Element of G2 st g in f.:the carrier of B1 holds g" in
      f.:the carrier of B1
      proof
        let g be Element of G2;
        assume g in f.:the carrier of B1;
        then consider x being Element of G1 such that
A4:     x in the carrier of B1 and
A5:     g = f.x by FUNCT_2:65;
        x in B1 by A4,STRUCT_0:def 5;
        then x" in B1 by GROUP_2:51;
        then
A6:     x" in the carrier of B1 by STRUCT_0:def 5;
        f.x" = (f.x)" by GROUP_6:32;
        hence thesis by A5,A6,FUNCT_2:35;
      end;
      1_G1 in A1 by GROUP_2:46;
      then
A7:   1_G1 in the carrier of A1 by STRUCT_0:def 5;
A8:   ex y being Element of G2 st y = f.1_G1;
      the carrier of A1 c= the carrier of G1 & the carrier of B1 c= the
      carrier of G1 by GROUP_2:def 5;
      then reconsider
      A = (the carrier of A1) \/ the carrier of B1 as Subset of G1
      by XBOOLE_1:8;
A9:   for g being Element of G2 st g in f.:the carrier of A1 holds g" in
      f.:the carrier of A1
      proof
        let g be Element of G2;
        assume g in f.:the carrier of A1;
        then consider x being Element of G1 such that
A10:    x in the carrier of A1 and
A11:    g = f.x by FUNCT_2:65;
        x in A1 by A10,STRUCT_0:def 5;
        then x" in A1 by GROUP_2:51;
        then
A12:    x" in the carrier of A1 by STRUCT_0:def 5;
        f.x" = (f.x)" by GROUP_6:32;
        hence thesis by A11,A12,FUNCT_2:35;
      end;
      reconsider B = (f.:the carrier of A1) \/ f.:the carrier of B1 as Subset
      of G2;
A13:  dom f = the carrier of G1 by FUNCT_2:def 1;
A14:  for g1, g2 being Element of G2 st g1 in f.:the carrier of B1 & g2
      in f.:the carrier of B1 holds g1 * g2 in f.:the carrier of B1
      proof
        let g1, g2 be Element of G2;
        assume that
A15:    g1 in f.:the carrier of B1 and
A16:    g2 in f.:the carrier of B1;
        consider x being Element of G1 such that
A17:    x in the carrier of B1 and
A18:    g1 = f.x by A15,FUNCT_2:65;
        consider y being Element of G1 such that
A19:    y in the carrier of B1 and
A20:    g2 = f.y by A16,FUNCT_2:65;
A21:    y in B1 by A19,STRUCT_0:def 5;
        x in B1 by A17,STRUCT_0:def 5;
        then x * y in B1 by A21,GROUP_2:50;
        then
A22:    x * y in the carrier of B1 by STRUCT_0:def 5;
        f.(x * y) = f.x * f.y by GROUP_6:def 6;
        hence thesis by A18,A20,A22,FUNCT_2:35;
      end;
      1_G1 in B1 by GROUP_2:46;
      then
A23:  1_G1 in the carrier of B1 by STRUCT_0:def 5;
A24:  (FuncLatt f).(A1 "\/" B1) = gr (f.:the carrier of A1 "\/" B1) by Def3;
      ex y1 being Element of G2 st y1 = f.1_G1;
      then f.:the carrier of B1 <> {} by A13,A23,FUNCT_1:def 6;
      then consider B3 being strict Subgroup of G2 such that
A25:  the carrier of B3 = f.:the carrier of B1 by A3,A14,GROUP_2:52;
A26:  for g1, g2 being Element of G2 st g1 in f.:the carrier of A1 & g2
      in f.:the carrier of A1 holds g1 * g2 in f.:the carrier of A1
      proof
        let g1, g2 be Element of G2;
        assume that
A27:    g1 in f.:the carrier of A1 and
A28:    g2 in f.:the carrier of A1;
        consider x being Element of G1 such that
A29:    x in the carrier of A1 and
A30:    g1 = f.x by A27,FUNCT_2:65;
        consider y being Element of G1 such that
A31:    y in the carrier of A1 and
A32:    g2 = f.y by A28,FUNCT_2:65;
A33:    y in A1 by A31,STRUCT_0:def 5;
        x in A1 by A29,STRUCT_0:def 5;
        then x * y in A1 by A33,GROUP_2:50;
        then
A34:    x * y in the carrier of A1 by STRUCT_0:def 5;
        f.(x * y) = f.x * f.y by GROUP_6:def 6;
        hence thesis by A30,A32,A34,FUNCT_2:35;
      end;
A35:  (FuncLatt f).a = gr (f.:the carrier of A1) & (FuncLatt f).b = gr (f
      .:the carrier of B1) by A1,A2,Def3;
      consider C1 being strict Subgroup of G1 such that
A36:  C1 = A1 "\/" B1;
A37:  for g1, g2 being Element of G2 st g1 in f.:the carrier of C1 & g2
      in f.:the carrier of C1 holds g1 * g2 in f.:the carrier of C1
      proof
        let g1, g2 be Element of G2;
        assume that
A38:    g1 in f.:the carrier of C1 and
A39:    g2 in f.:the carrier of C1;
        consider x being Element of G1 such that
A40:    x in the carrier of C1 and
A41:    g1 = f.x by A38,FUNCT_2:65;
        consider y being Element of G1 such that
A42:    y in the carrier of C1 and
A43:    g2 = f.y by A39,FUNCT_2:65;
A44:    y in C1 by A42,STRUCT_0:def 5;
        x in C1 by A40,STRUCT_0:def 5;
        then x * y in C1 by A44,GROUP_2:50;
        then
A45:    x * y in the carrier of C1 by STRUCT_0:def 5;
        f.(x * y) = f.x * f.y by GROUP_6:def 6;
        hence thesis by A41,A43,A45,FUNCT_2:35;
      end;
A46:  for g being Element of G2 st g in f.:the carrier of C1 holds g" in
      f.:the carrier of C1
      proof
        let g be Element of G2;
        assume g in f.:the carrier of C1;
        then consider x being Element of G1 such that
A47:    x in the carrier of C1 and
A48:    g = f.x by FUNCT_2:65;
        x in C1 by A47,STRUCT_0:def 5;
        then x" in C1 by GROUP_2:51;
        then
A49:    x" in the carrier of C1 by STRUCT_0:def 5;
        f.x" = (f.x)" by GROUP_6:32;
        hence thesis by A48,A49,FUNCT_2:35;
      end;
      1_G1 in C1 by GROUP_2:46;
      then 1_G1 in the carrier of C1 by STRUCT_0:def 5;
      then f.:the carrier of C1 <> {} by A13,A8,FUNCT_1:def 6;
      then consider C3 being strict Subgroup of G2 such that
A50:  the carrier of C3 = f.:the carrier of C1 by A46,A37,GROUP_2:52;
      ex y being Element of G2 st y = f.1_G1;
      then f.:the carrier of A1 <> {} by A13,A7,FUNCT_1:def 6;
      then consider A3 being strict Subgroup of G2 such that
A51:  the carrier of A3 = f.:the carrier of A1 by A9,A26,GROUP_2:52;
A52:  gr (f.:the carrier of B1) = B3 by A25,Th3;
      the carrier of A3 "\/" B3 = the carrier of C3
      proof
A53:    f.:the carrier of B1 c= the carrier of C3
        proof
          let x be object;
          assume
A54:      x in f.:the carrier of B1;
          then reconsider x as Element of G2;
          consider y being Element of G1 such that
A55:      y in the carrier of B1 and
A56:      x = f.y by A54,FUNCT_2:65;
          y in A by A55,XBOOLE_0:def 3;
          then y in gr A by GROUP_4:29;
          then y in the carrier of gr A by STRUCT_0:def 5;
          then y in the carrier of A1 "\/" B1 by Th4;
          hence thesis by A36,A50,A56,FUNCT_2:35;
        end;
        f.:the carrier of A1 c= the carrier of C3
        proof
          let x be object;
          assume
A57:      x in f.:the carrier of A1;
          then reconsider x as Element of G2;
          consider y being Element of G1 such that
A58:      y in the carrier of A1 and
A59:      x = f.y by A57,FUNCT_2:65;
          y in A by A58,XBOOLE_0:def 3;
          then y in gr A by GROUP_4:29;
          then y in the carrier of gr A by STRUCT_0:def 5;
          then y in the carrier of A1 "\/" B1 by Th4;
          hence thesis by A36,A50,A59,FUNCT_2:35;
        end;
        then B c= the carrier of C3 by A53,XBOOLE_1:8;
        then gr B is Subgroup of C3 by GROUP_4:def 4;
        then the carrier of gr B c= the carrier of C3 by GROUP_2:def 5;
        hence the carrier of A3 "\/" B3 c= the carrier of C3 by A51,A25,Th4;
        reconsider AA = (f"the carrier of A3) \/ f"the carrier of B3 as Subset
        of G1;
A60:    for g being Element of G1 st g in f"the carrier of A3 "\/" B3
        holds g" in f"the carrier of A3 "\/" B3
        proof
          let g be Element of G1;
          assume g in f"the carrier of A3 "\/" B3;
          then f.g in the carrier of A3 "\/" B3 by FUNCT_2:38;
          then f.g in A3 "\/" B3 by STRUCT_0:def 5;
          then (f.g)" in A3 "\/" B3 by GROUP_2:51;
          then f.g" in A3 "\/" B3 by GROUP_6:32;
          then f.g" in the carrier of A3 "\/" B3 by STRUCT_0:def 5;
          hence thesis by FUNCT_2:38;
        end;
        the carrier of B1 c= the carrier of G1 by GROUP_2:def 5;
        then
A61:    the carrier of B1 c= f"the carrier of B3 by A25,FUNCT_2:42;
        the carrier of A1 c= the carrier of G1 by GROUP_2:def 5;
        then the carrier of A1 c= f"the carrier of A3 by A51,FUNCT_2:42;
        then
A62:    A c= AA by A61,XBOOLE_1:13;
A63:    for g1, g2 being Element of G1 st g1 in f"the carrier of A3 "\/"
B3 & g2 in f"the carrier of A3 "\/" B3 holds g1 * g2 in f"the carrier of A3
        "\/" B3
        proof
          let g1, g2 be Element of G1;
          assume that
A64:      g1 in f"the carrier of A3 "\/" B3 and
A65:      g2 in f"the carrier of A3 "\/" B3;
          f.g2 in the carrier of A3 "\/" B3 by A65,FUNCT_2:38;
          then
A66:      f.g2 in A3 "\/" B3 by STRUCT_0:def 5;
          f.g1 in the carrier of A3 "\/" B3 by A64,FUNCT_2:38;
          then f.g1 in A3 "\/" B3 by STRUCT_0:def 5;
          then f.g1 * f.g2 in A3 "\/" B3 by A66,GROUP_2:50;
          then f.(g1 * g2) in A3 "\/" B3 by GROUP_6:def 6;
          then f.(g1 * g2) in the carrier of A3 "\/" B3 by STRUCT_0:def 5;
          hence thesis by FUNCT_2:38;
        end;
A67:    f"the carrier of B3 c= f"the carrier of A3 "\/" B3
        proof
          let x be object;
          assume
A68:      x in f"the carrier of B3;
          then f.x in the carrier of B3 by FUNCT_2:38;
          then
A69:      f.x in B3 by STRUCT_0:def 5;
          f.x in the carrier of G2 by A68,FUNCT_2:5;
          then f.x in A3 "\/" B3 by A69,Th5;
          then f.x in the carrier of A3 "\/" B3 by STRUCT_0:def 5;
          hence thesis by A68,FUNCT_2:38;
        end;
        1_G2 in A3 "\/" B3 by GROUP_2:46;
        then 1_G2 in the carrier of A3 "\/" B3 by STRUCT_0:def 5;
        then f.1_G1 in the carrier of A3 "\/" B3 by GROUP_6:31;
        then f"the carrier of A3 "\/" B3 <> {} by FUNCT_2:38;
        then consider H being strict Subgroup of G1 such that
A70:    the carrier of H = f"the carrier of A3 "\/" B3 by A60,A63,GROUP_2:52;
        f"the carrier of A3 c= f"the carrier of A3 "\/" B3
        proof
          let x be object;
          assume
A71:      x in f"the carrier of A3;
          then f.x in the carrier of A3 by FUNCT_2:38;
          then
A72:      f.x in A3 by STRUCT_0:def 5;
          f.x in the carrier of G2 by A71,FUNCT_2:5;
          then f.x in A3 "\/" B3 by A72,Th5;
          then f.x in the carrier of A3 "\/" B3 by STRUCT_0:def 5;
          hence thesis by A71,FUNCT_2:38;
        end;
        then (f"the carrier of A3) \/ f"the carrier of B3 c= f"the carrier of
        A3 "\/" B3 by A67,XBOOLE_1:8;
        then A c= the carrier of H by A62,A70;
        then gr A is Subgroup of H by GROUP_4:def 4;
        then the carrier of gr A c= the carrier of H by GROUP_2:def 5;
        then
A73:    the carrier of C1 c= f"the carrier of A3 "\/" B3 by A36,A70,Th4;
A74:    f.:the carrier of C1 c= f.:(f"the carrier of A3 "\/" B3)
        proof
          let x be object;
          assume
A75:      x in f.:the carrier of C1;
          then reconsider x as Element of G2;
          ex y being Element of G1 st y in the carrier of C1 & x = f.y by A75,
FUNCT_2:65;
          hence thesis by A73,FUNCT_2:35;
        end;
        f.:f"the carrier of A3 "\/" B3 c= the carrier of A3 "\/" B3 by
FUNCT_1:75;
        hence thesis by A50,A74;
      end;
      then gr (f.:the carrier of A1 "\/" B1) = A3 "\/" B3 by A36,A50,Th3
        .= gr (f.:the carrier of A1) "\/" gr (f.:the carrier of B1) by A51,A52
,Th3
        .= (FuncLatt f).a "\/" (FuncLatt f).b by A35,Th22;
      hence thesis by A1,A2,A24,Th22;
    end;
  end;
  hence thesis by LATTICE4:def 1;
end;

theorem
  for G1, G2 being Group for f being Homomorphism of G1, G2 st f is
  one-to-one holds FuncLatt f is Homomorphism of lattice G1, lattice G2
proof
  let G1, G2 be Group;
  let f be Homomorphism of G1, G2;
  assume f is one-to-one;
  then
A1: FuncLatt f is Semilattice-Homomorphism of lattice G1, lattice G2 by Th31;
  FuncLatt f is sup-Semilattice-Homomorphism of lattice G1, lattice G2 by Th32;
  hence thesis by A1;
end;
