  
  [1m[4m[31m2. 2d-objects[0m
  
  
  [1m[4m[31m2.1 Constructions for crossed modules[0m
  
  A  crossed  module  mathcalX  =  (partial  :  S  ->  R ) consists of a group
  homomorphism  partial,  called  the  [22m[36mboundary[0m of mathcalX, with [22m[36msource[0m S and
  [22m[36mrange[0m  R.  The  Group R acts on itself by conjugation, and on S by an action
  alpha : R -> rm 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:
  
  [1m[4m[31m2.1-1 XMod[0m
  
  [1m[34m> XMod( [0m[22m[34margs[0m[1m[34m ) _____________________________________________________[0mfunction
  [1m[34m> XModByBoundaryAndAction( [0m[22m[34mbdy, act[0m[1m[34m ) _____________________________[0moperation
  [1m[34m> XModByTrivialAction( [0m[22m[34mbdy[0m[1m[34m ) ______________________________________[0moperation
  [1m[34m> XModByNormalSubgroup( [0m[22m[34mG, N[0m[1m[34m ) ____________________________________[0moperation
  [1m[34m> XModByCentralExtension( [0m[22m[34mbdy[0m[1m[34m ) ___________________________________[0moperation
  [1m[34m> XModByAutomorphismGroup( [0m[22m[34mgrp[0m[1m[34m ) __________________________________[0moperation
  [1m[34m> XModByInnerAutomorphismGroup( [0m[22m[34mgrp[0m[1m[34m ) _____________________________[0moperation
  [1m[34m> XModByGroupOfAutomorphisms( [0m[22m[34mG, A[0m[1m[34m ) ______________________________[0moperation
  [1m[34m> XModByAbelianModule( [0m[22m[34mabgrp[0m[1m[34m ) ____________________________________[0moperation
  [1m[34m> DirectProduct( [0m[22m[34mX1, X2[0m[1m[34m ) _________________________________________[0moperation
  
  Here are the standard constructions which these implement:
  
  --    A  [22m[36mconjugation  crossed  module[0m is an inclusion of a normal subgroup S
        unlhd R, where R acts on S by conjugation.
  
  --    A  [22m[36mcentral  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  [22m[36mautomorphism  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 [22m[36mtrivial 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  [22m[36mcrossed abelian module[0m has an abelian module as source and the zero
        map as boundary.
  
  --    The  direct product mathcalX_1 times mathcalX_2 of two crossed modules
        has  source  S_1 times S_2, range R_1 times R_2 and boundary partial_1
        times   partial_2,   with  R_1,  R_2  acting  trivially  on  S_2,  S_1
        respectively.
  
  [1m[4m[31m2.1-2 Source[0m
  
  [1m[34m> Source( [0m[22m[34mX0[0m[1m[34m ) ____________________________________________________[0mattribute
  [1m[34m> Range( [0m[22m[34mX0[0m[1m[34m ) _____________________________________________________[0mattribute
  [1m[34m> Boundary( [0m[22m[34mX0[0m[1m[34m ) __________________________________________________[0mattribute
  [1m[34m> AutoGroup( [0m[22m[34mX0[0m[1m[34m ) _________________________________________________[0mattribute
  [1m[34m> XModAction( [0m[22m[34mX0[0m[1m[34m ) ________________________________________________[0mattribute
  
  In  this implementation the attributes used in the construction of a crossed
  module [22m[32mX0[0m are as follows.
  
  --    [22m[32mSource(X0)[0m  and [22m[32mRange(X0)[0m are the source S and range R of partial, the
        boundary [22m[32mBoundary(X0)[0m;
  
  --    [22m[32mAutoGroup(X0)[0m is a group of automorphisms of S;
  
  --    [22m[32mXModAction(X0)[0m is a homomorphism from R to [22m[32mAutoGroup(X0)[0m.
  
  [1m[4m[31m2.1-3 Size[0m
  
  [1m[34m> Size( [0m[22m[34mX0[0m[1m[34m ) ______________________________________________________[0mattribute
  [1m[34m> Name( [0m[22m[34mX0[0m[1m[34m ) ______________________________________________________[0mattribute
  
  More   familiar   attributes  are  [22m[32mSize[0m  and  [22m[32mName[0m,  the  latter  formed  by
  concatenating  the  names  of  the  source  and  range  (if these exist). An
  [22m[32mEnumerator[0m  function  has not been implemented. The [22m[32mDisplay[0m function is used
  to print details of [22m[32m2d-objects[0m.
  
  Here  is  a simple example of an automorphism crossed module, using a cyclic
  group of size five.
  
  [22m[35m---------------------------  Example  ----------------------------[0m
    [22m[35m[0m
    [22m[35mgap> c5 := Group( (5,6,7,8,9) );;[0m
    [22m[35mgap> SetName( c5, "c5" );[0m
    [22m[35mgap> X1 := XModByAutomorphismGroup( c5 );[0m
    [22m[35m[c5 -> PAut(c5)] [0m
    [22m[35mgap> Display( X1 );[0m
    [22m[35mCrossed module [c5 -> PAut(c5)] :-[0m
    [22m[35m: Source group c5 has generators:[0m
    [22m[35m  [ (5,6,7,8,9) ][0m
    [22m[35m: Range group PAut(c5) has generators:[0m
    [22m[35m  [ (1,2,4,3) ][0m
    [22m[35m: Boundary homomorphism maps source generators to:[0m
    [22m[35m  [ () ][0m
    [22m[35m: Action homomorphism maps range generators to automorphisms:[0m
    [22m[35m  (1,2,4,3) --> { source gens --> [ (5,7,9,6,8) ] }[0m
    [22m[35m  This automorphism generates the group of automorphisms.[0m
    [22m[35mgap> Size( X1 );[0m
    [22m[35m[ 5, 4 ][0m
    [22m[35mgap> Print( RepresentationsOfObject(X1), "\n" );[0m
    [22m[35m[ "IsComponentObjectRep", "IsAttributeStoringRep", "IsPreXModObj" ][0m
    [22m[35mgap> Print( KnownPropertiesOfObject(X1), "\n" );[0m
    [22m[35m[ "Is2dObject", "IsPerm2dObject", "IsPreXMod", "IsXMod",[0m
    [22m[35m  "IsTrivialAction2dObject", "IsAutomorphismGroup2dObject" ][0m
    [22m[35mgap> Print( KnownAttributesOfObject(X1), "\n" );[0m
    [22m[35m[ "Name", "Size", "Range", "Source", "Boundary", "AutoGroup", "XModAction" ][0m
    [22m[35m[0m
  [22m[35m------------------------------------------------------------------[0m
  
  [1m[4m[31m2.1-4 SubXMod[0m
  
  [1m[34m> SubXMod( [0m[22m[34mX0, src, rng[0m[1m[34m ) _________________________________________[0moperation
  [1m[34m> IdentitySubXMod( [0m[22m[34mX0[0m[1m[34m ) ___________________________________________[0mattribute
  [1m[34m> NormalSubXMods( [0m[22m[34mX0[0m[1m[34m ) ____________________________________________[0mattribute
  
  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 [22m[36mnormal[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^-1,s^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.
  
  
  [1m[4m[31m2.2 Pre-crossed modules[0m
  
  [1m[4m[31m2.2-1 PreXModByBoundaryAndAction[0m
  
  [1m[34m> PreXModByBoundaryAndAction( [0m[22m[34mbdy, act[0m[1m[34m ) __________________________[0moperation
  [1m[34m> SubPreXMod( [0m[22m[34mX0, src, rng[0m[1m[34m ) ______________________________________[0moperation
  
  When  axiom  {\bf  XMod\ 2} is [22m[36mnot[0m satisfied, the corresponding structure is
  known as a [22m[36mpre-crossed module[0m.
  
  [22m[35m---------------------------  Example  ----------------------------[0m
    [22m[35m[0m
    [22m[35mgap> c := (11,12,13,14,15,16,17,18);;  d := (12,18)(13,17)(14,16);;[0m
    [22m[35mgap> d16 := Group( c, d );;[0m
    [22m[35mgap> sk4 := Subgroup( d16, [ c^4, d ] );;[0m
    [22m[35mgap> SetName( d16, "d16" );  SetName( sk4, "sk4" );[0m
    [22m[35mgap> bdy16 := GroupHomomorphismByImages( d16, sk4, [c,d], [c^4,d] );;[0m
    [22m[35mgap> h1 := GroupHomomorphismByImages( d16, d16, [c,d], [c^5,d] );;[0m
    [22m[35mgap> h2 := GroupHomomorphismByImages( d16, d16, [c,d], [c,c^4*d] );;[0m
    [22m[35mgap> aut16 := Group( [ h1, h2 ] );;[0m
    [22m[35mgap> act16 := GroupHomomorphismByImages( sk4, aut16, [c^4,d], [h1,h2] );;[0m
    [22m[35mgap> P16 := PreXModByBoundaryAndAction( bdy16 );[0m
    [22m[35m[d16->sk4][0m
    [22m[35m[0m
  [22m[35m------------------------------------------------------------------[0m
  
  [1m[4m[31m2.2-2 PeifferSubgroup[0m
  
  [1m[34m> PeifferSubgroup( [0m[22m[34mX0[0m[1m[34m ) ___________________________________________[0mattribute
  [1m[34m> XModByPeifferQuotient( [0m[22m[34mprexmod[0m[1m[34m ) ________________________________[0mattribute
  
  The  [22m[36mPeiffer  subgroup[0m  of a pre-crossed module P of S is the subgroup of rm
  ker(partial) generated by [22m[36mPeiffer 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.
  
  [22m[35m---------------------------  Example  ----------------------------[0m
    [22m[35m[0m
    [22m[35mgap> P := PeifferSubgroup( P16 );[0m
    [22m[35mGroup( [ (11,15)(12,16)(13,17)(14,18), (11,17,15,13)(12,18,16,14) ] )[0m
    [22m[35mgap> X16 := XModByPeifferQuotient( P16 );[0m
    [22m[35m[d16/P->sk4][0m
    [22m[35mgap> Display( X16 );[0m
    [22m[35mCrossed module [d16/P->sk4] :-[0m
    [22m[35m: Source group has generators:[0m
    [22m[35m  [ f1, f2 ][0m
    [22m[35m: Range group has generators:[0m
    [22m[35m  [ (11,15)(12,16)(13,17)(14,18), (12,18)(13,17)(14,16) ][0m
    [22m[35m: Boundary homomorphism maps source generators to:[0m
    [22m[35m  [ (12,18)(13,17)(14,16), (11,15)(12,16)(13,17)(14,18) ][0m
    [22m[35m  The automorphism group is trivial[0m
    [22m[35mgap> iso16 := IsomorphismPermGroup( Source( X16 ) );;[0m
    [22m[35mgap> S16 := Image( iso16 );[0m
    [22m[35mGroup([ (1,3)(2,4), (1,2)(3,4) ])   [0m
    [22m[35m[0m
  [22m[35m------------------------------------------------------------------[0m
  
  [1m[4m[31m2.2-3 IsPermXMod[0m
  
  [1m[34m> IsPermXMod( [0m[22m[34mX0[0m[1m[34m ) _________________________________________________[0mproperty
  [1m[34m> IsPcPreXMod( [0m[22m[34mX0[0m[1m[34m ) ________________________________________________[0mproperty
  
  When  both  source  and  range  groups  are  of the same type, corresponding
  properties are assigned to the crossed module.
  
  
  [1m[4m[31m2.3 Cat1-groups and pre-cat1-groups[0m
  
  [1m[4m[31m2.3-1 Source[0m
  
  [1m[34m> Source( [0m[22m[34mC[0m[1m[34m ) _____________________________________________________[0mattribute
  [1m[34m> Range( [0m[22m[34mC[0m[1m[34m ) ______________________________________________________[0mattribute
  [1m[34m> Tail( [0m[22m[34mC[0m[1m[34m ) _______________________________________________________[0mattribute
  [1m[34m> Head( [0m[22m[34mC[0m[1m[34m ) _______________________________________________________[0mattribute
  [1m[34m> RangeEmbedding( [0m[22m[34mC[0m[1m[34m ) _____________________________________________[0mattribute
  [1m[34m> KernelEmbedding( [0m[22m[34mC[0m[1m[34m ) ____________________________________________[0mattribute
  [1m[34m> Boundary( [0m[22m[34mC[0m[1m[34m ) ___________________________________________________[0mattribute
  [1m[34m> Name( [0m[22m[34mC[0m[1m[34m ) _______________________________________________________[0mattribute
  [1m[34m> Size( [0m[22m[34mC[0m[1m[34m ) _______________________________________________________[0mattribute
  
  These are the attributes of a cat1-group mathcalC in this implementation.
  
  In [L82], 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 [22m[36msource[0m and [22m[36mtarget[0m, but we choose
  to  call  them the [22m[36mtail[0m and [22m[36mhead[0m of mathcalC, because [22m[36msource[0m is the [1mGAP[0m term
  for the domain of a function. The [22m[32mRangeEmbedding[0m is the embedding of [22m[32mR[0m in [22m[32mG[0m,
  the  [22m[32mKernelEmbedding[0m  is  the  inclusion  of  the  kernel of [22m[32mt[0m in [22m[32mG[0m, and the
  [22m[32mBoundary[0m is the restriction of [22m[32mh[0m to the kernel of [22m[32mt[0m.
  
  [1m[4m[31m2.3-2 Cat1[0m
  
  [1m[34m> Cat1( [0m[22m[34margs[0m[1m[34m ) ____________________________________________________[0mattribute
  [1m[34m> PreCat1ByTailHeadEmbedding( [0m[22m[34mt, h, e[0m[1m[34m ) ___________________________[0mattribute
  [1m[34m> PreCat1ByEndomorphisms( [0m[22m[34mt, h[0m[1m[34m ) __________________________________[0mattribute
  [1m[34m> PreCat1ByNormalSubgroup( [0m[22m[34mG, N[0m[1m[34m ) _________________________________[0mattribute
  [1m[34m> Cat1ByPeifferQuotient( [0m[22m[34mP[0m[1m[34m ) ______________________________________[0mattribute
  [1m[34m> Reverse( [0m[22m[34mC0[0m[1m[34m ) ___________________________________________________[0mattribute
  
  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:
  
  [22m[35m---------------------------  Example  ----------------------------[0m
    [22m[35m[0m
    [22m[35mgap> s3 := SymmetricGroup(IsPcGroup,3);;   [0m
    [22m[35mgap> gens3 := GeneratorsOfGroup(s3);[0m
    [22m[35m[ f1, f2 ][0m
    [22m[35mgap> pc4 := CyclicGroup(4);; [0m
    [22m[35mgap> SetName(s3,"s3");  SetName( pc4, "pc4" );[0m
    [22m[35mgap> s3c4 := DirectProduct( s3, pc4 );; [0m
    [22m[35mgap> SetName( s3c4, "s3c4" );  [0m
    [22m[35mgap> gens3c4 := GeneratorsOfGroup( s3c4 );[0m
    [22m[35m[ f1, f2, f3, f4 ][0m
    [22m[35mgap> a := gens3[1];;  b := gens3[2];;  one := One(s3);;[0m
    [22m[35mgap> t2 := GroupHomomorphismByImages( s3c4, s3, gens3c4, [a,b,one,one] );[0m
    [22m[35m[ f1, f2, f3, f4 ] -> [ f1, f2, &lt;identity&gt; of ..., &lt;identity&gt; of ... ][0m
    [22m[35mgap> e2 := Embedding( s3c4, 1 );[0m
    [22m[35m[ f1, f2 ] -> [ f1, f2 ][0m
    [22m[35mgap> C2 := Cat1( t2, t2, e2 );[0m
    [22m[35m[s3c4=>s3][0m
    [22m[35mgap> Display( C2 );[0m
    [22m[35mCat1-group [s3c4=>s3] :-[0m
    [22m[35m: source group has generators:[0m
    [22m[35m  [ f1, f2, f3, f4 ][0m
    [22m[35m:  range group has generators:[0m
    [22m[35m  [ f1, f2 ][0m
    [22m[35m: tail homomorphism maps source generators to:[0m
    [22m[35m  [ f1, f2, &lt;identity&gt; of ..., &lt;identity&gt; of ... ][0m
    [22m[35m: head homomorphism maps source generators to:[0m
    [22m[35m  [ f1, f2, &lt;identity&gt; of ..., &lt;identity&gt; of ... ][0m
    [22m[35m: range embedding maps range generators to:[0m
    [22m[35m  [ f1, f2 ][0m
    [22m[35m: kernel has generators:[0m
    [22m[35m  [ f3, f4 ][0m
    [22m[35m: boundary homomorphism maps generators of kernel to:[0m
    [22m[35m  [ &lt;identity&gt; of ..., &lt;identity&gt; of ... ][0m
    [22m[35m: kernel embedding maps generators of kernel to:[0m
    [22m[35m  [ f3, f4 ][0m
    [22m[35mgap> IsPcCat1( C2 );[0m
    [22m[35mtrue[0m
    [22m[35mgap> Size( C2 );[0m
    [22m[35m[ 24, 6 ][0m
    [22m[35m[0m
  [22m[35m------------------------------------------------------------------[0m
  
  [1m[4m[31m2.3-3 Cat1OfXMod[0m
  
  [1m[34m> Cat1OfXMod( [0m[22m[34mX0[0m[1m[34m ) ________________________________________________[0mattribute
  [1m[34m> XModOfCat1( [0m[22m[34mC0[0m[1m[34m ) ________________________________________________[0mattribute
  [1m[34m> PreCat1OfPreXMod( [0m[22m[34mP0[0m[1m[34m ) __________________________________________[0mattribute
  [1m[34m> PreXModOfPreCat1( [0m[22m[34mP0[0m[1m[34m ) __________________________________________[0mattribute
  
  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.
  
  [22m[35m---------------------------  Example  ----------------------------[0m
    [22m[35m[0m
    [22m[35mgap> SetName( Kernel(t2), "ker(t2)" );;[0m
    [22m[35mgap> X2 := XModOfCat1( C2 );[0m
    [22m[35m[Group( [ f3, f4 ] )->s3][0m
    [22m[35mgap> Display( X2 );[0m
    [22m[35mCrossed module [ker(t2)->s3] :-[0m
    [22m[35m: Source group has generators:[0m
    [22m[35m  [ f3, f4 ][0m
    [22m[35m: Range group s3 has generators:[0m
    [22m[35m  [ f1, f2 ][0m
    [22m[35m: Boundary homomorphism maps source generators to:[0m
    [22m[35m  [ &lt;identity&gt; of ..., &lt;identity&gt; of ... ][0m
    [22m[35m  The automorphism group is trivial[0m
    [22m[35m: associated cat1-group is [s3c4=>s3][0m
    [22m[35m[0m
  [22m[35m------------------------------------------------------------------[0m
  
  
  [1m[4m[31m2.4 Selection of a small cat1-group[0m
  
  The  [22m[32mCat1[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
  [1mcat1data.g[0m.     Global    variables    [22m[32mCAT1_LIST_MAX_SIZE    :=    47[0m    and
  [22m[32mCAT1_LIST_CLASS_SIZES[0m  are  also  stored. The [1mXMod[0m~2 version of the database
  orders the groups of size up to 47 according to the [1mGAP[0m~4 numbering of small
  groups.  The data is read into the list [22m[32mCAT1_LIST[0m only when this function is
  called.
  
  [1m[4m[31m2.4-1 Cat1Select[0m
  
  [1m[34m> Cat1Select( [0m[22m[34msize, gpnum, num[0m[1m[34m ) __________________________________[0mattribute
  
  This  function  may  be  used  in three ways. [22m[32mCat1Select( size )[0m returns the
  names  of the groups with this size. [22m[32mCat1Select( size, gpnum )[0m prints a list
  of cat1-structures for this chosen group. [22m[32mCat1Select( size, gpnum, num )[0m (or
  just [22m[32mCat1( 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 [22m[32mc3[0m of [22m[32ms3[0m.
  
  [22m[35m---------------------------  Example  ----------------------------[0m
    [22m[35m[0m
    [22m[35mgap> L18 := Cat1Select( 18 );[0m
    [22m[35m#I  Loading cat1-group data into CAT1_LIST[0m
    [22m[35mUsage:  Cat1( size, gpnum, num )[0m
    [22m[35m[ "d18", "c18", "s3c3", "c3^2|Xc2", "c6c3" ][0m
    [22m[35mgap> Cat1Select( 18, 4 );[0m
    [22m[35mThere are 4 cat1-structures for the group c3^2|Xc2.[0m
    [22m[35m[ [range gens], source & range names, [tail genimages], [head genimages] ] :-[0m
    [22m[35m[ [ (1,2,3), (4,5,6), (2,3)(5,6) ],  tail = head = identity mapping ][0m
    [22m[35m[ [ (2,3)(5,6) ], "c3^2", "c2", [ (), (), (2,3)(5,6) ],[0m
    [22m[35m  [ (), (), (2,3)(5,6) ] ][0m
    [22m[35m[ [ (4,5,6), (2,3)(5,6) ], "c3", "s3", [ (), (4,5,6), (2,3)(5,6) ],[0m
    [22m[35m  [ (), (4,5,6), (2,3)(5,6) ] ][0m
    [22m[35m[ [ (4,5,6), (2,3)(5,6) ], "c3", "s3", [ (4,5,6), (4,5,6), (2,3)(5,6) ],[0m
    [22m[35m  [ (), (4,5,6), (2,3)(5,6) ] ][0m
    [22m[35mUsage:  Cat1( size, gpnum, num );[0m
    [22m[35mGroup has generators [ (1,2,3), (4,5,6), (2,3)(5,6) ][0m
    [22m[35m4[0m
    [22m[35mgap> C4 := Cat1( 18, 4, 4 );[0m
    [22m[35m[c3^2|Xc2=>s3][0m
    [22m[35mgap> Display( C4 );[0m
    [22m[35mCat1-group [c3^2|Xc2=>s3] :-[0m
    [22m[35m: source group has generators:[0m
    [22m[35m  [ (1,2,3), (4,5,6), (2,3)(5,6) ][0m
    [22m[35m:  range group has generators:[0m
    [22m[35m  [ (4,5,6), (4,5,6), (2,3)(5,6) ][0m
    [22m[35m: tail homomorphism maps source generators to:[0m
    [22m[35m  [ (4,5,6), (4,5,6), (2,3)(5,6) ][0m
    [22m[35m: head homomorphism maps source generators to:[0m
    [22m[35m  [ (), (4,5,6), (2,3)(5,6) ][0m
    [22m[35m: range embedding maps range generators to:[0m
    [22m[35m  [ (4,5,6), (4,5,6), (2,3)(5,6) ][0m
    [22m[35m: kernel has generators:[0m
    [22m[35m  [ ( 1, 2, 3)( 4, 6, 5) ][0m
    [22m[35m: boundary homomorphism maps generators of kernel to:[0m
    [22m[35m  [ (4,6,5) ][0m
    [22m[35m: kernel embedding maps generators of kernel to:[0m
    [22m[35m  [ (1,2,3)(4,6,5) ][0m
    [22m[35mgap> XC4 := XModOfCat1( C4 );[0m
    [22m[35m[Group( [ ( 1, 2, 3)( 4, 6, 5) ] )->s3][0m
    [22m[35m[0m
  [22m[35m------------------------------------------------------------------[0m
  
