Journal of Formalized Mathematics
Volume 3, 1991
University of Bialystok
Copyright (c) 1991 Association of Mizar Users

The abstract of the Mizar article:

Categories of Groups

by
Michal Muzalewski

Received October 3, 1991

MML identifier: GRCAT_1
[ Mizar article, MML identifier index ]


environ

 vocabulary CLASSES2, PARTFUN1, RELAT_1, FUNCT_1, MIDSP_1, BOOLE, VECTSP_2,
      FUNCT_2, VECTSP_1, MIDSP_2, RLVECT_1, ARYTM_1, CAT_1, TARSKI, CAT_2,
      PRE_TOPC, ORDINAL4, FUNCOP_1, MOD_1, ENS_1, GRCAT_1, ALGSTR_1;
 notation TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, MOD_1, RELAT_1, FUNCT_1,
      MCART_1, STRUCT_0, BINOP_1, RLVECT_1, VECTSP_1, VECTSP_2, PARTFUN1,
      CAT_1, CLASSES2, PRE_TOPC, FUNCT_2, CAT_2, ALGSTR_1, MIDSP_1, MIDSP_2;
 constructors BINOP_1, VECTSP_2, CLASSES2, CAT_2, MIDSP_2, TOPS_2, ALGSTR_1,
      CLASSES1, MEMBERED, PARTFUN1, RELAT_2, XBOOLE_0;
 clusters RELSET_1, GROUP_1, STRUCT_0, SUBSET_1, CLASSES2, ALGSTR_1, MIDSP_2,
      MEMBERED, ZFMISC_1, FUNCT_2, PARTFUN1, XBOOLE_0;
 requirements SUBSET, BOOLE;


begin ::  0a. Auxiliary theorems: sets and universums

reserve x, y for set;
reserve D for non empty set;
reserve UN for Universe;

canceled;

theorem :: GRCAT_1:2
 for X,Y,A being set, z being set st z in A & A c= [:X,Y:]
      ex x being Element of X, y being Element of Y st z = [x,y];

theorem :: GRCAT_1:3
 for u1,u2,u3,u4 being Element of UN holds
 [u1,u2,u3] is Element of UN & [u1,u2,u3,u4] is Element of UN;

theorem :: GRCAT_1:4
 for x,y st x in y & y in UN holds x in UN;

::  0b. Auxiliary schemes: partial functions

scheme PartLambda2{X,Y,Z()->set,F(set,set)->set,P[set,set]}:
 ex f being PartFunc of [:X(),Y():],Z()
  st (for x,y holds [x,y] in dom f iff x in X() & y in Y() & P[x,y])
   & (for x,y st [x,y] in dom f holds f.[x,y] = F(x,y))
provided
 for x,y st x in X() & y in Y() & P[x,y] holds F(x,y) in Z();

scheme PartLambda2D{X,Y()->non empty set,Z()->set,F(set,set)->set,
 P[set,set]}: ex f being PartFunc of [:X(),Y():],Z()
  st (for x being Element of X(), y being Element of Y() holds
       [x,y] in dom f iff P[x,y])
   & (for x being Element of X(), y being Element of Y() st [x,y] in
 dom f holds f.[x,y] = F(x,y))
provided
 for x being Element of X(), y being Element of Y() st P[x,y] holds
     F(x,y) in Z();

::  0c. Auxiliary theorems: Trivial Group

theorem :: GRCAT_1:5
 op2.({},{}) = {} & op1.{} = {} & op0 = {};

theorem :: GRCAT_1:6
 {{}} in UN & [{{}},{{}}] in UN & [:{{}},{{}}:] in UN &
  op2 in UN & op1 in UN;

