  
  [1X2 [33X[0;0Y2d-groups : crossed modules and cat1-groups[133X[101X
  
  
  [1X2.1 [33X[0;0YConstructions for crossed modules[133X[101X
  
  [33X[0;0YA  crossed  module  (of groups) [22XmathcalX = (∂ : S -> R )[122X consists of a group
  homomorphism  [22X∂[122X, called the [13Xboundary[113X of [22XmathcalX[122X, with [13Xsource[113X [22XS[122X and [13Xrange[113X [22XR[122X.
  The  group  [22XR[122X  acts on itself by conjugation, and on [22XS[122X by an action [22Xα : R ->
  Aut(S)[122X such that, for all [22Xs,s_1,s_2 ∈ S[122X and [22Xr ∈ R[122X,[133X
  
  
        [33X[1;6Y[24X[33X[0;0Y{\bf XMod\ 1} : \partial(s^r) = r^{-1} (\partial s) r = (\partial
        s)^r, \qquad {\bf XMod\ 2} : s_1^{\partial s_2} = s_2^{-1}s_1 s_2 =
        {s_1}^{s_2}.[133X [124X[133X
  
  
  [33X[0;0YWhen only the first of these axioms is satisfied, the resulting structure is
  a  [13Xpre-crossed  module[113X (see section [14X2.2[114X). (Much of the literature on crossed
  modules  uses  left actions, but we have chosen to use right actions in this
  package since that is the standard choice for group actions in [5XGAP[105X.)[133X
  
  [33X[0;0YThe kernel of [22X∂[122X is abelian.[133X
  
  [33X[0;0YThere are a variety of constructors for crossed modules:[133X
  
  [1X2.1-1 XMod[101X
  
  [29X[2XXMod[102X( [3Xargs[103X ) [32X function
  [29X[2XXModByBoundaryAndAction[102X( [3Xbdy[103X, [3Xact[103X ) [32X operation
  [29X[2XXModByTrivialAction[102X( [3Xbdy[103X ) [32X operation
  [29X[2XXModByNormalSubgroup[102X( [3XG[103X, [3XN[103X ) [32X operation
  [29X[2XXModByCentralExtension[102X( [3Xbdy[103X ) [32X operation
  [29X[2XXModByAutomorphismGroup[102X( [3Xgrp[103X ) [32X operation
  [29X[2XXModByInnerAutomorphismGroup[102X( [3Xgrp[103X ) [32X operation
  [29X[2XXModByGroupOfAutomorphisms[102X( [3XG[103X, [3XA[103X ) [32X operation
  [29X[2XXModByAbelianModule[102X( [3Xabmod[103X ) [32X operation
  [29X[2XDirectProduct[102X( [3XX1[103X, [3XX2[103X ) [32X operation
  
  [33X[0;0YThe   global   function  [10XXMod[110X  implements  one  of  the  following  standard
  constructions:[133X
  
  [30X    [33X[0;6YA  [13Xtrivial  action crossed module[113X [22X(∂ : S -> R)[122X has [22Xs^r = s[122X for all [22Xs ∈
        S,  r  ∈  R[122X, the source is abelian and the image lies in the centre of
        the range.[133X
  
  [30X    [33X[0;6YA [13Xconjugation crossed module[113X is the inclusion of a normal subgroup [22XS ⊴
        R[122X, where [22XR[122X acts on [22XS[122X by conjugation.[133X
  
  [30X    [33X[0;6YA  [13Xcentral extension crossed module[113X has as boundary a surjection [22X∂ : S
        ->  R[122X,  with central kernel, where [22Xr ∈ R[122X acts on [22XS[122X by conjugation with
        [22X∂^-1r[122X.[133X
  
  [30X    [33X[0;6YAn  [13Xautomorphism  crossed  module[113X  has  as  range  a subgroup [22XR[122X of the
        automorphism  group  Aut[22X(S)[122X of [22XS[122X which contains the inner automorphism
        group  of [22XS[122X. The boundary maps [22Xs ∈ S[122X to the inner automorphism of [22XS[122X by
        [22Xs[122X.[133X
  
  [30X    [33X[0;6YA  [13Xcrossed abelian module[113X has an abelian module as source and the zero
        map as boundary.[133X
  
  [30X    [33X[0;6YThe  direct product [22XmathcalX_1 × mathcalX_2[122X of two crossed modules has
        source  [22XS_1  ×  S_2[122X, range [22XR_1 × R_2[122X and boundary [22X∂_1 × ∂_2[122X, with [22XR_1,
        R_2[122X acting trivially on [22XS_2, S_1[122X respectively.[133X
  
  [1X2.1-2 Source[101X
  
  [29X[2XSource[102X( [3XX0[103X ) [32X attribute
  [29X[2XRange[102X( [3XX0[103X ) [32X attribute
  [29X[2XBoundary[102X( [3XX0[103X ) [32X attribute
  [29X[2XAutoGroup[102X( [3XX0[103X ) [32X attribute
  [29X[2XXModAction[102X( [3XX0[103X ) [32X attribute
  
  [33X[0;0YThe  following  attributes  are used in the construction of a crossed module
  [10XX0[110X.[133X
  
  [30X    [33X[0;6Y[10XSource(X0)[110X  and  [10XRange(X0)[110X  are  the  source  [22XS[122X  and range [22XR[122X of [22X∂[122X, the
        boundary [10XBoundary(X0)[110X;[133X
  
  [30X    [33X[0;6Y[10XAutoGroup(X0)[110X is a group of automorphisms of [22XS[122X;[133X
  
  [30X    [33X[0;6Y[10XXModAction(X0)[110X is a homomorphism from [22XR[122X to [10XAutoGroup(X0)[110X.[133X
  
  [1X2.1-3 Size[101X
  
  [29X[2XSize[102X( [3XX0[103X ) [32X attribute
  [29X[2XName[102X( [3XX0[103X ) [32X attribute
  [29X[2XIdGroup[102X( [3XX0[103X ) [32X attribute
  [29X[2XExternalSetXMod[102X( [3XX0[103X ) [32X attribute
  
  [33X[0;0YMore  familiar  attributes are [10XName[110X, [10XSize[110X and [10XIdGroup[110X. The name is formed by
  concatenating  the  names of the source and range (if these exist). [10XSize[110X and
  [10XIdGroup[110X return two-element lists.[133X
  
  [33X[0;0YThe  [10XExternalSetXMod"[110X for a crossed module is the source group considered as
  a G-set of the range group using the crossed module action.[133X
  
  [33X[0;0YThe [10XDisplay[110X function is used to print details of 2d-groups.[133X
  
  [33X[0;0YIn  the  simple example below, [10XX1[110X is an automorphism crossed module, using a
  cyclic  group  of  size  five.  The [10XPrint[110X statements at the end list the [5XGAP[105X
  representations, properties and attributes of [10XX1[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xc5 := Group( (5,6,7,8,9) );;[127X[104X
    [4X[25Xgap>[125X [27XSetName( c5, "c5" );[127X[104X
    [4X[25Xgap>[125X [27XX1 := XModByAutomorphismGroup( c5 );[127X[104X
    [4X[28X[c5 -> PAut(c5)] [128X[104X
    [4X[25Xgap>[125X [27XDisplay( X1 );[127X[104X
    [4X[28XCrossed module [c5 -> PAut(c5)] :-[128X[104X
    [4X[28X: Source group c5 has generators:[128X[104X
    [4X[28X  [ (5,6,7,8,9) ][128X[104X
    [4X[28X: Range group PAut(c5) has generators:[128X[104X
    [4X[28X  [ (1,2,3,4) ][128X[104X
    [4X[28X: Boundary homomorphism maps source generators to:[128X[104X
    [4X[28X  [ () ][128X[104X
    [4X[28X: Action homomorphism maps range generators to automorphisms:[128X[104X
    [4X[28X  (1,2,3,4) --> { source gens --> [ (5,7,9,6,8) ] }[128X[104X
    [4X[28X  This automorphism generates the group of automorphisms.[128X[104X
    [4X[25Xgap>[125X [27XSize( X1 );  IdGroup( X1 ); [127X[104X
    [4X[28X[ 5, 4 ][128X[104X
    [4X[28X[ [ 5, 1 ], [ 4, 1 ] ][128X[104X
    [4X[25Xgap>[125X [27Xext := ExternalSetXMod( X1 ); [127X[104X
    [4X[28X<xset:[ (), (5,6,7,8,9), (5,7,9,6,8), (5,8,6,9,7), (5,9,8,7,6) ]>[128X[104X
    [4X[25Xgap>[125X [27XOrbits( ext );[127X[104X
    [4X[28X[ [ () ], [ (5,6,7,8,9), (5,7,9,6,8), (5,9,8,7,6), (5,8,6,9,7) ] ][128X[104X
    [4X[25Xgap>[125X [27XRepresentationsOfObject( X1 );[127X[104X
    [4X[28X[ "IsComponentObjectRep", "IsAttributeStoringRep", "IsPreXModObj" ][128X[104X
    [4X[25Xgap>[125X [27XKnownPropertiesOfObject( X1 );[127X[104X
    [4X[28X[ "IsEmpty", "IsTrivial", "IsNonTrivial", "IsFinite", [128X[104X
    [4X[28X  "CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree", [128X[104X
    [4X[28X  "IsGeneratorsOfSemigroup", "IsPreXModDomain", "IsPerm2dGroup", "IsPreXMod", [128X[104X
    [4X[28X  "IsXMod", "IsAutomorphismGroup2dGroup" ][128X[104X
    [4X[25Xgap>[125X [27XKnownAttributesOfObject( X1);[127X[104X
    [4X[28X[ "Name", "Size", "Range", "Source", "IdGroup", "Boundary", "AutoGroup", [128X[104X
    [4X[28X  "XModAction", "ExternalSetXMod" ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.1-4 IsXMod[101X
  
  [29X[2XIsXMod[102X( [3XX0[103X ) [32X property
  [29X[2XIsPreXMod[102X( [3XX0[103X ) [32X property
  [29X[2XIsPerm2dGroup[102X( [3XX0[103X ) [32X property
  [29X[2XIsPc2dGroup[102X( [3XX0[103X ) [32X property
  [29X[2XIsFp2dGroup[102X( [3XX0[103X ) [32X property
  
  [33X[0;0YThe  underlying  category  structures  for  the  objects constructed in this
  chapter   follow   the  sequence  [10XIs2dDomain[110X;  [10XIs2dMagma[110X;  [10XIs2dMagmaWithOne[110X;
  [10XIs2dMagmaWithInverses[110X, mirroring the situation for (one-dimensional) groups.
  From these we construct [10XIs2dSemigroup[110X, [10XIs2dMonoid[110X and [10XIs2dGroup[110X.[133X
  
  [33X[0;0YA   structure   which   has  [10XIsPerm2dGroup[110X  is  a  precrossed  module  or  a
  pre-cat1-group (see section [14X2.3[114X) whose source and range are both permutation
  groups.  The  properties  [10XIsPc2dGroup[110X, [10XIsFp2dGroup[110X are defined similarly. We
  see in the previous example that [10XX1[110X has [10XIsPreXMod[110X, [10XIsXMod[110X and [10XIsPerm2dGroup[110X.
  There  are also properties corresponding to the various construction methods
  listed  in  section  [14X2.1[114X:  [10XIsTrivialAction2dGroup[110X;  [10XIsNormalSubgroup2dGroup[110X;
  [10XIsCentralExtension2dGroup[110X;                       [10XIsAutomorphismGroup2dGroup[110X;
  [10XIsAbelianModule2dGroup[110X.[133X
  
  [1X2.1-5 SubXMod[101X
  
  [29X[2XSubXMod[102X( [3XX0[103X, [3Xsrc[103X, [3Xrng[103X ) [32X operation
  [29X[2XTrivialSubXMod[102X( [3XX0[103X ) [32X attribute
  [29X[2XNormalSubXMods[102X( [3XX0[103X ) [32X attribute
  
  [33X[0;0YWith  the  standard  crossed  module  constructors  listed above as building
  blocks, sub-crossed modules, normal sub-crossed modules [22XmathcalN ⊲ mathcalX[122X,
  and  also  quotients  [22XmathcalX/mathcalN[122X  may  be  constructed. A sub-crossed
  module [22XmathcalS = (δ : N -> M)[122X is [13Xnormal[113X in [22XmathcalX = (∂ : S -> R)[122X if[133X
  
  [30X    [33X[0;6Y[22XN,M[122X are normal subgroups of [22XS,R[122X respectively,[133X
  
  [30X    [33X[0;6Y[22Xδ[122X is the restriction of [22X∂[122X,[133X
  
  [30X    [33X[0;6Y[22Xn^r ∈ N[122X for all [22Xn ∈ N,~r ∈ R[122X,[133X
  
  [30X    [33X[0;6Y[22X(s^-1)^ms ∈ N[122X for all [22Xm ∈ M,~s ∈ S[122X.[133X
  
  [33X[0;0YThese  conditions  ensure that [22XM ⋉ N[122X is normal in the semidirect product [22XR ⋉
  S[122X.  (Note  that  [22X⟨  s,m  ⟩  =  (s^-1)^ms[122X is a displacement: see [2XDisplacement[102X
  ([14X4.1-3[114X).)[133X
  
  [33X[0;0YA  method  for [10XIsNormal[110X for crossed modules is provided. See section [14X4.1[114X for
  quotient crossed modules and natural homomorphisms.[133X
  
  [33X[0;0YThe  five normal subcrossed modules of [10XX4[110X found in the following example are
  [10X[id,id], [k4,k4], [k4,a4], [a4,a4][110X and [10XX4[110X itself.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xs4 := Group( (1,2), (2,3), (3,4) );; [127X[104X
    [4X[25Xgap>[125X [27Xa4 := Subgroup( s4, [ (1,2,3), (2,3,4) ] );; [127X[104X
    [4X[25Xgap>[125X [27Xk4 := Subgroup( a4, [ (1,2)(3,4), (1,3)(2,4) ] );; [127X[104X
    [4X[25Xgap>[125X [27XSetName(s4,"s4");  SetName(a4,"a4");  SetName(k4,"k4"); [127X[104X
    [4X[25Xgap>[125X [27XX4 := XModByNormalSubgroup( s4, a4 );[127X[104X
    [4X[28X[a4->s4][128X[104X
    [4X[25Xgap>[125X [27XY4 := SubXMod( X4, k4, a4 ); [127X[104X
    [4X[28X[k4->a4][128X[104X
    [4X[25Xgap>[125X [27XIsNormal(X4,Y4);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XNX4 := NormalSubXMods( X4 );;[127X[104X
    [4X[25Xgap>[125X [27XLength( NX4 ); [127X[104X
    [4X[28X5[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X2.2 [33X[0;0YPre-crossed modules[133X[101X
  
  [1X2.2-1 PreXModByBoundaryAndAction[101X
  
  [29X[2XPreXModByBoundaryAndAction[102X( [3Xbdy[103X, [3Xact[103X ) [32X operation
  [29X[2XSubPreXMod[102X( [3XX0[103X, [3Xsrc[103X, [3Xrng[103X ) [32X operation
  
  [33X[0;0YIf  axiom [22XXMod 2[122X is [13Xnot[113X satisfied, the corresponding structure is known as a
  [13Xpre-crossed module[113X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xb1 := (11,12,13,14,15,16,17,18);;  b2 := (12,18)(13,17)(14,16);;[127X[104X
    [4X[25Xgap>[125X [27Xd16 := Group( b1, b2 );;[127X[104X
    [4X[25Xgap>[125X [27Xsk4 := Subgroup( d16, [ b1^4, b2 ] );;[127X[104X
    [4X[25Xgap>[125X [27XSetName( d16, "d16" );  SetName( sk4, "sk4" );[127X[104X
    [4X[25Xgap>[125X [27Xbdy16 := GroupHomomorphismByImages( d16, sk4, [b1,b2], [b1^4,b2] );;[127X[104X
    [4X[25Xgap>[125X [27Xaut1 := GroupHomomorphismByImages( d16, d16, [b1,b2], [b1^5,b2] );;[127X[104X
    [4X[25Xgap>[125X [27Xaut2 := GroupHomomorphismByImages( d16, d16, [b1,b2], [b1,b2^4*b2] );;[127X[104X
    [4X[25Xgap>[125X [27Xaut16 := Group( [ aut1, aut2 ] );;[127X[104X
    [4X[25Xgap>[125X [27Xact16 := GroupHomomorphismByImages( sk4, aut16, [b1^4,b2], [aut1,aut2] );;[127X[104X
    [4X[25Xgap>[125X [27XP16 := PreXModByBoundaryAndAction( bdy16, act16 );[127X[104X
    [4X[28X[d16->sk4][128X[104X
    [4X[25Xgap>[125X [27XIsXMod(P16);[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.2-2 PeifferSubgroup[101X
  
  [29X[2XPeifferSubgroup[102X( [3XX0[103X ) [32X attribute
  [29X[2XXModByPeifferQuotient[102X( [3Xprexmod[103X ) [32X attribute
  
  [33X[0;0YThe  [13XPeiffer  subgroup[113X  of  a  pre-crossed  module [22XP[122X of [22XS[122X is the subgroup of
  [22Xker(∂)[122X generated by [13XPeiffer commutators[113X[133X
  
  
        [33X[1;6Y[24X[33X[0;0Y\lfloor s_1,s_2 \rfloor ~=~ (s_1^{-1})^{\partial s_2}~s_2^{-1}~s_1~s_2
        ~=~ \langle \partial s_2, s_1 \rangle\ [s_1,s_2]~.[133X [124X[133X
  
  
  [33X[0;0YThen  [22XmathcalP  =  (0  :  P  -> {1_R})[122X is a normal sub-pre-crossed module of
  [22XmathcalX[122X and [22XmathcalX/mathcalP = (∂ : S/P -> R)[122X is a crossed module.[133X
  
  [33X[0;0YIn the following example the Peiffer subgroup is cyclic of size [22X4[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XP := PeifferSubgroup( P16 );[127X[104X
    [4X[28XGroup( [ (11,15)(12,16)(13,17)(14,18), (11,17,15,13)(12,18,16,14) ] )[128X[104X
    [4X[25Xgap>[125X [27XX16 := XModByPeifferQuotient( P16 );[127X[104X
    [4X[28X[D16/P->sk4][128X[104X
    [4X[25Xgap>[125X [27XDisplay( X16 );[127X[104X
    [4X[28XCrossed module [D16/P->sk4] :-[128X[104X
    [4X[28X: Source group has generators:[128X[104X
    [4X[28X  [ f1, f2 ][128X[104X
    [4X[28X: Range group has generators:[128X[104X
    [4X[28X  [ (11,15)(12,16)(13,17)(14,18), (12,18)(13,17)(14,16) ][128X[104X
    [4X[28X: Boundary homomorphism maps source generators to:[128X[104X
    [4X[28X  [ (12,18)(13,17)(14,16), (11,15)(12,16)(13,17)(14,18) ][128X[104X
    [4X[28X  The automorphism group is trivial[128X[104X
    [4X[25Xgap>[125X [27Xiso16 := IsomorphismPermGroup( Source( X16 ) );;[127X[104X
    [4X[25Xgap>[125X [27XS16 := Image( iso16 );[127X[104X
    [4X[28XGroup([ (1,2), (3,4) ])   [128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X2.3 [33X[0;0YCat1-groups and pre-cat1-groups[133X[101X
  
  [1X2.3-1 Source[101X
  
  [29X[2XSource[102X( [3XC[103X ) [32X attribute
  [29X[2XRange[102X( [3XC[103X ) [32X attribute
  [29X[2XTailMap[102X( [3XC[103X ) [32X attribute
  [29X[2XHeadMap[102X( [3XC[103X ) [32X attribute
  [29X[2XRangeEmbedding[102X( [3XC[103X ) [32X attribute
  [29X[2XKernelEmbedding[102X( [3XC[103X ) [32X attribute
  [29X[2XBoundary[102X( [3XC[103X ) [32X attribute
  [29X[2XName[102X( [3XC[103X ) [32X attribute
  [29X[2XSize[102X( [3XC[103X ) [32X attribute
  
  [33X[0;0YThese are the attributes of a cat1-group [22XmathcalC[122X in this implementation.[133X
  
  [33X[0;0YIn  [Lod82],  Loday  reformulated  the  notion  of  a  crossed  module  as a
  cat1-group,  namely  a  group  [22XG[122X  with  a pair of homomorphisms [22Xt,h : G -> G[122X
  having a common image [22XR[122X and satisfying certain axioms. We find it convenient
  to  define  a cat1-group [22XmathcalC = (e;t,h : G -> R )[122X as having source group
  [22XG[122X,  range group [22XR[122X, and three homomorphisms: two surjections [22Xt,h : G -> R[122X and
  an embedding [22Xe : R -> G[122X satisfying:[133X
  
  
        [33X[1;6Y[24X[33X[0;0Y{\bf Cat\ 1} : ~t \circ e ~=~ h \circ e = {\rm id}_R, \qquad {\bf Cat\
        2} : ~[\ker t, \ker h] ~=~ \{ 1_G \}.[133X [124X[133X
  
  
  [33X[0;0YIt follows that [22X~t ∘ e ∘ h = h[122X,~ [22Xh ∘ e ∘ t = t[122X, [22X~t ∘ e ∘ t = t[122X,~ [22Xh ∘ e ∘ h =
  h[122X.[133X
  
  [33X[0;0YThe  maps  [22Xt,h[122X are often referred to as the [13Xsource[113X and [13Xtarget[113X, but we choose
  to  call  them the [13Xtail[113X and [13Xhead[113X of [22XmathcalC[122X, because [13Xsource[113X is the [5XGAP[105X term
  for the domain of a function. The [10XRangeEmbedding[110X is the embedding of [10XR[110X in [10XG[110X,
  the  [10XKernelEmbedding[110X  is  the  inclusion  of  the  kernel of [10Xt[110X in [10XG[110X, and the
  [10XBoundary[110X is the restriction of [10Xh[110X to the kernel of [10Xt[110X.[133X
  
  [1X2.3-2 Cat1[101X
  
  [29X[2XCat1[102X( [3Xargs[103X ) [32X attribute
  [29X[2XPreCat1ByTailHeadEmbedding[102X( [3Xt[103X, [3Xh[103X, [3Xe[103X ) [32X attribute
  [29X[2XPreCat1ByEndomorphisms[102X( [3Xt[103X, [3Xh[103X ) [32X attribute
  [29X[2XPreCat1ByNormalSubgroup[102X( [3XG[103X, [3XN[103X ) [32X attribute
  [29X[2XCat1ByPeifferQuotient[102X( [3XP[103X ) [32X attribute
  [29X[2XReverse[102X( [3XC0[103X ) [32X attribute
  
  [33X[0;0YThese  are some of the constructors for pre-cat1-groups and cat1-groups. The
  following  listing  shows  an  example  of a cat1-group of pc-groups of size
  [22X[28,12][122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XG2 := SmallGroup( 288, 956 );  SetName( G2, "G2" );[127X[104X
    [4X[28X<pc group of size 288 with 7 generators>[128X[104X
    [4X[25Xgap>[125X [27Xd12 := DihedralGroup( 12 );  SetName( d12, "d12" );[127X[104X
    [4X[28X<pc group of size 12 with 3 generators>[128X[104X
    [4X[25Xgap>[125X [27Xa1 := d12.1;;  a2 := d12.2;;  a3 := d12.3;;  a0 := One( d12 );;[127X[104X
    [4X[25Xgap>[125X [27XgensG2 := GeneratorsOfGroup( G2 );;[127X[104X
    [4X[25Xgap>[125X [27Xt2 := GroupHomomorphismByImages( G2, d12, gensG2,[127X[104X
    [4X[25X>[125X [27X          [ a0, a1*a3, a2*a3, a0, a0, a3, a0 ] );;[127X[104X
    [4X[25Xgap>[125X [27Xh2 := GroupHomomorphismByImages( G2, d12, gensG2,[127X[104X
    [4X[25X>[125X [27X          [ a1*a2*a3, a0, a0, a2*a3, a0, a0, a3^2 ] );;                   [127X[104X
    [4X[25Xgap>[125X [27Xe2 := GroupHomomorphismByImages( d12, G2, [a1,a2,a3],[127X[104X
    [4X[25X>[125X [27X       [ G2.1*G2.2*G2.4*G2.6^2, G2.3*G2.4*G2.6^2*G2.7, G2.6*G2.7^2 ] );[127X[104X
    [4X[28X[ f1, f2, f3 ] -> [ f1*f2*f4*f6^2, f3*f4*f6^2*f7, f6*f7^2 ][128X[104X
    [4X[25Xgap>[125X [27XC2 := PreCat1ByTailHeadEmbedding( t2, h2, e2 );[127X[104X
    [4X[28X[G2=>d12][128X[104X
    [4X[25Xgap>[125X [27XIsCat1( C2 );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XDisplay(C2);[127X[104X
    [4X[28X[128X[104X
    [4X[28XCat1-group [G2=>d12] :- [128X[104X
    [4X[28X: Source group G2 has generators:[128X[104X
    [4X[28X  [ f1, f2, f3, f4, f5, f6, f7 ][128X[104X
    [4X[28X: Range group d12 has generators:[128X[104X
    [4X[28X  [ f1, f2, f3 ][128X[104X
    [4X[28X: tail homomorphism maps source generators to:[128X[104X
    [4X[28X  [ <identity> of ..., f1*f3, f2*f3, <identity> of ..., <identity> of ..., [128X[104X
    [4X[28X  f3, <identity> of ... ][128X[104X
    [4X[28X: head homomorphism maps source generators to:[128X[104X
    [4X[28X  [ f1*f2*f3, <identity> of ..., <identity> of ..., f2*f3, <identity> of ..., [128X[104X
    [4X[28X  <identity> of ..., f3^2 ][128X[104X
    [4X[28X: range embedding maps range generators to:[128X[104X
    [4X[28X  [ f1*f2*f4*f6^2, f3*f4*f6^2*f7, f6*f7^2 ][128X[104X
    [4X[28X: kernel has generators:[128X[104X
    [4X[28X  [ f1, f4, f5, f7 ][128X[104X
    [4X[28X: boundary homomorphism maps generators of kernel to:[128X[104X
    [4X[28X  [ f1*f2*f3, f2*f3, <identity> of ..., f3^2 ][128X[104X
    [4X[28X: kernel embedding maps generators of kernel to:[128X[104X
    [4X[28X  [ f1, f4, f5, f7 ][128X[104X
    [4X[28X[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.3-3 Cat1OfXMod[101X
  
  [29X[2XCat1OfXMod[102X( [3XX0[103X ) [32X attribute
  [29X[2XXModOfCat1[102X( [3XC0[103X ) [32X attribute
  [29X[2XPreCat1OfPreXMod[102X( [3XP0[103X ) [32X attribute
  [29X[2XPreXModOfPreCat1[102X( [3XP0[103X ) [32X attribute
  
  [33X[0;0YThe   category   of  crossed  modules  is  equivalent  to  the  category  of
  cat1-groups,  and the functors between these two categories may be described
  as  follows.  Starting  with  the crossed module [22XmathcalX = (∂ : S -> R)[122X the
  group [22XG[122X is defined as the semidirect product [22XG = R ⋉ S[122X using the action from
  [22XmathcalX[122X, with multiplication rule[133X
  
  
        [33X[1;6Y[24X[33X[0;0Y(r_1,s_1)(r_2,s_2) ~=~ (r_1r_2,{s_1}^{r_2}s_2).[133X [124X[133X
  
  
  [33X[0;0YThe structural morphisms are given by[133X
  
  
        [33X[1;6Y[24X[33X[0;0Yt(r,s) = r, \quad h(r,s) = r (\partial s), \quad er = (r,1).[133X [124X[133X
  
  
  [33X[0;0YOn  the  other hand, starting with a cat1-group [22XmathcalC = (e;t,h : G -> R)[122X,
  we define [22XS = ker t[122X, the range [22XR[122X is unchanged, and [22X∂ = h∣_S[122X. The action of [22XR[122X
  on [22XS[122X is conjugation in [22XG[122X via the embedding of [22XR[122X in [22XG[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XX2 := XModOfCat1( C2 );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( X2 );[127X[104X
    [4X[28X[128X[104X
    [4X[28XCrossed module X([G2=>d12]) :- [128X[104X
    [4X[28X: Source group has generators:[128X[104X
    [4X[28X  [ f1, f4, f5, f7 ][128X[104X
    [4X[28X: Range group d12 has generators:[128X[104X
    [4X[28X  [ f1, f2, f3 ][128X[104X
    [4X[28X: Boundary homomorphism maps source generators to:[128X[104X
    [4X[28X  [ f1*f2*f3, f2*f3, <identity> of ..., f3^2 ][128X[104X
    [4X[28X: Action homomorphism maps range generators to automorphisms:[128X[104X
    [4X[28X  f1 --> { source gens --> [ f1*f5, f4*f5, f5, f7^2 ] }[128X[104X
    [4X[28X  f2 --> { source gens --> [ f1*f5*f7^2, f4, f5, f7 ] }[128X[104X
    [4X[28X  f3 --> { source gens --> [ f1*f7, f4, f5, f7 ] }[128X[104X
    [4X[28X  These 3 automorphisms generate the group of automorphisms.[128X[104X
    [4X[28X: associated cat1-group is [G2=>d12][128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XStructureDescription(X2);[127X[104X
    [4X[28X[ "D24", "D12" ][128X[104X
    [4X[28X[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X2.4 [33X[0;0YSelection of a small cat1-group[133X[101X
  
  [33X[0;0YThe  [10XCat1[110X function may also be used to select a cat1-group from a data file.
  All cat1-structures on groups of size up to [22X70[122X (ordered according to the [5XGAP[105X
  4 numbering of small groups) are stored in a list in file [11Xcat1data.g[111X. Global
  variables  [10XCAT1_LIST_MAX_SIZE  :=  70[110X  and  [10XCAT1_LIST_CLASS_SIZES[110X  are  also
  stored.  The data is read into the list [10XCAT1_LIST[110X only when this function is
  called.[133X
  
  [1X2.4-1 Cat1Select[101X
  
  [29X[2XCat1Select[102X( [3Xsize[103X, [3Xgpnum[103X, [3Xnum[103X ) [32X attribute
  
  [33X[0;0YThe  function  [10XCat1Select[110X  may  be  used  in  three ways. [10XCat1Select( size )[110X
  returns  the  names  of  the  groups with this size, while [10XCat1Select( size,
  gpnum  )[110X prints a list of cat1-structures for this chosen group. [10XCat1Select(
  size, gpnum, num )[110X returns the chosen cat1-group.[133X
  
  [33X[0;0YThe  example  below  is  the  first  case  in which [22Xt ≠ h[122X and the associated
  conjugation crossed module is given by the normal subgroup [10Xc3[110X of [10Xs3[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27X## check the number of groups of size 18[127X[104X
    [4X[25Xgap>[125X [27XL18 := Cat1Select( 18 ); [127X[104X
    [4X[28XUsage:  Cat1Select( size, gpnum, num );[128X[104X
    [4X[28X[ "D18", "C18", "C3 x S3", "(C3 x C3) : C2", "C6 x C3" ][128X[104X
    [4X[25Xgap>[125X [27X## check the number of cat1-structrues on the fourth of these[127X[104X
    [4X[25Xgap>[125X [27XCat1Select( 18, 4 );[127X[104X
    [4X[28XUsage:  Cat1Select( size, gpnum, num );[128X[104X
    [4X[28XThere are 4 cat1-structures for the group (C3 x C3) : C2.[128X[104X
    [4X[28XUsing small generating set [ f1, f2, f2*f3 ] for source of homs.[128X[104X
    [4X[28X[ [range gens], [tail genimages], [head genimages] ] :-[128X[104X
    [4X[28X(1)  [ [ f1 ], [ f1, <identity> of ..., <identity> of ... ], [128X[104X
    [4X[28X  [ f1, <identity> of ..., <identity> of ... ] ][128X[104X
    [4X[28X(2)  [ [ f1, f3 ], [ f1, <identity> of ..., f3 ], [128X[104X
    [4X[28X  [ f1, <identity> of ..., f3 ] ][128X[104X
    [4X[28X(3)  [ [ f1, f3 ], [ f1, <identity> of ..., f3 ], [128X[104X
    [4X[28X  [ f1, f3^2, <identity> of ... ] ][128X[104X
    [4X[28X(4)  [ [ f1, f2, f2*f3 ],  tail = head = identity mapping ][128X[104X
    [4X[28X4[128X[104X
    [4X[25Xgap>[125X [27X## select the third of these cat1-structures [127X[104X
    [4X[25Xgap>[125X [27XC18 := Cat1( 18, 4, 3 );[127X[104X
    [4X[28X[(C3 x C3) : C2=>Group( [ f1, <identity> of ..., f3 ] )][128X[104X
    [4X[25Xgap>[125X [27X## convert from a pc-cat1-group to a permutation cat1-group[127X[104X
    [4X[25Xgap>[125X [27Xiso18 := IsomorphismPermObject( C18 );;[127X[104X
    [4X[25Xgap>[125X [27XPC18 := Image( iso18 );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( PC18 );                     [127X[104X
    [4X[28XCat1-group :- [128X[104X
    [4X[28X: Source group has generators:[128X[104X
    [4X[28X  [ (2,3)(5,6), (4,5,6), (1,2,3) ][128X[104X
    [4X[28X: Range group has generators:[128X[104X
    [4X[28X  [ (2,3), (), (1,2,3) ][128X[104X
    [4X[28X: tail homomorphism maps source generators to:[128X[104X
    [4X[28X  [ (2,3), (), (1,2,3) ][128X[104X
    [4X[28X: head homomorphism maps source generators to:[128X[104X
    [4X[28X  [ (2,3), (1,3,2), (1,2,3) ][128X[104X
    [4X[28X: range embedding maps range generators to:[128X[104X
    [4X[28X  [ (2,3)(5,6), (), (1,2,3) ][128X[104X
    [4X[28X: kernel has generators:[128X[104X
    [4X[28X  [ (4,5,6) ][128X[104X
    [4X[28X: boundary homomorphism maps generators of kernel to:[128X[104X
    [4X[28X  [ (1,3,2) ][128X[104X
    [4X[28X: kernel embedding maps generators of kernel to:[128X[104X
    [4X[28X  [ (4,5,6) ][128X[104X
    [4X[25Xgap>[125X [27Xconvert the result to the associated permutation crossed module [127X[104X
    [4X[25Xgap>[125X [27XX18 := XModByCat1( PC18 );; [127X[104X
    [4X[25Xgap>[125X [27XDisplay( X18 ); [127X[104X
    [4X[28XCrossed module:- [128X[104X
    [4X[28X: Source group has generators:[128X[104X
    [4X[28X  [ (4,5,6) ][128X[104X
    [4X[28X: Range group has generators:[128X[104X
    [4X[28X  [ (2,3), (), (1,2,3) ][128X[104X
    [4X[28X: Boundary homomorphism maps source generators to:[128X[104X
    [4X[28X  [ (1,3,2) ][128X[104X
    [4X[28X: Action homomorphism maps range generators to automorphisms:[128X[104X
    [4X[28X  (2,3) --> { source gens --> [ (4,6,5) ] }[128X[104X
    [4X[28X  () --> { source gens --> [ (4,5,6) ] }[128X[104X
    [4X[28X  (1,2,3) --> { source gens --> [ (4,5,6) ] }[128X[104X
    [4X[28X  These 3 automorphisms generate the group of automorphisms.[128X[104X
    [4X[28X: associated cat1-group is [..=>..][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.4-2 AllCat1sBasic[101X
  
  [29X[2XAllCat1sBasic[102X( [3Xgp[103X ) [32X operation
  
  [33X[0;0YFor  a  group  [22XG[122X of size greater than [22X70[122X which is reasonably straightforward
  this  function  may be used to construct a list of all cat1-group structures
  on  [22XG[122X.  The  operation also attempts to write output to a file in the folder
  [11Xxmod/lib[111X.  (Other  operations in the file [11Xcat1data.gi[111X have been used to deal
  with  the  more  complicated  groups  of  size  up  to [22X70[122X, but these are not
  described here.)[133X
  
  [33X[0;0YVan Luyen Le has a more efficient algorithm, extending the data up to groups
  of size 171, which is expected to appear in a future release of [5XHAP[105X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xgp := SmallGroup( 102, 2 ); [127X[104X
    [4X[28X<pc group of size 102 with 3 generators>[128X[104X
    [4X[25Xgap>[125X [27XStructureDescription( gp ); [127X[104X
    [4X[28X"C3 x D34"[128X[104X
    [4X[25Xgap>[125X [27Xall := AllCat1sBasic( gp );[127X[104X
    [4X[28X#I Edit last line of .../xmod/lib/nn.kk.out to end with ] ] ] ] ][128X[104X
    [4X[28X[ [Group( [ f1, f2, f3 ] )=>Group( [ f1, <identity> of ..., <identity> of ... [128X[104X
    [4X[28X     ] )], [Group( [ f1, f2, f3 ] )=>Group( [ f1, f2, <identity> of ... ] )], [128X[104X
    [4X[28X  [Group( [ f1, f2, f3 ] )=>Group( [ f1, <identity> of ..., f3 ] )], [128X[104X
    [4X[28X  [Group( [ f1, f2, f3 ] )=>Group( [ f1, f2, f3 ] )] ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X2.5 [33X[0;0YMore functions for crossed modules and cat1-groups[133X[101X
  
  [33X[0;0YChapter  [14X4[114X  contains  functions  for  quotient  crossed modules; centre of a
  crossed module; commutator and derived subcrossed modules; etc.[133X
  
  [33X[0;0YHere  we  mention  two  functions for groups which have been extended to the
  two-dimensional case.[133X
  
  [1X2.5-1 IdGroup[101X
  
  [29X[2XIdGroup[102X( [3X2dgroup[103X ) [32X operation
  [29X[2XStructureDescription[102X( [3X2dgroup[103X ) [32X operation
  
  [33X[0;0YThese  functions return two-element lists formed by applying the function to
  the source and range of the 2d-group.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XIdGroup( X16 );[127X[104X
    [4X[28X[ [ 8, 3 ], [ 16, 7 ] ][128X[104X
    [4X[25Xgap>[125X [27XStructureDescription( C2 );[127X[104X
    [4X[28X[ "(S3 x d24) : C2", "d12" ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
