  
  [1X2 [33X[0;0YThe Organisation of the Small Groups Library[133X[101X
  
  [33X[0;0YThis  chapter  describes  how  the  Small  Groups  library  is organised. It
  includes  information  on  the  determination of the groups, on the encoding
  used  to  store  them,  and  on  the  algorithms  used by the identification
  routines. It is aimed at readers interested in the internals of the library;
  it is not needed in order to use it.[133X
  
  
  [1X2.1 [33X[0;0YLayers[133X[101X
  
  [33X[0;0YThe  Small Groups library is organised in 11 layers. Each layer contains the
  groups of certain orders:[133X
  
  [8XLayer 1[108X
        [33X[0;6Ythe  orders  with at most 3 prime factors; that is, the orders of type
        [22Xp[122X, [22Xp^2[122X, [22Xpq[122X, [22Xp^3[122X, [22Xpq^2[122X and [22Xpqr[122X.[133X
  
  [8XLayer 2[108X
        [33X[0;6Yall remaining orders at most 1000 except 512 and 768.[133X
  
  [8XLayer 3[108X
        [33X[0;6Yall remaining orders of type [22X2^n ⋅ p[122X with [22Xn ≤ 8[122X and [22Xp[122X an arbitrary odd
        prime.[133X
  
  [8XLayer 4[108X
        [33X[0;6Ythe  orders  [22X7^4[122X and [22X5^5[122X and all remaining orders of type [22Xq^n ⋅ p[122X with
        [22Xq^n[122X dividing [22X3^6[122X, [22X5^5[122X or [22X7^4[122X and [22Xp[122X a prime different from [22Xq[122X.[133X
  
  [8XLayer 5[108X
        [33X[0;6Yall  remaining  orders  at  most 2000 except 512, 1024, 1152, 1536 and
        1920.[133X
  
  [8XLayer 6[108X
        [33X[0;6Ythe orders 1152 and 1920.[133X
  
  [8XLayer 7[108X
        [33X[0;6Ythe order 512.[133X
  
  [8XLayer 8[108X
        [33X[0;6Ythe order 1536.[133X
  
  [8XLayer 9[108X
        [33X[0;6Ythe remaining groups of order [22Xp^4[122X, [22Xp^5[122X and [22Xp^6[122X.[133X
  
  [8XLayer 10[108X
        [33X[0;6Ythe remaining groups of squarefree order and of cubefree order at most
        50 000.[133X
  
  [8XLayer 11[108X
        [33X[0;6Ythe orders [22Xp^7[122X with [22Xp = 3,5,7,11[122X.[133X
  
  [33X[0;0YThis  setup  has  been  chosen  for  two reasons. First, the organisation in
  layers permits adding new layers (and thus new group orders) without changes
  to the existing catalogue. Secondly, it is possible to install a part of the
  layers only. This might be interesting for computer systems with little hard
  disk space available.[133X
  
  [33X[0;0YFor  each layer [22Xi[122X there are two internal functions [10XSMALL_AVAILABLE_FUNCS[i](
  order  )[110X  and  [10XID_AVAILABLE_FUNCS[i]( order )[110X. Both functions return [9Xfail[109X if
  the  given  order  is  not  contained in this layer. Otherwise the functions
  return  an  information  record  on  the  layer  and  the order. This record
  contains  the information needed to handle the groups of the specified order
  internally.   If   the   layer   [22Xi[122X   is  not  installed,  then  the  entries
  [10XSMALL_AVAILABLE_FUNCS[i][110X and [10XID_AVAILABLE_FUNCS[i][110X are unbound.[133X
  
  [33X[0;0YMoreover,  there  are two internal header functions [10XSMALL_AVAILABLE( order )[110X
  and  [10XID_AVAILABLE(  order  )[110X.  These two functions are used to loop over the
  layer functions and find the first layer containing the given order. If this
  layer  is  found,  then  an  information record on the order is returned. If
  there  is  no  installed layer containing the groups of this order, then the
  functions return [9Xfail[109X.[133X
  
  
  [1X2.2 [33X[0;0YFiles and Directories[133X[101X
  
  [33X[0;0YFor  each  layer  [22Xx[122X  there  are either one or two directories in the package
  directory:  [11Xsmallx[111X,  or  [11Xsmallx[111X  and  [11Xidx[111X. The directory [11Xsmallx[111X contains the
  groups  of  layer  [22Xx[122X  and  the  directory  [11Xidx[111X  contains  the  corresponding
  identification routine, if available. An exception to this rule is the first
  layer;  here  all  the  code  for  the  groups  is  contained  in  the files
  [11Xgap/smlgp1.g[111X  and  [11Xgap/idgrp1.g[111X.  For  the  layers  7,  8 and 11 there is no
  identification  routine  available  at  the  moment  and  thus  there are no
  directories [11Xid7[111X, [11Xid8[111X and [11Xid11[111X.[133X
  
  [33X[0;0YThe other relevant files of the package are:[133X
  
  [8X[11Xread.g[111X[108X
        [33X[0;6Yfor loading the small groups catalogue into [5XGAP[105X.[133X
  
  [8X[11Xgap/small.gd[111X, [11Xgap/small.gi[111X[108X
        [33X[0;6Ythese  are  the  files  where  the main functions for the small groups
        catalogue are defined.[133X
  
  [8X[11Xgap/gap3cat.g[111X[108X
        [33X[0;6Yidentification of a small group in the [5XGAP[105X 3 [10XSolvableGroup[110X catalogue.[133X
  
  [8X[11Xgap/smlinfo.gi[111X[108X
        [33X[0;6Ythe code for the function [2XSmallGroupsInformation[102X ([14X1.3-12[114X).[133X
  
  
  [1X2.3 [33X[0;0YLayer 1[133X[101X
  
  [33X[0;0YThe groups whose order factorises into at most 3 primes have been classified
  by  Hölder,  see  [Höl93]. An algorithm to find the isomorphism type of such
  groups was first implemented in [5XGAP[105X 3 by Frank Celler and Hans-Georg Esser.[133X
  
  [33X[0;0YHölder's  classification  distinguishes  the  groups  of the following order
  types. Let [22Xp[122X, [22Xq[122X and [22Xr[122X be different primes with [22Xp < q < r[122X.[133X
  
  [8X[22Xp[122X[108X
        [33X[0;6Y1 cyclic group.[133X
  
  [8X[22Xp^2[122X[108X
        [33X[0;6Y1 cyclic and 1 elementary abelian group.[133X
  
  [8X[22Xp^3[122X[108X
        [33X[0;6Y3 abelian groups and 2 extraspecial groups.[133X
  
  [8X[22Xpq[122X[108X
        [33X[0;6Y1 cyclic group; 1 group of type [22Xq:p[122X if [22Xq ≡ 1 mod p[122X.[133X
  
  [8X[22Xp^2q[122X[108X
        [33X[0;6Y2  abelian  groups; 1 group of type [22Xq:p × p[122X if [22Xq ≡ 1 mod p[122X; 1 group of
        type [22XA_4[122X if [22Xp = 2[122X and [22Xq = 3[122X; 1 group of type [22X(p × q).p[122X if [22Xq ≡ 1 mod p[122X;
        1 group of type [22Xq:C_p^2[122X if [22Xq ≡ 1 mod p^2[122X.[133X
  
  [8X[22Xpq^2[122X[108X
        [33X[0;6Y2  abelian  groups; 1 group of type [22Xq:p × q[122X if [22Xq ≡ 1 mod p[122X; 1 group of
        type  [22XC_q^2:p[122X if [22Xq ≡ 1 mod p[122X; 1 group of type [22X(q × q):p[122X if [22Xp > 2[122X and [22Xq
        + 1 ≡ 0 mod p[122X; groups of type [22Xq:p + q:p[122X (1 group for [22Xp = 2[122X and [22X(p+1)/2[122X
        groups otherwise).[133X
  
  [8X[22Xpqr[122X[108X
        [33X[0;6Y1  cyclic  group;  1  group of type [22Xq:p × r[122X if [22Xq ≡ 1 mod p[122X; 1 group of
        type [22Xr:p × q[122X if [22Xr ≡ 1 mod p[122X; 1 group of type [22Xr:q × p[122X if [22Xr ≡ 1 mod q[122X; 1
        group of type [22Xr:(p × q)[122X if [22Xr ≡ 1 mod pq[122X; [22Xp-1[122X groups of type [22Xq:p + r:p[122X.[133X
  
  [33X[0;0YThe  groups  in  this layer are stored [21Xgenerically[121X; that is, using functions
  instead  of  explicit  presentations. The identification routine follows the
  classification as well.[133X
  
  
  [1X2.4 [33X[0;0YLayer 2[133X[101X
  
  
  [1X2.4-1 [33X[0;0YDetermination[133X[101X
  
  [33X[0;0YThe  nilpotent  groups  of  this  layer  have been constructed using [22Xp[122X-group
  generation,  see  [O'B90] and the [5XANUPQ[105X package. The 2- and 3-groups of this
  layer  have  also been available in the [10XTwoGroup[110X and [10XThreeGroup[110X libraries of
  [5XGAP[105X 3,  see [JNO90] and [O'B91]. The non-nilpotent groups in this layer have
  been  determined  using  the  Frattini  extension  method,  the cyclic split
  extension  method  and  cyclic  extension  for  the non-solvable groups, see
  [BE99a], [BE99b] and [BE01].[133X
  
  
  [1X2.4-2 [33X[0;0YStoring[133X[101X
  
  [33X[0;0YThe  solvable  groups  in  this  layer  are  stored by a single long integer
  describing  a  pc  presentation  of  the  group (see [2XPcGroupCode[102X ([14XReference:
  PcGroupCode[114X)  or  [BE99a]).  For  [22Xp[122X-groups  the encoded pc presentations are
  standard  presentations and they are equal to the presentations known in the
  2-  and  3-groups  libraries of [5XGAP[105X 3. The non-solvable groups are stored by
  generating permutations.[133X
  
  
  [1X2.4-3 [33X[0;0YSelection arguments[133X[101X
  
  [33X[0;0YFor  the  selection  functions  the  values  of the following attributes are
  precomputed and stored:[133X
  
  [8Xfor [22Xp[122X-groups[108X
        [33X[0;6Y[2XIsAbelian[102X    ([14XReference:    IsAbelian[114X),    [2XPClassPGroup[102X    ([14XReference:
        PClassPGroup[114X),  [2XRankPGroup[102X ([14XReference: RankPGroup[114X), [10XFrattinifactorSize[110X
        and [10XFrattinifactorId[110X.[133X
  
  [8Xfor non-[22Xp[122X-groups[108X
        [33X[0;6Y[2XIsAbelian[102X   ([14XReference:   IsAbelian[114X),   [2XIsNilpotentGroup[102X   ([14XReference:
        IsNilpotentGroup[114X),           [2XIsSupersolvableGroup[102X          ([14XReference:
        IsSupersolvableGroup[114X),  [2XIsSolvableGroup[102X  ([14XReference: IsSolvableGroup[114X),
        [10XLGLength[110X, [10XFrattinifactorSize[110X and [10XFrattinifactorId[110X.[133X
  
  
  [1X2.4-4 [33X[0;0YIdentification[133X[101X
  
  [33X[0;0YThe  identification  routine  uses  invariants of groups to identify a given
  group.  The  invariants are organised as a tree and stored in [10XID_GROUP_TREE[110X,
  which contains a leaf for every group. In some cases this invariants tree is
  not  sufficient  to distinguish all groups. In this case the tree is used to
  reduce  to  a  small  number  of  possible  groups and then a special random
  isomorphism test finds the correct group among the possible ones.[133X
  
  
  [1X2.5 [33X[0;0YLayer 3[133X[101X
  
  
  [1X2.5-1 [33X[0;0YDetermination[133X[101X
  
  [33X[0;0YThese  groups have been determined using the generic variation of the cyclic
  split extension method and the Frattini extension method, see [BE01].[133X
  
  
  [1X2.5-2 [33X[0;0YStoring: nilpotent groups[133X[101X
  
  [33X[0;0YFor  each order in this layer we first list the nilpotent groups [22XP × Q[122X where
  [22XP[122X is the cyclic group of order [22Xp[122X and [22XQ[122X is a group of order [22X2^n[122X. These groups
  are  sorted  by the catalogue number of [22XQ[122X and the group [22XQ[122X is stored in layer
  2.[133X
  
  
  [1X2.5-3 [33X[0;0YStoring: groups with normal Sylow [22Xp[122X[101X[1X-subgroup[133X[101X
  
  [33X[0;0YThen  we  consider  the remaining groups with normal Sylow [22Xp[122X-subgroup. These
  are  split  extensions  of  type [22XP : Q[122X. The isomorphism type of these groups
  depends  on  the  isomorphism  type  of  [22XQ[122X  and the action homomorphism [22XQ ->
  mathrmAut(P)[122X.  Let  [22XK[122X  be the kernel of this homomorphism with [22X[Q : K] = 2^i[122X
  for some [22Xi[122X. We encode the homomorphisms for fixed [22XQ[122X and fixed [22Xi[122X as follows.[133X
  
  [33X[0;0YConsider  a  generator [22Xg[122X of [22XP[122X and let [22Xg_1, ..., g_r[122X be a generating set of [22XQ[122X
  (we  choose  the first [22Xr[122X pc generators of [22XQ[122X for [22Xr[122X the rank of [22XQ[122X). Consider a
  homomorphism [22Xa : Q -> mathrmAut(P)[122X and let [22Xa_i[122X be the image of [22Xg_i[122X. Clearly,
  [22Xa_i[122X  is  of the form [22Xa_i : g -> g^l_i[122X with [22X0 ≤ l_i ≤ 2^i-1[122X. Thus we describe
  the homomorphism [22Xa[122X by the sequence [22Xl_1, ..., l_r[122X. We encode this sequence as
  a [22X2^i[122X-adic number of length [22Xr[122X; that is, we encode this sequence as [22Xl_1 q^r-1
  +  l_2  q^r-2  +  ...  + l_r q^0[122X where [22Xq = 2^i[122X. Hence each homomorphism [22Xa[122X is
  encoded as an integer and for fixed [22XQ[122X and [22Xi[122X we write all these integers into
  a list.[133X
  
  [33X[0;0YA special case occurs if there are two homomorphisms [22Xa[122X and [22Xb[122X such that [22Xa_i =
  b_i^j[122X  for some integer [22Xj[122X; that is, the images of [22Xa[122X are powers of the images
  of  [22Xb[122X.  In  this  case  [22Xa[122X  is  stored directly after [22Xb[122X and we only store the
  integer [22X-j[122X instead of the encoding for the sequence [22Xl_1, ..., l_r[122X for [22Xa[122X.[133X
  
  [33X[0;0YNow  we  consider  the  case  that  for  certain  [22XQ[122X  and  [22Xi[122X we have a list [22XL[122X
  consisting  of  non-negative  integers only; that is, the special power-case
  did  not  occur for this group [22XQ[122X and index [22Xi[122X. In some cases we encode such a
  list  [22XL[122X  further.  Recall  that  the  integers  in [22XL[122X correspond to different
  homomorphisms.  Thus  the integers are all different and we may sort them in
  increasing  order.  Then  we  can store this sorted list as a binary number;
  that  is, the list [22Xc_1, ..., c_s[122X is encoded as [22X2^c_1-1 + ... + 2^c_s-1[122X. This
  is only useful if the list [22XL[122X does not contain large numbers.[133X
  
  [33X[0;0YThus  for  [22XQ[122X  and [22Xi[122X we have either a list or an integer stored to encode the
  corresponding homomorphisms. For each index [22Xi[122X we write all lists or integers
  into  a  list  such  that  at position [22XmathrmId(Q)[122X the corresponding list or
  integer to [22XQ[122X and [22Xi[122X is found.[133X
  
  [33X[0;0YFor  [22Xi = 1[122X this list has no holes, since there exists at least one group [22XP :
  Q[122X  with [22XK[122X of index 2 for each group [22XQ[122X. Often the entry at position [22Xj[122X in this
  list is equal to the entry at position [22Xj-1[122X. In this case we delete the entry
  at position [22Xj[122X and thus create a hole in the list.[133X
  
  [33X[0;0YFor [22Xi > 1[122X there might be holes in the list if there is no group [22XP : Q[122X with [22XK[122X
  of  index [22X2^i[122X. Hence the previous idea cannot be applied for [22Xi > 1[122X. However,
  in  all  the  lists  we have equal entries in various places. If this is the
  case, then we substitute an entry in a list by a negative integer [22X-j[122X meaning
  that the entry at this position is equal to the entry at position [22Xj[122X.[133X
  
  [33X[0;0YFinally,  if  the  list  for some index [22Xi[122X has only few entries left, then we
  substitute  the  list  by a record containing two lists: first the non-empty
  positions and secondly their entries.[133X
  
  
  [1X2.5-4 [33X[0;0YStoring: groups with normal Sylow 2-subgroup[133X[101X
  
  [33X[0;0YNext  we  consider the remaining groups of type [22XQ : P[122X. These exist for a few
  primes  [22Xp[122X only. These groups are described by operation homomorphisms of the
  type  [22XP  -> mathrmAut(Q)[122X. Here we store the catalogue number of [22XQ[122X and a long
  integer  for  each  such  homomorphism  [22Xa  :  P  -> mathrmAut(Q)[122X. Consider a
  generator  [22Xg[122X  of  [22XP[122X.  Clearly, we just need to store the image of [22Xg[122X for each
  homomorphism  [22Xa[122X. The image [22Xg^a[122X is an automorphism of [22XQ[122X and thus we store the
  images  under  [22Xg^a[122X  of  a  fixed  generating  set  of [22XQ[122X. For this purpose we
  consider  a canonical numbering of the elements of [22XQ[122X and store the generator
  images  by  storing  their number in the element list. The sequence of these
  numbers is encoded as a [22X(|Q|+1)[122X-adic number; that is, the sequence [22Xe_1, ...,
  e_r[122X is stored as [22Xe_1 q^r-1 + e_2 q^r-2 + ... + e_r[122X where [22Xq = |Q| + 1[122X.[133X
  
  
  [1X2.5-5 [33X[0;0YStoring: groups without normal Sylow subgroup[133X[101X
  
  [33X[0;0YNow  there are the groups of order [22X2^n ⋅ p[122X without any normal Sylow subgroup
  left.  These exist for very few primes [22Xp[122X only. They have been computed as in
  layer 2 using the Frattini extension method. They are stored as described in
  layer 2 using one long integer for each group.[133X
  
  
  [1X2.5-6 [33X[0;0YIdentification[133X[101X
  
  [33X[0;0YThe identification of nilpotent groups [22XP × Q[122X relies on the identification of
  [22XQ[122X  only and this is done as in layer 2. Similarly, the groups without normal
  Sylow subgroup are identified as described in layer 2.[133X
  
  [33X[0;0YFor  the  groups  [22XQ  : P[122X with normal Sylow 2-subgroup we first determine the
  prime  [22Xp[122X  and  the isomorphism type of [22XQ[122X. If this is not sufficient, then we
  use  the  methods  as  described  in  layer  2.  (Recall that there are only
  finitely many primes [22Xp[122X possible here.)[133X
  
  [33X[0;0YFor  the  groups  [22XP  : Q[122X with normal Sylow [22Xp[122X-subgroup we first determine the
  prime  [22Xp[122X  and  the  isomorphism  type of [22XQ[122X as well. Moreover, we compute the
  centralizer [22XK[122X of [22XP[122X in [22XQ[122X and consider its index [22X[Q : K] = 2^i[122X.[133X
  
  [33X[0;0YIn a large number of cases the catalogue numbers [22XmathrmId(Q)[122X and [22XmathrmId(K)[122X
  are  sufficient  to determine the group [22XP:Q[122X uniquely. Moreover, this feature
  is  independent  of  [22Xp[122X.  We  can  recognise  these  cases  using the tree of
  invariants:   if   we  can  determine  [22XP:Q[122X  uniquely  with  [22XmathrmId(Q)[122X  and
  [22XmathrmId(K)[122X  only,  then  there is no node corresponding to this case in the
  tree.[133X
  
  [33X[0;0YIf  there  is  a  node in the tree, then [22XmathrmId(Q)[122X and [22XmathrmId(K)[122X are not
  sufficient  to  determine  the group uniquely. In this case we apply methods
  similar  to  layer 2; that is, we use invariants. Since there are infinitely
  many  primes  [22Xp[122X  which might turn up here, we need an additional idea to use
  the  invariant  tree  for  this  purpose.  In  the  invariant  tree  we have
  invariants stored for groups of type [22XR : Q[122X of order [22X2^n ⋅ r[122X for the primes [22Xr
  =  3,  5, 17[122X and [22X97[122X. Now we first choose the smallest prime [22Xr[122X such that [22Xr[122X is
  congruent  to 1 modulo [22X[Q : K][122X. The cases that [22X[Q : K] = 2^i[122X for [22Xi = 6, 7[122X or
  8  cannot occur here, because in these cases [22XmathrmId(Q)[122X and [22XmathrmId(K)[122X are
  always sufficient to determine the group.[133X
  
  [33X[0;0YThen we use that the groups [22XP : Q[122X behave essentially similarly to the groups
  [22XR : Q[122X for the chosen [22Xr[122X. Thus we can construct a group [22XR : Q[122X corresponding to
  [22XP : Q[122X and identify [22XR : Q[122X instead of [22XP : Q[122X.[133X
  
  
  [1X2.6 [33X[0;0YLayer 4[133X[101X
  
  
  [1X2.6-1 [33X[0;0YDetermination[133X[101X
  
  [33X[0;0YThe  groups  of  order  [22X2401  =  7^4[122X and [22X3125 = 5^5[122X have been computed using
  [22Xp[122X-group  generation  as described in layer 2 and they are stored and handled
  similarly.  The  other groups in this layer have been determined as outlined
  in layer 3 and, again, they are organised similarly.[133X
  
  
  [1X2.6-2 [33X[0;0YStoring[133X[101X
  
  [33X[0;0YThere  is  a  difference  from layer 3 in the compression of the group data;
  that  is,  the groups in this layer are not compressed as efficiently as the
  groups  in  layer  3.  We consider the groups of type [22XP : Q[122X for [22XP[122X the cyclic
  group  of order [22Xp[122X and [22XQ[122X a group of order [22Xq^n[122X. These groups are determined by
  [22XQ[122X  and  an  operation homomorphism [22XQ -> mathrmAut(P)[122X. As in layer 3 we first
  compute  one  integer  for  each  operation homomorphism and then proceed to
  compress  the lists of integers for each [22XQ[122X and each [22Xi[122X where [22Xq^i[122X is the index
  of  the  centralizer  of  [22XP[122X  in [22XQ[122X. Unlike in layer 3, we do not compress the
  lists  of non-negative integers to a single integer and we do not reduce the
  list for [22Xi = 1[122X further, since in both cases the obtained compression is very
  small.[133X
  
  
  [1X2.6-3 [33X[0;0YIdentification[133X[101X
  
  [33X[0;0YThe  group  identification is essentially similar to the procedure described
  in  layer  3.  However,  for  the  groups  with  normal  Sylow [22Xp[122X-subgroup we
  additionally use a special random isomorphism test to identify groups. It is
  a  [21Xspecial[121X version of the general algorithm: in the general algorithm we use
  certain  sets  to  choose  generating  sets from. In this special version we
  restrict  these sets suitably. (We use non-trivial elements of [22XP[122X and certain
  elements of [22XQ[122X.) This is necessary, since the groups which appear here can be
  too large to compute explicitly the elements sorted in conjugacy classes.[133X
  
  
  [1X2.7 [33X[0;0YLayer 5[133X[101X
  
  [33X[0;0YThis layer is similar to layer 2.[133X
  
  
  [1X2.8 [33X[0;0YLayer 6[133X[101X
  
  
  [1X2.8-1 [33X[0;0YDetermination[133X[101X
  
  [33X[0;0YThe  nilpotent  groups  in  this  layer are determined as direct products of
  [22Xp[122X-groups.  Most  of  the  groups of orders 1152 and 1920 have a normal Sylow
  3-subgroup  or Hall [22X{3,5}[122X-subgroup, respectively. They are constructed using
  the  coprime  split  extension  method, see [BEO02]. The remaining groups of
  these  orders  (without  normal 2-complement) have been determined using the
  Frattini  extension  method  and the cyclic split extension method, see also
  [BE99a].[133X
  
  
  [1X2.8-2 [33X[0;0YStoring[133X[101X
  
  [33X[0;0YOnly   the  non-nilpotent  groups  with  normal  Sylow  3-subgroup  or  Hall
  [22X{3,5}[122X-subgroup  are  stored  in  a  special  way.  The  remaining groups are
  organised similarly to layer 2.[133X
  
  [33X[0;0YFor  the  groups of type [22XP : Q[122X where [22XP[122X is the normal Sylow 3-subgroup or the
  Hall [22X{3,5}[122X-subgroup and [22XQ[122X is a group of order [22X2^7[122X we split a pc presentation
  in  two parts. The first part are the relators of [22XQ[122X. These are stored within
  the groups of order [22X2^7[122X and thus can be considered as known. The second part
  of  the relators determine [22XP[122X and the operation of [22XQ[122X on [22XP[122X. These second parts
  are  stored  as long integers. If we consider these second parts for all the
  groups,  then  we  find  that  they are highly redundant. There are only 921
  (1722)  different  long  integers  for  the  groups  of order 1152 and 1920,
  respectively. Thus we store these two sets of long integers only.[133X
  
  [33X[0;0YThen  for  each  group  [22XQ[122X of order [22X2^7[122X we store for each extension [22XP : Q[122X the
  position  of  the  corresponding  long  integer.  Hence  we obtain a list of
  integers  for  [22XQ[122X.  Again we note that the lists of integers obtained for all
  the  groups  [22XQ[122X  of order [22X2^7[122X are highly redundant. There are only 1298 (722)
  different  lists  for  the groups of order 1152 (1920). Thus we can compress
  the lists using the same idea again.[133X
  
  
  [1X2.8-3 [33X[0;0YIdentification[133X[101X
  
  [33X[0;0YThe identification of groups of these orders is similar to layer 2.[133X
  
  
  [1X2.9 [33X[0;0YLayer 7[133X[101X
  
  
  [1X2.9-1 [33X[0;0YDetermination[133X[101X
  
  [33X[0;0YThe groups of order 512 have first been enumerated, see [EO99b] and [EO99a].
  Later  they  have  been  determined explicitly using [22Xp[122X-group generation, see
  [O'B90] and [BEO02]. There are 10 494 213 groups of this order.[133X
  
  
  [1X2.9-2 [33X[0;0YStoring[133X[101X
  
  [33X[0;0YWe  introduce  a  special  method  to  store  such  groups.  Consider  a  pc
  presentation  of  a given group of order 512. If we concatenate the exponent
  vectors of the right hand sides of such a presentation, then we obtain a bit
  vector  of length 120. This can be used as encoding of a group of order 512.
  We compress the list of such encodings further using the following method.[133X
  
  [33X[0;0YFirst  we  split  the list of all groups of order 512 in sublists containing
  1000  groups  each.  Let  [22XL[122X be such a sublist. We suppose that [22XL[122X consists of
  1000  bitlists of length 120 and we describe a method to encode this list of
  bitlists  in  a  single vector [22XV[122X using an alphabet of 83 symbols (81 symbols
  for the encoding and 2 special symbols as signs).[133X
  
  [33X[0;0YFirst  we find those indices [22Xi[122X in the range 1 to 120 such that for all lists
  in  [22XL[122X  the entries at position [22Xi[122X are fixed. Thus we note for each of the 120
  entries  whether  the  entries  are all 0, all 1 or variable in [22XL[122X. There are
  [22X3^120[122X  combinations  possible, which we store in a vector of length 30 using
  81 symbols. This vector of length 30 is the initial segment of [22XV[122X. Now we can
  reduce  to  consider the variable positions only and thus work with bitlists
  of shorter length.[133X
  
  [33X[0;0YWe split the shorter bitlists in blocks such that the bitlists in each block
  have  at most 6 variable entries. For this purpose we start at the beginning
  of [22XL[122X and add bitlists to the current block until the next bitlist would lead
  to  more than 6 variable entries for this block. Each block can contain from
  1  up to 64 bitlists. Now we determine a [21Xheadcode[121X and a [21Xtailcode[121X to describe
  the  block.  The  head  and  tail codes are then concatenated to [22XV[122X. The head
  contains  an encoding of the variable bits for this block as above. The tail
  then  describes the vectors in the variable bits. Since there are at most 64
  possible  combinations  arising  here,  we  need  only  one  letter  in  the
  81-alphabet to describe a single vector of variable bits.[133X
  
  [33X[0;0YFinally,  we  note  that  some of the tailcodes arise for many blocks. These
  tailcodes  are  stored in a special list. If such a tailcode is occurring in
  [22XV[122X, then only the reference to the special list is stored instead of the full
  tailcode.  This special list contains 1890 different tailcodes, so 2 letters
  in the alphabet are sufficient to refer to a tailcode.[133X
  
  [33X[0;0YTo  distinguish  references and actual tailcodes we use a special sign. Each
  new  head  begins  with a special symbol in [22XV[122X. There are two special symbols
  available  for  this  purpose.  One is used if the corresponding tailcode is
  referenced, and the other if it is an ordinary tailcode.[133X
  
  [33X[0;0YThis compression allows the groups of order 512 to be stored in 4.4 MB.[133X
  
  
  [1X2.10 [33X[0;0YLayer 8[133X[101X
  
  
  [1X2.10-1 [33X[0;0YDetermination[133X[101X
  
  [33X[0;0YThe  408  641 062 groups of order 1536 have been determined using the cyclic
  split  extension  method  and the improved version of the Frattini extension
  method, see [BE99a] and [BE01].[133X
  
  
  [1X2.10-2 [33X[0;0YStoring[133X[101X
  
  [33X[0;0YWe  store  these groups in a special way as well and we obtain a compression
  to 6.1 MB. The groups are stored using references to the groups of order 512
  of layer 7.[133X
  
  [33X[0;0YThe  nilpotent  groups  [22XC_3  × Q[122X for [22XQ[122X a group of order 512 are based on the
  groups of order 512.[133X
  
  [33X[0;0YThe  major  part of the groups are the 398 032 384 non-nilpotent groups with
  normal  Sylow  3-subgroup.  The  compression of these groups follows the one
  outlined  in  layer  3. As described there, for each group [22XQ[122X of order 512 we
  compute  an  integer  which determines all groups of type [22XC_3 : Q[122X. There are
  only  15  249  different  integers  of  this type. In a first compression we
  create a list of references to the different integers.[133X
  
  [33X[0;0YNow  we  note that a group often has the same reference as the previous one.
  Thus we split the groups of order 512 in sets of 100 000 groups and create a
  record  for each set. The record contains two lists which are used to recall
  the  blocks in a set having the same reference. Thus the first list contains
  the  length  of  the  blocks  and the second list contains the corresponding
  references.[133X
  
  [33X[0;0YAgain,  in  both  lists  certain patterns occur often. In the first list the
  length  [22X1[122X appears often. Thus the [22X1[122X is not stored explicitly, but a blank in
  this  list  has  to be considered as [22X1[122X. In the second list often an entry is
  the  same as the one 2 places before. Thus these entries are deleted as well
  and blanks can be reconstructed by this rule.[133X
  
  [33X[0;0YAdditionally  we  store  the  number of resulting groups for each integer to
  speed up the method to find the group with a given catalogue number.[133X
  
  [33X[0;0YThe 18 028 groups with normal Sylow 2-subgroup are stored similarly to layer
  3.  As  described  for  layer  3  we  determine  a  long  integer  for  each
  homomorphism  [22XQ -> mathrmAut(P)[122X for [22XQ[122X of order 512 and [22XP[122X the cyclic group of
  order  3.  The  occurring  integers  are  highly  redundant – there are 6774
  different ones. Thus we use a list of references again.[133X
  
  [33X[0;0YThe  96  437  groups  without normal Sylow subgroup are determined using the
  Frattini  extension  method.  As  described in layer 2 they can be stored by
  encoding  the  relators  of  a pc presentation as long integer. However, the
  relators corresponding to the Frattini factors of the groups are known. Thus
  it  is sufficient to store the relators of the Frattini factors once for all
  groups  with  this  factor and encode the remaining relators only. Note that
  there  are only 16 different Frattini factors and only 12 of them have order
  less  than  1536.  The  groups  are  stored in lists corresponding to the 12
  Frattini factors.[133X
  
  
  [1X2.11 [33X[0;0YLayer 9[133X[101X
  
  [33X[0;0YThis layer contains the generic construction of the groups of order [22Xp^4[122X, [22Xp^5[122X
  and  [22Xp^6[122X  greater  than 3125 (those of order up to 3125 are contained in the
  lower layers of the Small Groups library).[133X
  
  
  [1X2.11-1 [33X[0;0YDetermination[133X[101X
  
  [33X[0;0YThe groups of order [22Xp^4[122X were first determined by Hölder (1893), see [Höl93].
  The  groups  of  order  [22Xp^5[122X  were  first  determined  by Bagnera (1898), see
  [Bag98].  The  groups  of  order  [22Xp^6[122X  were  first (correctly) determined by
  Newman, O'Brien and Vaughan-Lee (2004), see [NOV04].[133X
  
  
  [1X2.11-2 [33X[0;0YStoring[133X[101X
  
  [33X[0;0YThe  groups  of  order  [22Xp^4[122X ([22Xp ≥ 11[122X) are given by pc presentations which are
  produced at run-time by a function [10XSMALL_GROUP_FUNCS[19][110X provided by Newman.[133X
  
  [33X[0;0YThe  groups  of  order  [22Xp^5[122X  ([22Xp ≥ 7[122X) are given by pc presentations which are
  produced at run-time by a function [10XSMALL_GROUP_FUNCS[20][110X provided by Girnat,
  see [Gir03].[133X
  
  [33X[0;0YThe  groups  of  order  [22Xp^6[122X  ([22Xp ≥ 5[122X) are given by pc presentations which are
  produced at run-time by a function [10XSMALL_GROUP_FUNCS[21][110X provided by Newman,
  O'Brien and Vaughan-Lee, see [NOV04].[133X
  
  [33X[0;0YThe  groups  of  order  [22Xp^6[122X  are  given  as  a  list of partially repetitive
  structures.  These  are  compressed  into the file [11Xsml1.z[111X. At run-time, this
  compressed  structure will be expanded, but restricted to those parts of the
  structure  relevant  for  the  given  [22Xp[122X  when  needed.  It  is  cached  into
  [10XSMALL_GROUP_LIB[1][110X.  As  parts of this structure contain long ([22XO(p^2)[122X) lists
  of  groups which are classified by additional parameters and these lists are
  not  dense,  it might be necessary to set up the complete list of indices to
  find the presentation of a single group.[133X
  
  
  [1X2.11-3 [33X[0;0YIdentification[133X[101X
  
  [33X[0;0YA group of order [22Xp^4[122X can be identified and its catalogue number found by the
  function  [10XID_GROUP_FUNCS[19][110X  based  on  a  function  provided by Newman and
  modified by Besche.[133X
  
  [33X[0;0YThere  is no identification available for the groups of order [22Xp^5[122X and [22Xp^6[122X at
  present.[133X
  
  
  [1X2.12 [33X[0;0YLayer 10[133X[101X
  
  
  [1X2.12-1 [33X[0;0YGroups of squarefree order[133X[101X
  
  [33X[0;0YThese  groups  have first been determined by Hölder (1895), see [Höl95]. The
  implemented  construction is based on the determination given in [DE05]. The
  key invariants are the socle and socle factor.[133X
  
  [33X[0;0YThe  groups  of squarefree order which are not contained in lower layers are
  given  by  pc  presentations  which  are  produced at run-time by a function
  [10XSMALL_GROUP_FUNCS[24][110X  written  specially for this library. Such a group can
  be   identified   and   its   catalogue   number   found   by  the  function
  [10XID_GROUP_FUNCS[24][110X.[133X
  
  
  [1X2.12-2 [33X[0;0YGroups of cubefree but not squarefree order[133X[101X
  
  [33X[0;0YThese  groups  were  first  determined  in [DE05]. Every group with cubefree
  order is either solvable or has a direct decomposition into a solvable group
  and [22XPSL(2,p)[122X for a suitable prime.[133X
  
  [33X[0;0YThe groups of cubefree order at most 50 000 which are not contained in lower
  layers  and  are  not  squarefree  are  given  by pc presentations which are
  produced  at  run-time by a function [10XSMALL_GROUP_FUNCS[25][110X written specially
  for  this  library.  Such a group can be identified and its catalogue number
  found by the function [10XID_GROUP_FUNCS[25][110X.[133X
  
  
  [1X2.13 [33X[0;0YLayer 11[133X[101X
  
  
  [1X2.13-1 [33X[0;0YDetermination[133X[101X
  
  [33X[0;0YThe groups of order [22Xp^7[122X have been determined by O'Brien and Vaughan-Lee, see
  [OV05].  This  layer  contains  these  groups  for  some  small  primes: [22Xp =
  3,5,7,11[122X.[133X
  
  
  [1X2.13-2 [33X[0;0YStoring[133X[101X
  
  [33X[0;0YThe  groups are encoded by [2XPcGroupCode[102X ([14XReference: PcGroupCode[114X) and then the
  various codes are stored in compressed form. See the groups of order 512 for
  details.  Pc presentations for the groups are produced at run-time for these
  groups.[133X
  
  
  [1X2.13-3 [33X[0;0YIdentification[133X[101X
  
  [33X[0;0YThere is no identification function available for the groups in this layer.[133X
  
  
  [1X2.14 [33X[0;0YConcluding remarks[133X[101X
  
  [33X[0;0YThe  compression  of  group  data for layer 2 has been developed long ago. A
  first  version has been used in the [22Xp[122X-group generation algorithm and thus to
  encode  the  2- and 3-groups library of [5XGAP[105X 3. This compression is described
  in [BE99a].[133X
  
  [33X[0;0YThe  remaining  compression methods for layers 3 – 8 have been introduced by
  Hans  Ulrich  Besche  specially for this library. They are designed to store
  the  groups  in  as little space as possible. For different layers there are
  different  methods, since certain approaches had been successful for certain
  groups  but not for others. Moreover, already published layers have not been
  changed  again  and  thus useful concepts sometimes have not been applied to
  earlier layers.[133X
  
  [33X[0;0Y [133X
  
