[1X2 2d-objects[0X [1X2.1 Constructions for crossed modules[0X A crossed module mathcalX = (partial : S -> R ) consists of a group homomorphism partial, called the [13Xboundary[0m of mathcalX, with [13Xsource[0m S and [13Xrange[0m R. The Group R acts on itself by conjugation, and on S by an action alpha : R -> Aut(S) such that, for all s,s_1,s_2 in S and r in R, {\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}. The kernel of partial is abelian. There are a variety of constructors for crossed modules: [1X2.1-1 XMod[0m [2X> XMod( [0X[3Xargs[0X[2X ) _____________________________________________________[0Xfunction [2X> XModByBoundaryAndAction( [0X[3Xbdy, act[0X[2X ) _____________________________[0Xoperation [2X> XModByTrivialAction( [0X[3Xbdy[0X[2X ) ______________________________________[0Xoperation [2X> XModByNormalSubgroup( [0X[3XG, N[0X[2X ) ____________________________________[0Xoperation [2X> XModByCentralExtension( [0X[3Xbdy[0X[2X ) ___________________________________[0Xoperation [2X> XModByAutomorphismGroup( [0X[3Xgrp[0X[2X ) __________________________________[0Xoperation [2X> XModByInnerAutomorphismGroup( [0X[3Xgrp[0X[2X ) _____________________________[0Xoperation [2X> XModByGroupOfAutomorphisms( [0X[3XG, A[0X[2X ) ______________________________[0Xoperation [2X> XModByAbelianModule( [0X[3Xabgrp[0X[2X ) ____________________________________[0Xoperation [2X> DirectProduct( [0X[3XX1, X2[0X[2X ) _________________________________________[0Xoperation Here are the standard constructions which these implement: -- A [13Xconjugation crossed module[0m is an inclusion of a normal subgroup S unlhd R, where R acts on S by conjugation. -- A [13Xcentral extension crossed module[0m has as boundary a surjection partial : S -> R with central kernel, where r in R acts on S by conjugation with partial^-1r. -- An [13Xautomorphism crossed module[0m has as range a subgroup R of the automorphism group Aut(S) of S which contains the inner automorphism group of S. The boundary maps s in S to the inner automorphism of S by s. -- A [13Xtrivial action crossed module[0m partial : S -> R has s^r = s for all s in S, r in R, the source is abelian and the image lies in the centre of the range. -- A [13Xcrossed abelian module[0m has an abelian module as source and the zero map as boundary. -- The direct product mathcalX_1 x mathcalX_2 of two crossed modules has source S_1 x S_2, range R_1 x R_2 and boundary partial_1 x partial_2, with R_1, R_2 acting trivially on S_2, S_1 respectively. [1X2.1-2 Source[0m [2X> Source( [0X[3XX0[0X[2X ) ____________________________________________________[0Xattribute [2X> Range( [0X[3XX0[0X[2X ) _____________________________________________________[0Xattribute [2X> Boundary( [0X[3XX0[0X[2X ) __________________________________________________[0Xattribute [2X> AutoGroup( [0X[3XX0[0X[2X ) _________________________________________________[0Xattribute [2X> XModAction( [0X[3XX0[0X[2X ) ________________________________________________[0Xattribute In this implementation the attributes used in the construction of a crossed module [10XX0[0m are as follows. -- [10XSource(X0)[0m and [10XRange(X0)[0m are the source S and range R of partial, the boundary [10XBoundary(X0)[0m; -- [10XAutoGroup(X0)[0m is a group of automorphisms of S; -- [10XXModAction(X0)[0m is a homomorphism from R to [10XAutoGroup(X0)[0m. [1X2.1-3 Size[0m [2X> Size( [0X[3XX0[0X[2X ) ______________________________________________________[0Xattribute [2X> Name( [0X[3XX0[0X[2X ) ______________________________________________________[0Xattribute More familiar attributes are [10XSize[0m and [10XName[0m, the latter formed by concatenating the names of the source and range (if these exist). An [10XEnumerator[0m function has not been implemented. The [10XDisplay[0m function is used to print details of [10X2d-objects[0m. Here is a simple example of an automorphism crossed module, using a cyclic group of size five. [4X--------------------------- Example ----------------------------[0X [4X[0X [4Xgap> c5 := Group( (5,6,7,8,9) );;[0X [4Xgap> SetName( c5, "c5" );[0X [4Xgap> X1 := XModByAutomorphismGroup( c5 );[0X [4X[c5 -> PAut(c5)] [0X [4Xgap> Display( X1 );[0X [4XCrossed module [c5 -> PAut(c5)] :-[0X [4X: Source group c5 has generators:[0X [4X [ (5,6,7,8,9) ][0X [4X: Range group PAut(c5) has generators:[0X [4X [ (1,2,4,3) ][0X [4X: Boundary homomorphism maps source generators to:[0X [4X [ () ][0X [4X: Action homomorphism maps range generators to automorphisms:[0X [4X (1,2,4,3) --> { source gens --> [ (5,7,9,6,8) ] }[0X [4X This automorphism generates the group of automorphisms.[0X [4Xgap> Size( X1 );[0X [4X[ 5, 4 ][0X [4Xgap> Print( RepresentationsOfObject(X1), "\n" );[0X [4X[ "IsComponentObjectRep", "IsAttributeStoringRep", "IsPreXModObj" ][0X [4Xgap> Print( KnownPropertiesOfObject(X1), "\n" );[0X [4X[ "Is2dObject", "IsPerm2dObject", "IsPreXMod", "IsXMod",[0X [4X "IsTrivialAction2dObject", "IsAutomorphismGroup2dObject" ][0X [4Xgap> Print( KnownAttributesOfObject(X1), "\n" );[0X [4X[ "Name", "Size", "Range", "Source", "Boundary", "AutoGroup", "XModAction" ][0X [4X[0X [4X------------------------------------------------------------------[0X [1X2.1-4 SubXMod[0m [2X> SubXMod( [0X[3XX0, src, rng[0X[2X ) _________________________________________[0Xoperation [2X> IdentitySubXMod( [0X[3XX0[0X[2X ) ___________________________________________[0Xattribute [2X> NormalSubXMods( [0X[3XX0[0X[2X ) ____________________________________________[0Xattribute With the standard crossed module constructors listed above as building blocks, sub-crossed modules, normal sub-crossed modules mathcalN lhd mathcalX, and also quotients mathcalX/mathcalN may be constructed. A sub-crossed module mathcalS = (delta : N -> M) is [13Xnormal[0m in mathcalX = (partial : S -> R) if -- N,M are normal subgroups of S,R respectively, -- delta is the restriction of partial, -- n^r in N for all n in N,~r in R, -- s^-1s^m in N for all m in M,~s in S. These conditions ensure that M ltimes N is normal in the semidirect product R ltimes S. [1X2.2 Pre-crossed modules[0X [1X2.2-1 PreXModByBoundaryAndAction[0m [2X> PreXModByBoundaryAndAction( [0X[3Xbdy, act[0X[2X ) __________________________[0Xoperation [2X> SubPreXMod( [0X[3XX0, src, rng[0X[2X ) ______________________________________[0Xoperation When axiom {\bf XMod\ 2} is [13Xnot[0m satisfied, the corresponding structure is known as a [13Xpre-crossed module[0m. [4X--------------------------- Example ----------------------------[0X [4X[0X [4Xgap> c := (11,12,13,14,15,16,17,18);; d := (12,18)(13,17)(14,16);;[0X [4Xgap> d16 := Group( c, d );;[0X [4Xgap> sk4 := Subgroup( d16, [ c^4, d ] );;[0X [4Xgap> SetName( d16, "d16" ); SetName( sk4, "sk4" );[0X [4Xgap> bdy16 := GroupHomomorphismByImages( d16, sk4, [c,d], [c^4,d] );;[0X [4Xgap> h1 := GroupHomomorphismByImages( d16, d16, [c,d], [c^5,d] );;[0X [4Xgap> h2 := GroupHomomorphismByImages( d16, d16, [c,d], [c,c^4*d] );;[0X [4Xgap> aut16 := Group( [ h1, h2 ] );;[0X [4Xgap> act16 := GroupHomomorphismByImages( sk4, aut16, [c^4,d], [h1,h2] );;[0X [4Xgap> P16 := PreXModByBoundaryAndAction( bdy16 );[0X [4X[d16->sk4][0X [4X[0X [4X------------------------------------------------------------------[0X [1X2.2-2 PeifferSubgroup[0m [2X> PeifferSubgroup( [0X[3XX0[0X[2X ) ___________________________________________[0Xattribute [2X> XModByPeifferQuotient( [0X[3Xprexmod[0X[2X ) ________________________________[0Xattribute The [13XPeiffer subgroup[0m of a pre-crossed module P of S is the subgroup of ker(partial) generated by [13XPeiffer commutators[0m \langle s_1,s_2 \rangle \quad=\quad (s_1^{-1})^{\partial s_2}~s_2^{-1}~s_1~s_2~. Then mathcalP = (0 : P -> {1_R}) is a normal sub-pre-crossed module of mathcalX and mathcalX/mathcalP = (partial : S/P -> R) is a crossed module. In the following example the Peiffer subgroup is cyclic of size 4. [4X--------------------------- Example ----------------------------[0X [4X[0X [4Xgap> P := PeifferSubgroup( P16 );[0X [4XGroup( [ (11,15)(12,16)(13,17)(14,18), (11,17,15,13)(12,18,16,14) ] )[0X [4Xgap> X16 := XModByPeifferQuotient( P16 );[0X [4X[d16/P->sk4][0X [4Xgap> Display( X16 );[0X [4XCrossed module [d16/P->sk4] :-[0X [4X: Source group has generators:[0X [4X [ f1, f2 ][0X [4X: Range group has generators:[0X [4X [ (11,15)(12,16)(13,17)(14,18), (12,18)(13,17)(14,16) ][0X [4X: Boundary homomorphism maps source generators to:[0X [4X [ (12,18)(13,17)(14,16), (11,15)(12,16)(13,17)(14,18) ][0X [4X The automorphism group is trivial[0X [4Xgap> iso16 := IsomorphismPermGroup( Source( X16 ) );;[0X [4Xgap> S16 := Image( iso16 );[0X [4XGroup([ (1,3)(2,4), (1,2)(3,4) ]) [0X [4X[0X [4X------------------------------------------------------------------[0X [1X2.2-3 IsPermXMod[0m [2X> IsPermXMod( [0X[3XX0[0X[2X ) _________________________________________________[0Xproperty [2X> IsPcPreXMod( [0X[3XX0[0X[2X ) ________________________________________________[0Xproperty When both source and range groups are of the same type, corresponding properties are assigned to the crossed module. [1X2.3 Cat1-groups and pre-cat1-groups[0X [1X2.3-1 Source[0m [2X> Source( [0X[3XC[0X[2X ) _____________________________________________________[0Xattribute [2X> Range( [0X[3XC[0X[2X ) ______________________________________________________[0Xattribute [2X> TailMap( [0X[3XC[0X[2X ) ____________________________________________________[0Xattribute [2X> HeadMap( [0X[3XC[0X[2X ) ____________________________________________________[0Xattribute [2X> RangeEmbedding( [0X[3XC[0X[2X ) _____________________________________________[0Xattribute [2X> KernelEmbedding( [0X[3XC[0X[2X ) ____________________________________________[0Xattribute [2X> Boundary( [0X[3XC[0X[2X ) ___________________________________________________[0Xattribute [2X> Name( [0X[3XC[0X[2X ) _______________________________________________________[0Xattribute [2X> Size( [0X[3XC[0X[2X ) _______________________________________________________[0Xattribute These are the attributes of a cat1-group mathcalC in this implementation. In [Lod82], Loday reformulated the notion of a crossed module as a cat1-group, namely a group G with a pair of homomorphisms t,h : G -> G having a common image R and satisfying certain axioms. We find it convenient to define a cat1-group mathcalC = (e;t,h : G -> R ) as having source group G, range group R, and three homomorphisms: two surjections t,h : G -> R and an embedding e : R -> G satisfying: {\bf Cat\ 1} ~:~ te = he = {\rm id}_R, \qquad {\bf Cat\ 2} ~:~ [\ker t, \ker h] = \{ 1_G \}. It follows that teh = h, het = t, tet = t, heh = h. The maps t,h are often referred to as the [13Xsource[0m and [13Xtarget[0m, but we choose to call them the [13Xtail[0m and [13Xhead[0m of mathcalC, because [13Xsource[0m is the [5XGAP[0m term for the domain of a function. The [10XRangeEmbedding[0m is the embedding of [10XR[0m in [10XG[0m, the [10XKernelEmbedding[0m is the inclusion of the kernel of [10Xt[0m in [10XG[0m, and the [10XBoundary[0m is the restriction of [10Xh[0m to the kernel of [10Xt[0m. [1X2.3-2 Cat1[0m [2X> Cat1( [0X[3Xargs[0X[2X ) ____________________________________________________[0Xattribute [2X> PreCat1ByTailHeadEmbedding( [0X[3Xt, h, e[0X[2X ) ___________________________[0Xattribute [2X> PreCat1ByEndomorphisms( [0X[3Xt, h[0X[2X ) __________________________________[0Xattribute [2X> PreCat1ByNormalSubgroup( [0X[3XG, N[0X[2X ) _________________________________[0Xattribute [2X> Cat1ByPeifferQuotient( [0X[3XP[0X[2X ) ______________________________________[0Xattribute [2X> Reverse( [0X[3XC0[0X[2X ) ___________________________________________________[0Xattribute These 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: [4X--------------------------- Example ----------------------------[0X [4X[0X [4Xgap> s3 := SymmetricGroup(IsPcGroup,3);; [0X [4Xgap> gens3 := GeneratorsOfGroup(s3);[0X [4X[ f1, f2 ][0X [4Xgap> pc4 := CyclicGroup(4);; [0X [4Xgap> SetName(s3,"s3"); SetName( pc4, "pc4" );[0X [4Xgap> s3c4 := DirectProduct( s3, pc4 );; [0X [4Xgap> SetName( s3c4, "s3c4" ); [0X [4Xgap> gens3c4 := GeneratorsOfGroup( s3c4 );[0X [4X[ f1, f2, f3, f4 ][0X [4Xgap> a := gens3[1];; b := gens3[2];; one := One(s3);;[0X [4Xgap> t2 := GroupHomomorphismByImages( s3c4, s3, gens3c4, [a,b,one,one] );[0X [4X[ f1, f2, f3, f4 ] -> [ f1, f2, <identity> of ..., <identity> of ... ][0X [4Xgap> e2 := Embedding( s3c4, 1 );[0X [4X[ f1, f2 ] -> [ f1, f2 ][0X [4Xgap> C2 := Cat1( t2, t2, e2 );[0X [4X[s3c4=>s3][0X [4Xgap> Display( C2 );[0X [4XCat1-group [s3c4=>s3] :-[0X [4X: source group has generators:[0X [4X [ f1, f2, f3, f4 ][0X [4X: range group has generators:[0X [4X [ f1, f2 ][0X [4X: tail homomorphism maps source generators to:[0X [4X [ f1, f2, <identity> of ..., <identity> of ... ][0X [4X: head homomorphism maps source generators to:[0X [4X [ f1, f2, <identity> of ..., <identity> of ... ][0X [4X: range embedding maps range generators to:[0X [4X [ f1, f2 ][0X [4X: kernel has generators:[0X [4X [ f3, f4 ][0X [4X: boundary homomorphism maps generators of kernel to:[0X [4X [ <identity> of ..., <identity> of ... ][0X [4X: kernel embedding maps generators of kernel to:[0X [4X [ f3, f4 ][0X [4Xgap> IsPcCat1( C2 );[0X [4Xtrue[0X [4Xgap> Size( C2 );[0X [4X[ 24, 6 ][0X [4X[0X [4X------------------------------------------------------------------[0X [1X2.3-3 Cat1OfXMod[0m [2X> Cat1OfXMod( [0X[3XX0[0X[2X ) ________________________________________________[0Xattribute [2X> XModOfCat1( [0X[3XC0[0X[2X ) ________________________________________________[0Xattribute [2X> PreCat1OfPreXMod( [0X[3XP0[0X[2X ) __________________________________________[0Xattribute [2X> PreXModOfPreCat1( [0X[3XP0[0X[2X ) __________________________________________[0Xattribute The 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 mathcalX = (partial : S -> R) the group G is defined as the semidirect product G = R ltimes S using the action from mathcalX, with multiplication rule (r_1,s_1)(r_2,s_2) ~=~ (r_1r_2,{s_1}^{r_2}s_2). The structural morphisms are given by t(r,s) = r, \quad h(r,s) = r (\partial s), \quad er = (r,1). On the other hand, starting with a cat1-group mathcalC = (e;t,h : G -> R), we define S = ker t, the range R remains unchanged, and partial = h|_S. The action of R on S is conjugation in G via the embedding of R in G. [4X--------------------------- Example ----------------------------[0X [4X[0X [4Xgap> SetName( Kernel(t2), "ker(t2)" );;[0X [4Xgap> X2 := XModOfCat1( C2 );[0X [4X[Group( [ f3, f4 ] )->s3][0X [4Xgap> Display( X2 );[0X [4XCrossed module [ker(t2)->s3] :-[0X [4X: Source group has generators:[0X [4X [ f3, f4 ][0X [4X: Range group s3 has generators:[0X [4X [ f1, f2 ][0X [4X: Boundary homomorphism maps source generators to:[0X [4X [ <identity> of ..., <identity> of ... ][0X [4X The automorphism group is trivial[0X [4X: associated cat1-group is [s3c4=>s3][0X [4X[0X [4X------------------------------------------------------------------[0X [1X2.4 Selection of a small cat1-group[0X The [10XCat1[0m function may also be used to select a cat1-group from a data file. All cat1-structures on groups of size up to 47 are stored in a list in file [11Xcat1data.g[0m. Global variables [10XCAT1_LIST_MAX_SIZE := 47[0m and [10XCAT1_LIST_CLASS_SIZES[0m are also stored. The [5XXMod[0m~2 version of the database orders the groups of size up to 47 according to the [5XGAP[0m~4 numbering of small groups. The data is read into the list [10XCAT1_LIST[0m only when this function is called. [1X2.4-1 Cat1Select[0m [2X> Cat1Select( [0X[3Xsize, gpnum, num[0X[2X ) __________________________________[0Xattribute This function may be used in three ways. [10XCat1Select( size )[0m returns the names of the groups with this size. [10XCat1Select( size, gpnum )[0m prints a list of cat1-structures for this chosen group. [10XCat1Select( size, gpnum, num )[0m (or just [10XCat1( size, gpnum, num )[0m) returns the chosen cat1-group. The example below is the first case in which t <> h and the associated conjugation crossed module is given by the normal subgroup [10Xc3[0m of [10Xs3[0m. [4X--------------------------- Example ----------------------------[0X [4X[0X [4Xgap> L18 := Cat1Select( 18 );[0X [4X#I Loading cat1-group data into CAT1_LIST[0X [4XUsage: Cat1( size, gpnum, num )[0X [4X[ "d18", "c18", "s3c3", "c3^2|Xc2", "c6c3" ][0X [4Xgap> Cat1Select( 18, 4 );[0X [4XThere are 4 cat1-structures for the group c3^2|Xc2.[0X [4X[ [range gens], source & range names, [tail genimages], [head genimages] ] :-[0X [4X[ [ (1,2,3), (4,5,6), (2,3)(5,6) ], tail = head = identity mapping ][0X [4X[ [ (2,3)(5,6) ], "c3^2", "c2", [ (), (), (2,3)(5,6) ],[0X [4X [ (), (), (2,3)(5,6) ] ][0X [4X[ [ (4,5,6), (2,3)(5,6) ], "c3", "s3", [ (), (4,5,6), (2,3)(5,6) ],[0X [4X [ (), (4,5,6), (2,3)(5,6) ] ][0X [4X[ [ (4,5,6), (2,3)(5,6) ], "c3", "s3", [ (4,5,6), (4,5,6), (2,3)(5,6) ],[0X [4X [ (), (4,5,6), (2,3)(5,6) ] ][0X [4XUsage: Cat1( size, gpnum, num );[0X [4XGroup has generators [ (1,2,3), (4,5,6), (2,3)(5,6) ][0X [4X4[0X [4Xgap> C4 := Cat1( 18, 4, 4 );[0X [4X[c3^2|Xc2=>s3][0X [4Xgap> Display( C4 );[0X [4XCat1-group [c3^2|Xc2=>s3] :-[0X [4X: source group has generators:[0X [4X [ (1,2,3), (4,5,6), (2,3)(5,6) ][0X [4X: range group has generators:[0X [4X [ (4,5,6), (4,5,6), (2,3)(5,6) ][0X [4X: tail homomorphism maps source generators to:[0X [4X [ (4,5,6), (4,5,6), (2,3)(5,6) ][0X [4X: head homomorphism maps source generators to:[0X [4X [ (), (4,5,6), (2,3)(5,6) ][0X [4X: range embedding maps range generators to:[0X [4X [ (4,5,6), (4,5,6), (2,3)(5,6) ][0X [4X: kernel has generators:[0X [4X [ ( 1, 2, 3)( 4, 6, 5) ][0X [4X: boundary homomorphism maps generators of kernel to:[0X [4X [ (4,6,5) ][0X [4X: kernel embedding maps generators of kernel to:[0X [4X [ (1,2,3)(4,6,5) ][0X [4Xgap> XC4 := XModOfCat1( C4 );[0X [4X[Group( [ ( 1, 2, 3)( 4, 6, 5) ] )->s3][0X [4X[0X [4X------------------------------------------------------------------[0X