theorem :: GRCAT_1:7
 LoopStr (# {{}},op2,Extract {} #) is midpoint_operator;

definition
 cluster L_Trivial -> midpoint_operator;
end;

theorem :: GRCAT_1:8
     (for x being Element of L_Trivial holds x = {})
  & (for x,y being Element of L_Trivial holds x+y = {})
  & (for x being Element of L_Trivial holds -x = {})
  & 0.L_Trivial = {};

::  0d. Auxiliary theorems: subcategories

reserve C for Category;
reserve O for non empty Subset of the Objects of C;

definition let C,O;
 canceled 4;

 func Morphs(O) -> Subset of the Morphisms of C equals
:: GRCAT_1:def 5
  union{Hom(a,b) where a is Object of C,b is Object of C : a in O & b in O};
end;

definition let C,O;
 cluster Morphs(O) -> non empty;
end;

definition let C,O;
 func dom(O) -> Function of Morphs(O),O equals
:: GRCAT_1:def 6
   (the Dom of C)|Morphs(O);
 func cod(O) -> Function of Morphs(O),O equals
:: GRCAT_1:def 7
   (the Cod of C)|Morphs(O);
 func comp(O) -> PartFunc of [:Morphs(O),(Morphs(O)):],Morphs(O) equals
:: GRCAT_1:def 8
   (the Comp of C)|([:Morphs(O),Morphs(O):] qua set);
 func ID(O) -> Function of O,Morphs(O) equals
:: GRCAT_1:def 9
   (the Id of C)|O;
end;

theorem :: GRCAT_1:9
 CatStr (# O,Morphs(O),dom(O),cod(O),comp(O),ID(O)#)
  is_full_subcategory_of C;

definition let C,O;
 func cat(O) -> Subcategory of C equals
:: GRCAT_1:def 10
   CatStr (# O,Morphs(O),dom(O),cod(O),comp(O),ID(O)#);
end;

definition let C,O;
 cluster cat(O) -> strict;
end;

theorem :: GRCAT_1:10
 the Objects of cat(O) = O;

::  1a. Maps of the carriers of groups

definition let G be 1-sorted;
 func id G -> map of G,G equals
:: GRCAT_1:def 11
   id the carrier of G;
end;

theorem :: GRCAT_1:11
 for G being non empty 1-sorted,
     x being Element of G holds (id G).x = x;

theorem :: GRCAT_1:12
 for G being 1-sorted, H being non empty 1-sorted,
     f being map of G, H holds f*(id G) = f & (id H)*f = f;

definition let G,H be non empty ZeroStr;
 func ZeroMap(G,H) -> map of G,H equals
:: GRCAT_1:def 12
   (the carrier of G) --> 0.H;
end;

definition let G,H be non empty LoopStr; let f be map of G,H;
 attr f is additive means
:: GRCAT_1:def 13
  for x,y being Element of G holds f.(x+y) = f.x+f.y;
end;

theorem :: GRCAT_1:13
  comp L_Trivial = op1;

theorem :: GRCAT_1:14
 for G1,G2,G3 being non empty LoopStr,
   f being map of G1,G2, g being map of G2,G3
      st f is additive & g is additive holds g*f is additive;

theorem :: GRCAT_1:15
  for G being non empty ZeroStr,
      H being non empty LoopStr,
      x being Element of G holds ZeroMap(G,H).x = 0.H;

theorem :: GRCAT_1:16
  for G being non empty LoopStr,
      H being right_zeroed (non empty LoopStr) holds ZeroMap(G,H) is additive;

::  1b. Morphisms of groups

reserve G,H for AddGroup;

definition
  struct GroupMorphismStr (# Dom,Cod -> AddGroup,
                          Fun -> map of the Dom, the Cod #);
end;

definition let f be GroupMorphismStr;
 func dom(f) -> AddGroup equals
:: GRCAT_1:def 14
   the Dom of f;
 func cod(f) -> AddGroup equals
:: GRCAT_1:def 15
   the Cod of f;
end;

definition let f be GroupMorphismStr;
 func fun(f) -> map of dom(f),cod(f) equals
:: GRCAT_1:def 16
   the Fun of f;
end;

theorem :: GRCAT_1:17
  for f being GroupMorphismStr,
          G1,G2 being AddGroup,
          f0 being map of G1,G2 st f = GroupMorphismStr(# G1,G2,f0#)
      holds dom f = G1 & cod f = G2 & fun f = f0;

definition let G,H;
 func ZERO(G,H) -> GroupMorphismStr equals
:: GRCAT_1:def 17
   GroupMorphismStr(# G,H,ZeroMap(G,H)#);
end;

definition let G,H;
 cluster ZERO(G,H) -> strict;
end;

definition let IT be GroupMorphismStr;
 attr IT is GroupMorphism-like means
:: GRCAT_1:def 18
  fun(IT) is additive;
end;

definition
 cluster strict GroupMorphism-like GroupMorphismStr;
end;

definition
 mode GroupMorphism is GroupMorphism-like GroupMorphismStr;
end;

theorem :: GRCAT_1:18
 for F being GroupMorphism holds the Fun of F is additive;

definition let G,H;
 cluster ZERO(G,H) -> GroupMorphism-like;
end;

definition let G,H;
 mode Morphism of G,H -> GroupMorphism means
:: GRCAT_1:def 19
  dom(it) = G & cod(it) = H;
end;

definition let G,H;
 cluster strict Morphism of G,H;
end;

theorem :: GRCAT_1:19
 for f being strict GroupMorphismStr
   st dom(f) = G & cod(f) = H & fun(f) is additive
   holds f is strict Morphism of G,H;

theorem :: GRCAT_1:20
 for f being map of G,H st f is additive
       holds GroupMorphismStr (# G,H,f#) is strict Morphism of G,H;

theorem :: GRCAT_1:21
  for G being non empty LoopStr holds id G is additive;

definition let G;
 func ID G -> Morphism of G,G equals
:: GRCAT_1:def 20
   GroupMorphismStr(# G,G,id G#);
end;

definition let G;
 cluster ID G -> strict;
end;

definition let G,H;
 redefine func ZERO(G,H) -> strict Morphism of G,H;
end;

theorem :: GRCAT_1:22
 for F being Morphism of G,H ex f being map of G,H
       st the GroupMorphismStr of F = GroupMorphismStr(# G,H,f#) &
        f is additive;

theorem :: GRCAT_1:23
 for F being strict Morphism of G,H ex f being map of G,H
       st F = GroupMorphismStr(# G,H,f#);

theorem :: GRCAT_1:24
 for F being GroupMorphism ex G,H st F is Morphism of G,H;

theorem :: GRCAT_1:25
  for F being strict GroupMorphism ex G,H being AddGroup, f being map of G,H
       st F is Morphism of G,H
        & F = GroupMorphismStr(# G,H,f#)
        & f is additive;

theorem :: GRCAT_1:26
 for g,f being GroupMorphism st dom(g) = cod(f)
       ex G1,G2,G3 being AddGroup st g is Morphism of G2,G3
                                   & f is Morphism of G1,G2;

definition let G,F be GroupMorphism;
 assume  dom(G) = cod(F);
 func G*F -> strict GroupMorphism means
:: GRCAT_1:def 21
  for G1,G2,G3 being AddGroup,
           g being map of G2,G3, f being map of G1,G2
       st the GroupMorphismStr of G = GroupMorphismStr(# G2,G3,g#) &
          the GroupMorphismStr of F = GroupMorphismStr(# G1,G2,f#)
       holds it = GroupMorphismStr(# G1,G3,g*f#);
end;

canceled;

theorem :: GRCAT_1:28
 for G1,G2,G3 being AddGroup,
          G being Morphism of G2,G3,
          F being Morphism of G1,G2
      holds G*F is Morphism of G1,G3;

definition let G1,G2,G3 be AddGroup,
               G be Morphism of G2,G3,
               F be Morphism of G1,G2;
 redefine func G*F -> strict Morphism of G1,G3;
end;

theorem :: GRCAT_1:29
 for G1,G2,G3 being AddGroup,
          G being Morphism of G2,G3,
          F being Morphism of G1,G2,
          g being map of G2,G3, f being map of G1,G2
      st G = GroupMorphismStr(# G2,G3,g#) & F = GroupMorphismStr(# G1,G2,f#)
      holds G*F = GroupMorphismStr(# G1,G3,g*f#);

 theorem :: GRCAT_1:30
  for f,g being strict GroupMorphism st dom g = cod f holds
       ex G1,G2,G3 being AddGroup,
          f0 being map of G1,G2, g0 being map of G2,G3
          st f = GroupMorphismStr(# G1,G2,f0#)
           & g = GroupMorphismStr(# G2,G3,g0#)
           & g*f = GroupMorphismStr(# G1,G3,g0*f0#);

 theorem :: GRCAT_1:31
  for f,g being strict GroupMorphism st dom g = cod f holds
     dom(g*f) = dom f & cod (g*f) = cod g;

 theorem :: GRCAT_1:32
  for G1,G2,G3,G4 being AddGroup, f being strict Morphism of G1,G2,
             g being strict Morphism of G2,G3,
             h being strict Morphism of G3,G4
         holds h*(g*f) = (h*g)*f;

 theorem :: GRCAT_1:33
  for f,g,h being strict GroupMorphism
        st dom h = cod g & dom g = cod f holds h*(g*f) = (h*g)*f;

 theorem :: GRCAT_1:34
  dom ID(G) = G
      & cod ID(G) = G
      & (for f being strict GroupMorphism st cod f = G holds (ID G)*f = f)
      & (for g being strict GroupMorphism st dom g = G holds g*(ID G) = g);

::  2. Domains of groups

definition let IT be set;
 attr IT is Group_DOMAIN-like means
:: GRCAT_1:def 22
  for x being set st x in IT holds x is strict AddGroup;
end;

definition
 cluster Group_DOMAIN-like non empty set;
end;

definition
 mode Group_DOMAIN is Group_DOMAIN-like non empty set;
end;

reserve V for Group_DOMAIN;

definition let V;
 redefine mode Element of V -> AddGroup;
end;

definition let V;
 cluster strict Element of V;
end;

::  3. Domains of morphisms

definition let IT be set;
 attr IT is GroupMorphism_DOMAIN-like means
:: GRCAT_1:def 23
   for x being set st x in IT holds x is strict GroupMorphism;
end;

definition
 cluster GroupMorphism_DOMAIN-like non empty set;
end;

definition
 mode GroupMorphism_DOMAIN is GroupMorphism_DOMAIN-like non empty set;
end;

definition let M be GroupMorphism_DOMAIN;
 redefine mode Element of M -> GroupMorphism;
end;

definition let M be GroupMorphism_DOMAIN;
 cluster strict Element of M;
end;

canceled 2;

theorem :: GRCAT_1:37
 for f being strict GroupMorphism holds {f} is GroupMorphism_DOMAIN;

definition let G,H;
 mode GroupMorphism_DOMAIN of G,H -> GroupMorphism_DOMAIN means
:: GRCAT_1:def 24
  for x being Element of it holds x is strict Morphism of G,H;
end;

theorem :: GRCAT_1:38
 D is GroupMorphism_DOMAIN of G,H
       iff for x being Element of D holds x is strict Morphism of G,H;

theorem :: GRCAT_1:39
  for f being strict Morphism of G,H holds {f} is GroupMorphism_DOMAIN of G,H;

definition let G,H be 1-sorted;
 mode MapsSet of G,H means
:: GRCAT_1:def 25
 for x being set st x in it holds x is map of G,H;
end;

definition let G,H be 1-sorted;
 func Maps(G,H) -> MapsSet of G,H equals
:: GRCAT_1:def 26
  Funcs(the carrier of G, the carrier of H);
end;

definition let G be 1-sorted, H be non empty 1-sorted;
 cluster Maps(G,H) -> non empty;
end;

definition let G be 1-sorted, H be non empty 1-sorted;
 cluster non empty MapsSet of G,H;
end;

definition let G be 1-sorted, H be non empty 1-sorted;
           let M be non empty MapsSet of G,H;
 redefine mode Element of M -> map of G,H;
end;

definition let G,H;
 func Morphs(G,H) -> GroupMorphism_DOMAIN of G,H means
:: GRCAT_1:def 27
  x in it iff x is strict Morphism of G,H;
end;

definition let G,H; let M be GroupMorphism_DOMAIN of G,H;
 redefine mode Element of M -> Morphism of G,H;
end;

definition let G,H; let M be GroupMorphism_DOMAIN of G,H;
 cluster strict Element of M;
end;

::  4a. Category of groups - objects

definition let x,y;
 pred GO x,y means
:: GRCAT_1:def 28
  ex x1,x2,x3,x4 being set st x = [x1,x2,x3,x4] &
    ex G being strict AddGroup
    st y = G
    & x1 = the carrier of G
    & x2 = the add of G
    & x3 = comp G
    & x4 = the Zero of G;
end;

theorem :: GRCAT_1:40
 for x,y1,y2 being set st GO x,y1 & GO x,y2 holds y1 = y2;

theorem :: GRCAT_1:41
 ex x st x in UN & GO x,L_Trivial;

definition let UN;
 func GroupObjects(UN) -> set means
:: GRCAT_1:def 29
  for y holds y in it iff ex x st x in UN & GO x,y;
end;

theorem :: GRCAT_1:42
 L_Trivial in GroupObjects(UN);

definition let UN;
 cluster GroupObjects(UN) -> non empty;
end;

theorem :: GRCAT_1:43
 for x being Element of GroupObjects(UN) holds x is strict AddGroup;

definition let UN;
  cluster GroupObjects(UN) -> Group_DOMAIN-like;
end;

::  4b. Category of groups - morphisms

definition let V;
 func Morphs(V) -> GroupMorphism_DOMAIN means
:: GRCAT_1:def 30
  for x holds x in it iff ex G,H being strict Element of V
  st x is strict Morphism of G,H;
end;

      ::
      ::  4c. Category of groups - dom,cod,id
      ::

definition let V; let F be Element of Morphs(V);
redefine func dom(F) -> strict Element of V;
 func cod(F) -> strict Element of V;
end;

definition let V; let G be Element of V;
 func ID(G) -> strict Element of Morphs(V) equals
:: GRCAT_1:def 31
   ID(G);
end;

definition let V;
 func dom(V) -> Function of Morphs(V),V means
:: GRCAT_1:def 32
  for f being Element of Morphs(V) holds it.f = dom(f);
 func cod(V) -> Function of Morphs(V),V means
:: GRCAT_1:def 33
  for f being Element of Morphs(V) holds it.f = cod(f);
 func ID(V) -> Function of V,Morphs(V) means
:: GRCAT_1:def 34
  for G being Element of V holds it.G = ID(G);
 end;

      ::
      ::  4d. Category of groups - superposition
      ::

theorem :: GRCAT_1:44
 for g,f being Element of Morphs(V) st dom(g) = cod(f)
      ex G1,G2,G3 being strict Element of V st g is Morphism of G2,G3
                                      & f is Morphism of G1,G2;

theorem :: GRCAT_1:45
 for g,f being Element of Morphs(V) st dom(g) = cod(f)
      holds g*f in Morphs(V);

definition let V;
 func comp(V) -> PartFunc of [:Morphs(V),Morphs(V):],Morphs(V) means
:: GRCAT_1:def 35

 (for g,f being Element of Morphs(V) holds [g,f] in dom it iff dom(g) = cod(f))
 & (for g,f being Element of Morphs(V) st [g,f] in dom it
    holds it.[g,f] = g*f);
end;

      ::
      ::  4e. Definition of Category of groups
      ::

definition let UN;
 func GroupCat(UN) -> CatStr equals
:: GRCAT_1:def 36
   CatStr(# GroupObjects(UN),Morphs(GroupObjects(UN)),
                   dom(GroupObjects(UN)),cod(GroupObjects(UN)),
                   comp(GroupObjects(UN)),ID(GroupObjects(UN))#);
end;

definition let UN;
 cluster GroupCat(UN) -> strict;
end;

theorem :: GRCAT_1:46
  for f,g being Morphism of GroupCat(UN) holds
        [g,f] in dom(the Comp of GroupCat(UN)) iff dom g = cod f;

theorem :: GRCAT_1:47
  for f  being (Morphism of GroupCat(UN)),
           f' being Element of Morphs(GroupObjects(UN)),
           b  being Object of GroupCat(UN),
           b' being Element of GroupObjects(UN)
       holds f is strict Element of Morphs(GroupObjects(UN))
           & f' is Morphism of GroupCat(UN)
           & b is strict Element of GroupObjects(UN)
           & b' is Object of GroupCat(UN);

theorem :: GRCAT_1:48
  for b  being Object of GroupCat(UN),
           b' being Element of GroupObjects(UN)
       st b = b' holds id b = ID(b');

 theorem :: GRCAT_1:49
  for f  being Morphism of GroupCat(UN)
       for f' being Element of Morphs(GroupObjects(UN))
       st f = f'
       holds dom f = dom f'
           & cod f = cod f';

 theorem :: GRCAT_1:50
  for f,g   being (Morphism of GroupCat(UN)),
           f',g' being Element of Morphs(GroupObjects(UN))
       st f = f' & g = g'
       holds (dom g = cod f iff dom g' = cod f')
           & (dom g = cod f iff [g',f'] in dom comp(GroupObjects(UN)))
           & (dom g = cod f implies g*f = g'*f')
           & (dom f = dom g iff dom f' = dom g')
           & (cod f = cod g iff cod f' = cod g');

definition let UN;
 cluster GroupCat(UN) -> Category-like;
end;

definition let UN;
 func AbGroupObjects(UN) -> Subset of the Objects of GroupCat(UN) equals
:: GRCAT_1:def 37
   {G where G is Element of the Objects of GroupCat(UN)
                 : ex H being AbGroup st G = H};
end;

theorem :: GRCAT_1:51
 L_Trivial in AbGroupObjects(UN);

definition let UN;
 cluster AbGroupObjects(UN) -> non empty;
end;

definition let UN;
 func AbGroupCat(UN) -> Subcategory of GroupCat(UN) equals
:: GRCAT_1:def 38
   cat(AbGroupObjects(UN));
end;

definition let UN;
 cluster AbGroupCat(UN) -> strict;
end;

theorem :: GRCAT_1:52
 the Objects of AbGroupCat(UN) = AbGroupObjects(UN);

::  6. Subcategory of groups with the operator of 1/2

definition let UN;
 func MidOpGroupObjects(UN) -> Subset of the Objects of AbGroupCat(UN) equals
:: GRCAT_1:def 39
   {G where G is Element of the Objects of AbGroupCat(UN)
                 : ex H being midpoint_operator AbGroup st G = H};
end;

definition let UN;
 cluster MidOpGroupObjects(UN) -> non empty;
end;

definition let UN;
 func MidOpGroupCat(UN) -> Subcategory of AbGroupCat(UN) equals
:: GRCAT_1:def 40
  cat(MidOpGroupObjects(UN));
end;

definition let UN;
 cluster MidOpGroupCat(UN) -> strict;
end;

theorem :: GRCAT_1:53
  the Objects of MidOpGroupCat(UN) = MidOpGroupObjects(UN);

theorem :: GRCAT_1:54
  L_Trivial in MidOpGroupObjects(UN);

Back to top