  
  [1X2 [33X[0;0Y2d-groups : crossed modules and cat1-groups[133X[101X
  
  [33X[0;0YThe term [13X2d-group[113X refers to a set of equivalent categories of which the most
  common   are   the   categories   of   [13Xcrossed   modules[113X;  [13Xcat1-groups[113X;  and
  [13Xgroup-groupoids[113X, all of which involve a pair of groups.[133X
  
  
  [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
  
  
  [24X[33X[0;6Y{\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
  
  [33X[0;0YWhen only the first of these axioms is satisfied, the resulting structure is
  a  [13Xpre-crossed  module[113X (see section [14X2.3[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
  
  [33X[1;0Y[29X[2XXMod[102X( [3Xargs[103X ) [32X function[133X
  [33X[1;0Y[29X[2XXModByBoundaryAndAction[102X( [3Xbdy[103X, [3Xact[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XXModByTrivialAction[102X( [3Xbdy[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XXModByNormalSubgroup[102X( [3XG[103X, [3XN[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XXModByCentralExtension[102X( [3Xbdy[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XXModByAutomorphismGroup[102X( [3Xgrp[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XXModByInnerAutomorphismGroup[102X( [3Xgrp[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XXModByGroupOfAutomorphisms[102X( [3XG[103X, [3XA[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XXModByAbelianModule[102X( [3Xabmod[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XDirectProductOp[102X( [3XL[103X, [3XX1[103X ) [32X operation[133X
  
  [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
  
        [33X[0;6YSince [10XDirectProduct[110X is a global function which only accepts groups, it
        is   necessary   to   provide   an   "other   method"   for  operation
        [10XDirectProductOp[110X which, as usual, takes as parameters a list of crossed
        modules, followed by the first of these: [10XDirectProductOp([X1,X2],X1);[110X[133X
  
  [1X2.1-2 Source[101X
  
  [33X[1;0Y[29X[2XSource[102X( [3XX0[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XRange[102X( [3XX0[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XBoundary[102X( [3XX0[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XXModAction[102X( [3XX0[103X ) [32X attribute[133X
  
  [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[10XXModAction(X0)[110X is a homomorphism from [22XR[122X to a group of automorphisms of
        [10XX0[110X.[133X
  
  [33X[0;0Y(Up  until  version  2.63  there  was an additional attribute [10XAutoGroup[110X, the
  range of [10XXModAction(X0)[110X.)[133X
  
  [1X2.1-3 ImageElmXModAction[101X
  
  [33X[1;0Y[29X[2XImageElmXModAction[102X( [3XX0[103X, [3Xs[103X, [3Xr[103X ) [32X operation[133X
  
  [33X[0;0YThis function returns the element [22Xs^r[122X given by [10XXModAction(X0)[110X.[133X
  
  [1X2.1-4 Size[101X
  
  [33X[1;0Y[29X[2XSize[102X( [3XX0[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XName[102X( [3XX0[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XIdGroup[102X( [3XX0[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XExternalSetXMod[102X( [3XX0[103X ) [32X attribute[133X
  
  [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 [2XExternalSetXMod[102X 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 -> Aut(c5)] [128X[104X
    [4X[25Xgap>[125X [27XDisplay( X1 );[127X[104X
    [4X[28XCrossed module [c5->Aut(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 Aut(c5) has generators:[128X[104X
    [4X[28X  [ GroupHomomorphismByImages( c5, c5, [ (5,6,7,8,9) ], [ (5,7,9,6,8) ] ) ][128X[104X
    [4X[28X: Boundary homomorphism maps source generators to:[128X[104X
    [4X[28X  [ IdentityMapping( c5 ) ][128X[104X
    [4X[28X: Action homomorphism maps range generators to automorphisms:[128X[104X
    [4X[28X  GroupHomomorphismByImages( c5, c5, [ (5,6,7,8,9) ], [128X[104X
    [4X[28X[ (5,7,9,6,8) ] ) --> { 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 [27Xa := GeneratorsOfGroup( Range( X1 ) )[1]^2; [127X[104X
    [4X[28X[ (5,6,7,8,9) ] -> [ (5,9,8,7,6) ][128X[104X
    [4X[25Xgap>[125X [27XImageElmXModAction( X1, (5,7,9,6,8), a );[127X[104X
    [4X[28X(5,8,6,9,7)[128X[104X
    [4X[25Xgap>[125X [27XRepresentationsOfObject( X1 );[127X[104X
    [4X[28X[ "IsComponentObjectRep", "IsAttributeStoringRep", "IsPreXModObj" ][128X[104X
    [4X[25Xgap>[125X [27XKnownAttributesOfObject( X1);[127X[104X
    [4X[28X[ "Name", "Size", "Range", "Source", "IdGroup", "Boundary", "XModAction", [128X[104X
    [4X[28X  "ExternalSetXMod", "IsomorphismPerm2DimensionalGroup" ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X2.2 [33X[0;0YProperties of crossed modules[133X[101X
  
  [33X[0;0YThe  underlying  category  structures  for  the  objects constructed in this
  chapter   follow  the  sequence  [10XIs2DimensionalDomain[110X;  [10XIs2DimensionalMagma[110X;
  [10XIs2DimensionalMagmaWithOne[110X;  [10XIs2DimensionalMagmaWithInverses[110X,  mirroring the
  situation   for   (one-dimensional)   groups.   From   these   we  construct
  [10XIs2DimensionalSemigroup[110X, [10XIs2DimensionalMonoid[110X and [10XIs2DimensionalGroup[110X.[133X
  
  [33X[0;0YThere  are  then  a  variety  of properties associated with crossed modules,
  starting with [10XIsPreXMod[110X and [10XIsXMod[110X.[133X
  
  [1X2.2-1 IsXMod[101X
  
  [33X[1;0Y[29X[2XIsXMod[102X( [3XX0[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsPreXMod[102X( [3XX0[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsPerm2DimensionalGroup[102X( [3XX0[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsPc2DimensionalGroup[102X( [3XX0[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsFp2DimensionalGroup[102X( [3XX0[103X ) [32X property[133X
  
  [33X[0;0YA  structure  which  has [10XIsPerm2DimensionalGroup[110X is a precrossed module or a
  pre-cat1-group (see section [14X2.4[114X) whose source and range are both permutation
  groups.  The  properties  [10XIsPc2DimensionalGroup[110X,  [10XIsFp2DimensionalGroup[110X  are
  defined similarly. In the example below we see that [10XX1[110X has [10XIsPreXMod[110X, [10XIsXMod[110X
  and  [10XIsPerm2DimensionalGroup[110X. There are also properties corresponding to the
  various      construction     methods     listed     in     section     [14X2.1[114X:
  [10XIsTrivialAction2DimensionalGroup[110X;         [10XIsNormalSubgroup2DimensionalGroup[110X;
  [10XIsCentralExtension2DimensionalGroup[110X;   [10XIsAutomorphismGroup2DimensionalGroup[110X;
  [10XIsAbelianModule2DimensionalGroup[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[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", "IsPerm2DimensionalGroup", [128X[104X
    [4X[28X  "IsPreXMod", "IsXMod", "IsAutomorphismGroup2DimensionalGroup" ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.2-2 SubXMod[101X
  
  [33X[1;0Y[29X[2XSubXMod[102X( [3XX0[103X, [3Xsrc[103X, [3Xrng[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XTrivialSubXMod[102X( [3XX0[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XNormalSubXMods[102X( [3XX0[103X ) [32X attribute[133X
  
  [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 precrossed modules is provided. See section [14X4.1[114X
  for factor crossed modules and their natural morphisms.[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.3 [33X[0;0YPre-crossed modules[133X[101X
  
  [1X2.3-1 PreXModByBoundaryAndAction[101X
  
  [33X[1;0Y[29X[2XPreXModByBoundaryAndAction[102X( [3Xbdy[103X, [3Xact[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XSubPreXMod[102X( [3XX0[103X, [3Xsrc[103X, [3Xrng[103X ) [32X operation[133X
  
  [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.3-2 PeifferSubgroup[101X
  
  [33X[1;0Y[29X[2XPeifferSubgroup[102X( [3XX0[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XXModByPeifferQuotient[102X( [3Xprexmod[103X ) [32X attribute[133X
  
  [33X[0;0YThe  [13XPeiffer subgroup[113X [22XP[122X of a pre-crossed module [22Xmathcal X[122X is the subgroup of
  [22Xker(∂)[122X generated by [13XPeiffer commutators[113X[133X
  
  
  [24X[33X[0;6Y\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
  
  [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[28XPeiffer([d16->sk4])[128X[104X
    [4X[25Xgap>[125X [27XDisplay( X16 );[127X[104X
    [4X[28XCrossed module Peiffer([d16->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.4 [33X[0;0YCat1-groups and pre-cat1-groups[133X[101X
  
  [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 endomorphisms [22Xt,h : G -> G[122X
  having  a  common  image  [22XR[122X  and  satisfying  certain  axioms.  We  find  it
  computationally 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
  
  
  [24X[33X[0;6Y{\bf  Cat\ 1} : ~t \circ e ~=~ h \circ e = {\rm id}_R, \qquad {\bf Cat\ 2} :
  ~[\ker t, \ker h] ~=~ \{ 1_G \}.[133X
  
  [124X
  
  [33X[0;0YIt  follows that [22Xt ∘ e ∘ h = h,~ h ∘ e ∘ t = t,~ t ∘ e ∘ t = t~[122X and [22X~h ∘ e ∘
  h = h[122X. (See section [14X2.5[114X for the case when [22Xt,h[122X are endomorphisms.)[133X
  
  [1X2.4-1 Cat1Group[101X
  
  [33X[1;0Y[29X[2XCat1Group[102X( [3Xargs[103X ) [32X function[133X
  [33X[1;0Y[29X[2XPreCat1Group[102X( [3Xargs[103X ) [32X function[133X
  [33X[1;0Y[29X[2XPreCat1GroupByTailHeadEmbedding[102X( [3Xt[103X, [3Xh[103X, [3Xe[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XPreCat1GroupByEndomorphisms[102X( [3Xt[103X, [3Xh[103X ) [32X operation[133X
  
  [33X[0;0YThe  global  functions  [10XCat1Group[110X  and [10XPreCat1Group[110X can be called in various
  ways.[133X
  
  [30X    [33X[0;6Yas  [10XCat1Group(t,h,e);[110X  when  [22Xt,h,e[122X  are  three homomorphisms, which is
        equivalent to [10XPreCat1GroupByTailHeadEmbedding(t,h,e);[110X[133X
  
  [30X    [33X[0;6Yas [10XCat1Group(t,h);[110X when [22Xt,h[122X are two endomorphisms, which is equivalent
        to [10XPreCat1GroupByEndomorphisms(t,h);[110X[133X
  
  [30X    [33X[0;6Yas  [10XCat1Group(t);[110X  when [22Xt=h[122X is an endomorphism, which is equivalent to
        [10XPreCat1GroupByEndomorphisms(t,t);[110X[133X
  
  [30X    [33X[0;6Yas  [10XCat1Group(t,e);[110X  when  [22Xt=h[122X  and  [22Xe[122X  are  homomorphisms,  which  is
        equivalent to [10XPreCat1GroupByTailHeadEmbedding(t,t,e);[110X[133X
  
  [30X    [33X[0;6Yas  [10XCat1Group(i,j,k);[110X  when [22Xi,j,k[122X are integers, which is equivalent to
        [10XCat1Select(i,j,k);[110X as described in section [14X2.6[114X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xg18gens := [ (1,2,3), (4,5,6), (2,3)(5,6) ];;     [127X[104X
    [4X[25Xgap>[125X [27Xs3agens := [ (7,8,9), (8,9) ];;                [127X[104X
    [4X[25Xgap>[125X [27Xg18 := Group( g18gens );;  SetName( g18, "g18" ); [127X[104X
    [4X[25Xgap>[125X [27Xs3a := Group( s3agens );;  SetName( s3a, "s3a" );[127X[104X
    [4X[25Xgap>[125X [27Xt1 := GroupHomomorphismByImages(g18,s3a,g18gens,[(7,8,9),(),(8,9)]);     [127X[104X
    [4X[28X[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (), (8,9) ][128X[104X
    [4X[25Xgap>[125X [27Xh1 := GroupHomomorphismByImages(g18,s3a,g18gens,[(7,8,9),(7,8,9),(8,9)]);[127X[104X
    [4X[28X[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (7,8,9), (8,9) ][128X[104X
    [4X[25Xgap>[125X [27Xe1 := GroupHomomorphismByImages(s3a,g18,s3agens,[(1,2,3),(2,3)(5,6)]);   [127X[104X
    [4X[28X[ (7,8,9), (8,9) ] -> [ (1,2,3), (2,3)(5,6) ][128X[104X
    [4X[25Xgap>[125X [27XC18 := Cat1Group( t1, h1, e1 );[127X[104X
    [4X[28X[g18=>s3a][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.4-2 Source[101X
  
  [33X[1;0Y[29X[2XSource[102X( [3XC[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XRange[102X( [3XC[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XTailMap[102X( [3XC[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XHeadMap[102X( [3XC[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XRangeEmbedding[102X( [3XC[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XKernelEmbedding[102X( [3XC[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XBoundary[102X( [3XC[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XName[102X( [3XC[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XSize[102X( [3XC[103X ) [32X attribute[133X
  
  [33X[0;0YThese are the attributes of a cat1-group [22XmathcalC[122X in this implementation.[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. It is frequently the
  case that [22Xt=h[122X, but not in the example [10XC18[110X above.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XSource( C18 );[127X[104X
    [4X[28Xg18[128X[104X
    [4X[25Xgap>[125X [27XRange( C18 );[127X[104X
    [4X[28Xs3a[128X[104X
    [4X[25Xgap>[125X [27XTailMap( C18 );[127X[104X
    [4X[28X[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (), (8,9) ][128X[104X
    [4X[25Xgap>[125X [27XHeadMap( C18 );[127X[104X
    [4X[28X[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (7,8,9), (8,9) ][128X[104X
    [4X[25Xgap>[125X [27XRangeEmbedding( C18 );[127X[104X
    [4X[28X[ (7,8,9), (8,9) ] -> [ (1,2,3), (2,3)(5,6) ][128X[104X
    [4X[25Xgap>[125X [27XKernel( C18 );[127X[104X
    [4X[28XGroup([ (4,5,6) ])[128X[104X
    [4X[25Xgap>[125X [27XKernelEmbedding( C18 );[127X[104X
    [4X[28X[ (4,5,6) ] -> [ (4,5,6) ][128X[104X
    [4X[25Xgap>[125X [27XName( C18 );[127X[104X
    [4X[28X"[g18=>s3a]"[128X[104X
    [4X[25Xgap>[125X [27XSize( C18 );[127X[104X
    [4X[28X[ 18, 6 ][128X[104X
    [4X[25Xgap>[125X [27XStructureDescription( C18 );[127X[104X
    [4X[28X[ "(C3 x C3) : C2", "S3" ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.4-3 DiagonalCat1Group[101X
  
  [33X[1;0Y[29X[2XDiagonalCat1Group[102X( [3Xgen1[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XPreCat1GroupByNormalSubgroup[102X( [3XG[103X, [3XN[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XCat1GroupByPeifferQuotient[102X( [3XP[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XReverseCat1Group[102X( [3XC0[103X ) [32X attribute[133X
  
  [33X[0;0YThese  are  some  more  constructors  for cat1-groups. The following listing
  shows  an  example  of a permutation cat1-group of size [22X[576,24][122X with source
  group  [22XS_4  × S_4[122X, range group a third [22XS_4[122X, and [22Xt ≠ h[122X. A similar example may
  be reproduced using the command [10XC := DiagonalCat1Group([(1,2,3,4),(3,4)]);[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XG4 := Group( (1,2,3,4), (3,4), (5,6,7,8), (7,8) );; [127X[104X
    [4X[25Xgap>[125X [27XR4 := Group( (9,10,11,12), (11,12) );;[127X[104X
    [4X[25Xgap>[125X [27XSetName( G4, "s4s4" );  SetName( R4, "s4d" ); [127X[104X
    [4X[25Xgap>[125X [27XG4gens := GeneratorsOfGroup( G4 );; [127X[104X
    [4X[25Xgap>[125X [27XR4gens := GeneratorsOfGroup( R4 );; [127X[104X
    [4X[25Xgap>[125X [27Xt := GroupHomomorphismByImages( G4, R4, G4gens, [127X[104X
    [4X[25X>[125X [27X           Concatenation( R4gens, [ (), () ] ) );; [127X[104X
    [4X[25Xgap>[125X [27Xh := GroupHomomorphismByImages( G4, R4, G4gens,  [127X[104X
    [4X[25X>[125X [27X           Concatenation( [ (), () ], R4gens ) );; [127X[104X
    [4X[25Xgap>[125X [27Xe := GroupHomomorphismByImages( R4, G4, R4gens, [127X[104X
    [4X[25X>[125X [27X           [ (1,2,3,4)(5,6,7,8), (3,4)(7,8) ] );; [127X[104X
    [4X[25Xgap>[125X [27XC4 := PreCat1GroupByTailHeadEmbedding( t, h, e );; [127X[104X
    [4X[25Xgap>[125X [27XDisplay(C4);[127X[104X
    [4X[28XCat1-group [s4s4=>s4d] :- [128X[104X
    [4X[28X: Source group s4s4 has generators:[128X[104X
    [4X[28X  [ (1,2,3,4), (3,4), (5,6,7,8), (7,8) ][128X[104X
    [4X[28X: Range group s4d has generators:[128X[104X
    [4X[28X  [ ( 9,10,11,12), (11,12) ][128X[104X
    [4X[28X: tail homomorphism maps source generators to:[128X[104X
    [4X[28X  [ ( 9,10,11,12), (11,12), (), () ][128X[104X
    [4X[28X: head homomorphism maps source generators to:[128X[104X
    [4X[28X  [ (), (), ( 9,10,11,12), (11,12) ][128X[104X
    [4X[28X: range embedding maps range generators to:[128X[104X
    [4X[28X  [ (1,2,3,4)(5,6,7,8), (3,4)(7,8) ][128X[104X
    [4X[28X: kernel has generators:[128X[104X
    [4X[28X  [ (5,6,7,8), (7,8) ][128X[104X
    [4X[28X: boundary homomorphism maps generators of kernel to:[128X[104X
    [4X[28X  [ ( 9,10,11,12), (11,12) ][128X[104X
    [4X[28X: kernel embedding maps generators of kernel to:[128X[104X
    [4X[28X  [ (5,6,7,8), (7,8) ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X2.5 [33X[0;0YProperties of cat1-groups and pre-cat1-groups[133X[101X
  
  [33X[0;0YMany of the properties listed in section [14X2.2[114X apply to pre-cat1-groups and to
  cat1-groups  since  these  are  also 2d-groups. There are also more specific
  properties.[133X
  
  [1X2.5-1 IsCat1Group[101X
  
  [33X[1;0Y[29X[2XIsCat1Group[102X( [3XC0[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsPreXCat1Group[102X( [3XC0[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsIdentityCat1Group[102X( [3XC0[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsEndomorphismPreCat1Group[102X( [3XC0[103X ) [32X property[133X
  [33X[1;0Y[29X[2XEndomorphismPreCat1Group[102X( [3XC0[103X ) [32X attribute[133X
  
  [33X[0;0Y[10XIsIdentityCat1Group(C0)[110X  is  true  when  the  head  and  tail maps of [10XC0[110X are
  identity  mappings. [10XIsEndomorphismPreCat1Group(C0)[110X is true when the range of
  [10XC0[110X  is  a subgroup of the source. When this is not the case, replacing [22Xt,h,e[122X
  by  [22Xt*e,h*e[122X  and the inclusion mapping of the image of [22Xe[122X gives an isomorphic
  cat1-group for which [10XIsEndomorphismPreCat1Group[110X is true.[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 := PreCat1GroupByTailHeadEmbedding( t2, h2, e2 );[127X[104X
    [4X[28X[G2=>d12][128X[104X
    [4X[25Xgap>[125X [27XIsCat1Group( C2 );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XKnownPropertiesOfObject( C2 );[127X[104X
    [4X[28X[ "CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree", [128X[104X
    [4X[28X  "IsGeneratorsOfSemigroup", "IsPreCat1Domain", "IsPerm2DimensionalGroup", [128X[104X
    [4X[28X  "IsPreCat1Group", "IsCat1Group", "IsEndomorphismPreCat1Group" ][128X[104X
    [4X[25Xgap>[125X [27XIsEndomorphismPreCat1Group( C2 );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XEC4 := EndomorphismPreCat1Group( C4 );[127X[104X
    [4X[28X[s4s4=>Group( [ (1,2,3,4)(5,6,7,8), (3,4)(7,8), (), () ] )][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.5-2 Cat1GroupOfXMod[101X
  
  [33X[1;0Y[29X[2XCat1GroupOfXMod[102X( [3XX0[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XXModOfCat1Group[102X( [3XC0[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XPreCat1GroupOfPreXMod[102X( [3XP0[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XPreXModOfPreCat1Group[102X( [3XP0[103X ) [32X attribute[133X
  
  [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
  
  
  [24X[33X[0;6Y(r_1,s_1)(r_2,s_2) ~=~ (r_1r_2,{s_1}^{r_2}s_2).[133X
  
  [124X
  
  [33X[0;0YThe structural morphisms are given by[133X
  
  
  [24X[33X[0;6Yt(r,s) = r, \quad h(r,s) = r (\partial s), \quad er = (r,1).[133X
  
  [124X
  
  [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 := XModOfCat1Group( 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.6 [33X[0;0YSelection of a small cat1-group[133X[101X
  
  [33X[0;0YThe  [10XCat1Group[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.6-1 Cat1Select[101X
  
  [33X[1;0Y[29X[2XCat1Select[102X( [3Xsize[103X, [3Xgpnum[103X, [3Xnum[103X ) [32X operation[133X
  
  [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-structures 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 := Cat1Group( 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 := XModOfCat1Group( 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.6-2 AllCat1DataGroupsBasic[101X
  
  [33X[1;0Y[29X[2XAllCat1DataGroupsBasic[102X( [3Xgp[103X ) [32X operation[133X
  
  [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 := AllCat1DataGroupsBasic( 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.7 [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.7-1 IdGroup[101X
  
  [33X[1;0Y[29X[2XIdGroup[102X( [3X2DimensionalGroup[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XStructureDescription[102X( [3X2DimensionalGroup[103X ) [32X operation[133X
  
  [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( X2 );[127X[104X
    [4X[28X[ [ 24, 6 ], [ 12, 4 ] ][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
  
