  
  [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;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( [3Xabgrp[103X ) [32X operation
  [29X[2XDirectProduct[102X( [3XX1[103X, [3XX2[103X ) [32X operation
  
  [33X[0;0YHere are the standard constructions which these implement:[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 an 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;0YIn  this implementation the attributes used in the construction of a crossed
  module [10XX0[110X are as follows.[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
  
  [33X[0;0YMore   familiar   attributes  are  [10XSize[110X  and  [10XName[110X,  the  latter  formed  by
  concatenating  the  names  of  the  source  and  range  (if these exist). An
  [10XEnumerator[110X  function  has not been implemented. The [10XDisplay[110X function is used
  to print details of 2d-groups.[133X
  
  [33X[0;0YHere  is  a simple example of an automorphism crossed module, using a cyclic
  group of size five.[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 );[127X[104X
    [4X[28X[ 5, 4 ][128X[104X
    [4X[25Xgap>[125X [27XPrint( RepresentationsOfObject(X1), "\n" );[127X[104X
    [4X[28X[ "IsComponentObjectRep", "IsAttributeStoringRep", "IsPreXModObj" ][128X[104X
    [4X[25Xgap>[125X [27XPrint( KnownPropertiesOfObject(X1), "\n" );[127X[104X
    [4X[28X[ "IsEmpty", "IsTrivial", "IsNonTrivial", "IsFinite", [128X[104X
    [4X[28X  "CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree", [128X[104X
    [4X[28X  "IsPerm2dDomain", "IsPreXMod", "IsXMod", "IsAutomorphismGroup2dDomain" ][128X[104X
    [4X[25Xgap>[125X [27XPrint( KnownAttributesOfObject(X1), "\n" );[127X[104X
    [4X[28X[ "Name", "Size", "Range", "Source", "Boundary", "AutoGroup", "XModAction" ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.1-4 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[22Xs^-1s^m ∈ 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.[133X
  
  
  [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;0YWhen  axiom  {\bf  XMod\ 2} 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 [27Xc := (11,12,13,14,15,16,17,18);;  d := (12,18)(13,17)(14,16);;[127X[104X
    [4X[25Xgap>[125X [27Xd16 := Group( c, d );;[127X[104X
    [4X[25Xgap>[125X [27Xsk4 := Subgroup( d16, [ c^4, d ] );;[127X[104X
    [4X[25Xgap>[125X [27XSetName( d16, "d16" );  SetName( sk4, "sk4" );[127X[104X
    [4X[25Xgap>[125X [27Xbdy16 := GroupHomomorphismByImages( d16, sk4, [c,d], [c^4,d] );;[127X[104X
    [4X[25Xgap>[125X [27Xh1 := GroupHomomorphismByImages( d16, d16, [c,d], [c^5,d] );;[127X[104X
    [4X[25Xgap>[125X [27Xh2 := GroupHomomorphismByImages( d16, d16, [c,d], [c,c^4*d] );;[127X[104X
    [4X[25Xgap>[125X [27Xaut16 := Group( [ h1, h2 ] );;[127X[104X
    [4X[25Xgap>[125X [27Xact16 := GroupHomomorphismByImages( sk4, aut16, [c^4,d], [h1,h2] );;[127X[104X
    [4X[25Xgap>[125X [27XP16 := PreXModByBoundaryAndAction( bdy16 );[127X[104X
    [4X[28X[d16->sk4][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\langle s_1,s_2 \rangle \quad=\quad (s_1^{-1})^{\partial
        s_2}~s_2^{-1}~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.2-3 IsPermXMod[101X
  
  [29X[2XIsPermXMod[102X( [3XX0[103X ) [32X property
  [29X[2XIsPcPreXMod[102X( [3XX0[103X ) [32X property
  
  [33X[0;0YWhen  both  source  and  range  groups  are  of the same type, corresponding
  properties are assigned to the crossed module.[133X
  
  
  [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} : te = he = {\rm id}_R, \qquad {\bf Cat\ 2} : [\ker t,
        \ker h] = \{ 1_G \}.[133X [124X[133X
  
  
  [33X[0;0YIt follows that [22Xteh = h[122X, [22Xhet = t[122X, [22Xtet = t[122X, [22Xheh = 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.[133X
  
  [33X[0;0YThe following listing shows an example of a cat1-group of pc-groups:[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xs3 := SymmetricGroup(IsPcGroup,3);;   [127X[104X
    [4X[25Xgap>[125X [27Xgens3 := GeneratorsOfGroup(s3);[127X[104X
    [4X[28X[ f1, f2 ][128X[104X
    [4X[25Xgap>[125X [27Xpc4 := CyclicGroup(4);; [127X[104X
    [4X[25Xgap>[125X [27XSetName(s3,"s3");  SetName( pc4, "pc4" );[127X[104X
    [4X[25Xgap>[125X [27Xs3c4 := DirectProduct( s3, pc4 );; [127X[104X
    [4X[25Xgap>[125X [27XSetName( s3c4, "s3c4" );  [127X[104X
    [4X[25Xgap>[125X [27Xgens3c4 := GeneratorsOfGroup( s3c4 );[127X[104X
    [4X[28X[ f1, f2, f3, f4 ][128X[104X
    [4X[25Xgap>[125X [27Xa := gens3[1];;  b := gens3[2];;  one := One(s3);;[127X[104X
    [4X[25Xgap>[125X [27Xt2 := GroupHomomorphismByImages( s3c4, s3, gens3c4, [a,b,one,one] );[127X[104X
    [4X[28X[ f1, f2, f3, f4 ] -> [ f1, f2, &lt;identity&gt; of ..., &lt;identity&gt; of ... ][128X[104X
    [4X[25Xgap>[125X [27Xe2 := Embedding( s3c4, 1 );[127X[104X
    [4X[28X[ f1, f2 ] -> [ f1, f2 ][128X[104X
    [4X[25Xgap>[125X [27XC2 := Cat1( t2, t2, e2 );[127X[104X
    [4X[28X[s3c4=>s3][128X[104X
    [4X[25Xgap>[125X [27XDisplay( C2 );[127X[104X
    [4X[28XCat1-group [s3c4=>s3] :-[128X[104X
    [4X[28X: Source group s3c4 has generators:[128X[104X
    [4X[28X  [ f1, f2, f3, f4 ][128X[104X
    [4X[28X: Range group s3 has generators:[128X[104X
    [4X[28X  [ f1, f2 ][128X[104X
    [4X[28X: tail homomorphism maps source generators to:[128X[104X
    [4X[28X  [ f1, f2, &lt;identity&gt; of ..., &lt;identity&gt; of ... ][128X[104X
    [4X[28X: head homomorphism maps source generators to:[128X[104X
    [4X[28X  [ f1, f2, &lt;identity&gt; of ..., &lt;identity&gt; of ... ][128X[104X
    [4X[28X: range embedding maps range generators to:[128X[104X
    [4X[28X  [ f1, f2 ][128X[104X
    [4X[28X: kernel has generators:[128X[104X
    [4X[28X  [ f3, f4 ][128X[104X
    [4X[28X: boundary homomorphism maps generators of kernel to:[128X[104X
    [4X[28X  [ &lt;identity&gt; of ..., &lt;identity&gt; of ... ][128X[104X
    [4X[28X: kernel embedding maps generators of kernel to:[128X[104X
    [4X[28X  [ f3, f4 ][128X[104X
    [4X[28X: associated crossed module is [ker(t2)->s3][128X[104X
    [4X[25Xgap>[125X [27XIsPcCat1( C2 );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XSize( C2 );[127X[104X
    [4X[28X[ 24, 6 ][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 remains 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 [27XSetName( Kernel( t2 ), "ker(t2)" );;[127X[104X
    [4X[25Xgap>[125X [27XX2 := XModOfCat1( C2 );[127X[104X
    [4X[28X[Group( [ f3, f4 ] )->s3][128X[104X
    [4X[25Xgap>[125X [27XDisplay( X2 );[127X[104X
    [4X[28XCrossed module [ker(t2)->s3] :-[128X[104X
    [4X[28X: Source group has generators:[128X[104X
    [4X[28X  [ f3, f4 ][128X[104X
    [4X[28X: Range group s3 has generators:[128X[104X
    [4X[28X  [ f1, f2 ][128X[104X
    [4X[28X: Boundary homomorphism maps source generators to:[128X[104X
    [4X[28X  [ &lt;identity&gt; of ..., &lt;identity&gt; of ... ][128X[104X
    [4X[28X  The automorphism group is trivial[128X[104X
    [4X[28X: associated cat1-group is [s3c4=>s3][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  (or just [10XCat1( 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[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[28X[128X[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[28X[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[28X[128X[104X
    [4X[28XCrossed module X([..=>..]) :- [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[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[25Xgap>[125X [27XDisplay( all[3] ); [127X[104X
    [4X[28X[128X[104X
    [4X[28XCat1-group [..=>..] :- [128X[104X
    [4X[28X: Source group has generators:[128X[104X
    [4X[28X  [ f1, f2, f3 ][128X[104X
    [4X[28X: Range group has generators:[128X[104X
    [4X[28X  [ f1, <identity> of ..., f3 ][128X[104X
    [4X[28X: tail homomorphism maps source generators to:[128X[104X
    [4X[28X  [ f1, <identity> of ..., f3 ][128X[104X
    [4X[28X: head homomorphism maps source generators to:[128X[104X
    [4X[28X  [ f1, <identity> of ..., f3 ][128X[104X
    [4X[28X: range embedding maps range generators to:[128X[104X
    [4X[28X  [ f1, <identity> of ..., f3 ][128X[104X
    [4X[28X: kernel has generators:[128X[104X
    [4X[28X  [ f2 ][128X[104X
    [4X[28X: boundary homomorphism maps generators of kernel to:[128X[104X
    [4X[28X  [ <identity> of ... ][128X[104X
    [4X[28X: kernel embedding maps generators of kernel to:[128X[104X
    [4X[28X  [ f2 ][128X[104X
    [4X[28X[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
