Group Libraries

When you start &GAP;, it already knows several groups. Currently &GAP; initially knows the following groups: some basic groups, such as cyclic groups or symmetric groups (see ), Classical matrix groups (see ), the transitive permutation groups of degree at most 30 (see ), a library of groups of small order (see ), the finite perfect groups of size at most 10^6 (excluding 11 sizes) (see ). the primitive permutation groups of degree < 2499 (see ), the irreducible solvable subgroups of GL(n,p) for n>1 and p^n < 256 (see ), the irreducible maximal finite integral matrix groups of dimension at most 31 (see ), the crystallographic groups of dimension at most 4

There is usually no relation between the groups in the different libraries and a group may occur in different libraries in different incarnations.

Note that a system administrator may choose to install all, or only a few, or even none of the libraries. So some of the libraries mentioned below may not be available on your installation.

Basic Groups
<#Include Label="[1]{basic}"> <#Include Label="TrivialGroup"> <#Include Label="CyclicGroup"> <#Include Label="AbelianGroup"> <#Include Label="ElementaryAbelianGroup"> <#Include Label="FreeAbelianGroup"> <#Include Label="DihedralGroup"> <#Include Label="QuaternionGroup"> <#Include Label="ExtraspecialGroup"> <#Include Label="AlternatingGroup"> <#Include Label="SymmetricGroup"> <#Include Label="MathieuGroup"> <#Include Label="SuzukiGroup"> <#Include Label="ReeGroup">

Classical Groups
<#Include Label="[1]{classic}"> <#Include Label="GeneralLinearGroup"> <#Include Label="SpecialLinearGroup"> <#Include Label="GeneralUnitaryGroup"> <#Include Label="SpecialUnitaryGroup"> <#Include Label="SymplecticGroup"> <#Include Label="GeneralOrthogonalGroup"> <#Include Label="SpecialOrthogonalGroup"> <#Include Label="Omega_orthogonal_groups"> <#Include Label="GeneralSemilinearGroup"> <#Include Label="SpecialSemilinearGroup"> <#Include Label="ProjectiveGeneralLinearGroup"> <#Include Label="ProjectiveSpecialLinearGroup"> <#Include Label="ProjectiveGeneralUnitaryGroup"> <#Include Label="ProjectiveSpecialUnitaryGroup"> <#Include Label="ProjectiveSymplecticGroup"> <#Include Label="ProjectiveOmega">

Conjugacy Classes in Classical Groups
ConjugacyClasses
For general and special linear groups (see and ) &GAP; has an efficient method to generate representatives of the conjugacy classes. This uses results from linear algebra on normal forms of matrices. If you know how to do this for other types of classical groups, please, tell us.

gap> g := SL(4,9); SL(4,9) gap> NrConjugacyClasses(g); 861 gap> cl := ConjugacyClasses(g);; gap> Length(cl); 861

<#Include Label="NrConjugacyClassesGL">

Constructors for Basic Groups

All functions described in the previous sections call constructor operations to do the work. The names of the constructors are obtained from the names of the functions by appending "Cons", so for example calls the constructor

CyclicGroupCons( cat, n )

The first argument cat for each method of this constructor must be the category for which the method is installed. For example the method for constructing a cyclic permutation group is installed as follows (see for the meaning of the arguments.

InstallMethod( CyclicGroupCons, "regular perm group", true, [ IsPermGroup and IsRegularProp and IsFinite, IsInt and IsPosRat ], 0, function( filter, n )

...

end );
Selection Functions
AllPrimitiveGroups
AllTransitiveGroups
AllLibraryGroups
AllLibraryGroups( fun1, val1, ... )

For a number of the group libraries two selection functions are provided. Each AllLibraryGroups selection function permits one to select all groups from the library Library that have a given set of properties. Currently, the library selection functions provided, of this type, are , , AllTransitiveGroups, and AllPrimitiveGroups. Corresponding to each of these there is a OneLibraryGroup function (see below) which returns at most one group.

These functions take an arbitrary number of pairs (but at least one pair) of arguments. The first argument in such a pair is a function that can be applied to the groups in the library, and the second argument is either a single value that this function must return in order to have this group included in the selection, or a list of such values. For the function the first such function must be , and, unlike the other library selection functions, it supports an alternative syntax where is omitted (see ). Also, see , for details pertaining to this function.

For an example, let us consider the selection function for the library of transitive groups (also see ). The command

gap> AllTransitiveGroups(NrMovedPoints,[10..15], > Size, [1..100], > IsAbelian, false );

returns a list of all transitive groups with degree between 10 and 15 and size less than 100 that are not abelian.

Thus AllTransitiveGroups behaves as if it was implemented by a function similar to the one defined below, where TransitiveGroupsList is a list of all transitive groups. (Note that in the definition below we assume for simplicity that AllTransitiveGroups accepts exactly 4 arguments. It is of course obvious how to change this definition so that the function would accept a variable number of arguments.)

AllTransitiveGroups := function( fun1, val1, fun2, val2 ) local groups, g, i; groups := []; for i in [ 1 .. Length( TransitiveGroupsList ) ] do g := TransitiveGroupsList[i]; if fun1(g) = val1 or IsList(val1) and fun1(g) in val1 and fun2(g) = val2 or IsList(val2) and fun2(g) in val2 then Add( groups, g ); fi; od; return groups; end;

Note that the real selection functions are considerably more difficult, to improve the efficiency. Most important, each recognizes a certain set of properties which are precomputed for the library without having to compute them anew for each group. This will substantially speed up the selection process. In the description of each library we will list the properties that are stored for this library.

OnePrimitiveGroup
OneTransitiveGroup
OneLibraryGroup
OneLibraryGroup( fun1, val1, ... )

For each AllLibraryGroups function (see above) there is a corresponding function OneLibraryGroup on exactly the same arguments, i.e., there are OneSmallGroup, OneIrreducibleSolvableGroup, OneTransitiveGroup, and OnePrimitiveGroup. Each function simply returns one group in the library that has the prescribed properties, instead of all such groups. It returns fail if no such group exists in the library.

Transitive Permutation Groups

The transitive groups library currently contains representatives for all transitive permutation groups of degree at most 30. Two permutations groups of the same degree are considered to be equivalent, if there is a renumbering of points, which maps one group into the other one. In other words, if they lie in the same conjugacy class under operation of the full symmetric group by conjugation.

The selection functions (see ) for the transitive groups library are AllTransitiveGroups and OneTransitiveGroup. They obtain the following attributes from the database without having to compute them anew:

, , , and .

This library was computed by Gregory Butler, John McKay, Gordon Royle and Alexander Hulpke. The list of transitive groups up to degree 11 was published in , the list of degree 12 was published in , degree 14 and 15 were published in and degrees 16-30 were published in and . (Groups of prime degree of course are primitive and were known long before.)

The arrangement and the names of the groups of degree up to 15 is the same as given in . With the exception of the symmetric and alternating group (which are represented as and ) the generators for these groups also conform to this paper with the only difference that 0 (which is not permitted in &GAP; for permutations to act on) is always replaced by the degree.

<#Include Label="TransitiveGroup"> <#Include Label="NrTransitiveGroups"> <#Include Label="TransitiveIdentification">

Small Groups

The Small Groups library gives access to all groups of certain small orders. The groups are sorted by their orders and they are listed up to isomorphism; that is, for each of the available orders a complete and irredundant list of isomorphism type representatives of groups is given. Currently, the library contains the following groups:

those of order at most 2000 except 1024 (423\;164\;062 groups);
those of cubefree order at most 50 000 (395 \; 703 groups);
those of order p^7 for the primes p = 3,5,7,11 (907 \; 489 groups);
those of order p^n for n \leq 6 and all primes p
those of order q^n \cdot p for q^n dividing 2^8, 3^6, 5^5 or 7^4 and all primes p with p \neq q;
those of squarefree order;
those whose order factorises into at most 3 primes.

The first three items in this list cover an explicit range of orders; the last four provide access to infinite families of groups having orders of certain types.

The library also has an identification function: it returns the library number of a given group. This function determines library numbers using invariants of groups. The function is available for all orders in the library except for the orders 512 and 1536 and except for the orders p^5, p^6 and p^7 above 2000.

The library is organised in 11 layers. Each layer contains the groups of certain orders and their corresponding group identification routines. It is possible to install the first n layers of the group library and the first m layers of the group identification for each 1 \leq m \leq n \leq 11. This might be useful to save disk space. There is an extensive README file for the Small Groups library available in the small directory of the &GAP; distribution containing detailed information on the layers. A brief description of the layers is given here: (1) the groups whose order factorises into at most 3 primes. (2) the remaining groups of order at most 1000 except 512 and 768. (3) the remaining groups of order 2^n \cdot p with n \leq 8 and p an odd prime. (4) the remaining groups of order 5^5, 7^4 and of order q^n \cdot p for q^n dividing 3^6, 5^5 or 7^4 and p \neq q a prime. (5) the remaining groups of order at most 2000 except 1024, 1152, 1536 and 1920. (6) the groups of orders 1152 and 1920. (7) the groups of order 512. (8) the groups of order 1536. (9) the remaining groups of order p^n for 4 \leq n \leq 6. (10) the remaining groups of cubefree order at most 50 000 and of squarefree order. (11) the remaining groups of order p^7 for p = 3,5,7,11.

The data in this library has been carefully checked and cross-checked. It is believed to be reliable. However, no absolute guarantees are given and users should, as always, make their own checks in critical cases.

The data occupies about 30 MB (storing over 400 million groups in about 200 megabits). The group identification occupies about 47 MB of which 18 MB is used for the groups in layer (6). More information on the Small Groups library can be found on http://www.icm.tu-bs.de/ag_algebra/software/small/

This library has been constructed by Hans Ulrich Besche, Bettina Eick and E. A. O'Brien. A survey on this topic and an account of the history of group constructions can be found in . Further detailed information on the construction of this library is available in , , , , , , , , , , , , .

TwoGroup
library
ThreeGroup
library
The Small Groups library incorporates the &GAP; 3 libraries TwoGroup and ThreeGroup. The data from these libraries was directly included into the Small Groups library, and the ordering there was preserved. The Small Groups library replaces the Gap 3 library of solvable groups of order at most 100. However, both the organisation and data descriptions of these groups has changed in the Small Groups library.

<#Include Label="SmallGroup"> <#Include Label="AllSmallGroups"> <#Include Label="OneSmallGroup"> <#Include Label="NumberSmallGroups"> <#Include Label="IdSmallGroup"> <#Include Label="IdsOfAllSmallGroups"> <#Include Label="IdGap3SolvableGroup"> <#Include Label="SmallGroupsInformation"> <#Include Label="UnloadSmallGroupsData">

Finite Perfect Groups
perfect groups
The &GAP; library of finite perfect groups provides, up to isomorphism, a list of all perfect groups whose sizes are less than 10^6 excluding the following sizes:

For n = 61440, 122880, 172032, 245760, 344064, 491520, 688128, or 983040, the perfect groups of size n have not completely been determined yet. The library neither provides the number of these groups nor the groups themselves.
For n = 86016, 368640, or 737280, the library does not yet contain the perfect groups of size n, it only provides their numbers which are 52, 46, and 54, respectively.

Except for these eleven sizes, the list of altogether 1097 perfect groups in the library is complete. It relies on results of Derek F. Holt and Wilhelm Plesken which are published in their book Perfect Groups . Moreover, they have supplied us with files with presentations of 488 of the groups. In terms of these, the remaining 607 nontrivial groups in the library can be described as 276 direct products, 107 central products, and 224 subdirect products. They are computed automatically by suitable &GAP; functions whenever they are needed. Two additional groups omitted from the book Perfect Groups have also been included.

We are grateful to Derek Holt and Wilhelm Plesken for making their groups available to the &GAP; community by contributing their files. It should be noted that their book contains a lot of further information for many of the library groups. So we would like to recommend it to any &GAP; user who is interested in the groups.

The library has been brought into &GAP; format by Volkmar Felsch.

As all groups are stored by presentations, a permutation representation is obtained by coset enumeration. Note that some of the library groups do not have a faithful permutation representation of small degree. Computations in these groups may be rather time consuming.

<#Include Label="SizesPerfectGroups"> <#Include Label="PerfectGroup"> <#Include Label="PerfectIdentification"> <#Include Label="NumberPerfectGroups"> <#Include Label="NumberPerfectLibraryGroups"> <#Include Label="SizeNumbersPerfectGroups"> <#Include Label="DisplayInformationPerfectGroups">

More about the Perfect Groups Library

For any library group G, the library files do not only provide a presentation, but, in addition, a list of one or more subgroups S_1, \ldots, S_r of G such that there is a faithful permutation representation of G of degree \sum_{{i = 1}}^r [G:S_i] on the set \{ S_i g \mid 1 \leq i \leq r, g \in G \} of the cosets of the S_i. This allows one to construct the groups as permutation groups. The function displays only the available degree. The message orbit size = 8

in the above example means that the available permutation representation is transitive and of degree 8, whereas the message orbit sizes = 5 + 16 means that a nontransitive permutation representation is available which acts on two orbits of size 5 and 16 respectively.

The notation used in the description of a group is explained in section 5.1.2 of . We quote the respective page from there:

Within a class Q\,\#\,p, an isomorphism type of groups will be denoted by an ordered pair of integers (r,n), where r \geq 0 and n > 0. More precisely, the isomorphism types in Q \# p of order p^r |Q| will be denoted by (r,1), (r,2), (r,3), \ldots\,. Thus Q will always get the size number (0,1).

In addition to the symbol (r,n), the groups in Q\,\#\,p will also be given a more descriptive name. The purpose of this is to provide a very rough idea of the structure of the group. The names are derived in the following manner. First of all, the isomorphism classes of irreducible F_pQ-modules M with |Q|.|M| \leq 10^6, where F_p is the field of order p, are assigned symbols. These will either be simply p^x, where x is the dimension of the module, or, if there is more than one isomorphism class of irreducible modules having the same dimension, they will be denoted byp^x, p^{{x'}}, etc. The one-dimensional module with trivial Q-action will therefore be denoted by p^1. These symbols will be listed under the description of Q. The group name consists essentially of a list of the composition factors working from the top of the group downwards; hence it always starts with the name of Q itself. (This convention is the most convenient in our context, but it is different from that adopted in the ATLAS , for example, where composition factors are listed in the reverse order. For example, we denote a group isomorphic to SL(2,5) by A_5 2^1 rather than 2.A_5.)

Some other symbols are used in the name, in order to give some idea of the relationship between these composition factors, and splitting properties. We shall now list these additional symbols.

\times
between two factors denotes a direct product of F_pQ-modules or groups.
C
(for commutator) between two factors means that the second lies in the commutator subgroup of the first. Similarly, a segment of the form (f_1 \! \times \! f_2) C f_3 would mean that the factors f_1 and f_2 commute modulo f_3 and f_3 lies in [f_1,f_2].
A
(for abelian) between two factors indicates that the second is in the pth power (but not the commutator subgroup) of the first. A may also follow the factors, if bracketed.
E
(for elementary abelian) between two factors indicates that together they generate an elementary abelian group (modulo subsequent factors), but that the resulting F_p Q-module extension does not split.
N
(for nonsplit) before a factor indicates that Q (or possibly its covering group) splits down as far at this factor but not over the factor itself. So Q f_1 N f_2 means that the normal subgroup f_1 f_2 of the group has no complement but, modulo f_2, f_1, does have a complement.

Brackets have their obvious meaning. Summarizing, we have:

\times
= direct product;
C
= commutator subgroup;
A
= abelian;
E
= elementary abelian; and
N
= nonsplit.

Here are some examples.

(i)
A_5 (2^4 E 2^1 E 2^4) A
means that the pairs 2^4 E 2^1 and 2^1 E 2^4 are both elementary abelian of exponent 4.
(ii)
A_5 (2^4 E 2^1 A) C 2^1
means that O_2(G) is of symplectic type 2^{{1+5}}, with Frattini factor group of type 2^4 E 2^1. The A after the 2^1 indicates that G has a central cyclic subgroup 2^1 A 2^1 of order 4.
(iii)
L_3(2) ((2^1 E) \! \times \! ( N 2^3 E 2^{{3'}} A) C) 2^{{3'}}
means that the 2^{{3'}} factor at the bottom lies in the commutator subgroup of the pair 2^3 E 2^{{3'}} in the middle, but the lower pair 2^{{3'}} A 2^{{3'}} is abelian of exponent 4. There is also a submodule 2^1 E 2^{{3'}}, and the covering group L_3(2) 2^1 of L_3(2) does not split over the 2^3 factor. (Since G is perfect, it goes without saying that the extension L_3(2) 2^1 cannot split itself.)

We must stress that this notation does not always succeed in being precise or even unambiguous, and the reader is free to ignore it if it does not seem helpful.

If such a group description has been given in the book for G (and, in fact, this is the case for most of the library groups), it is displayed by . Otherwise the function provides a less explicit description of the (in these cases unique) Holt-Plesken class to which G belongs, together with a serial number if this is necessary to make it unique.

Primitive Permutation Groups
<#Include Label="[1]{primitiv}">

<#Include Label="[2]{primitiv}"> <#Include Label="PrimitiveGroup"> <#Include Label="NrPrimitiveGroups"> <#Include Label="PrimitiveGroupsIterator">

In the primitive groups are sorted in cohorts according to their socle. For each degree, the variable contains a list of the cohorts for the primitive groups of this degree. Each cohort is represented by a list of length 2, the first entry specifies the socle type (see ), the second entry listing the index numbers of the groups in this degree.

For example in degree 49, we have four cohorts with socles (&ZZ; / 7 &ZZ;)^2, L_2(7)^2, A_7^2 and A_{49} respectively. the group PrimitiveGroup(49,36), which is isomorphic to (A_7 \times A_7):2^2, lies in the third cohort with socle (A_7 \times A_7).

gap> COHORTS_PRIMITIVE_GROUPS[49]; [ [ rec( parameter := 7, series := "Z", width := 2 ), [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33 ] ], [ rec( parameter := [ 2, 7 ], series := "L", width := 2 ), [ 34 ] ], [ rec( parameter := 7, series := "A", width := 2 ), [ 35, 36, 37, 38 ] ], [ rec( parameter := 49, series := "A", width := 1 ), [ 39, 40 ] ] ]
Index numbers of primitive groups
<#Include Label="PrimitiveIdentification"> <#Include Label="SimsNo">

The system `Magma` also provides a list of primitive groups (see ). For historical reasons, its indexing up to degree 999 differs from the one used by &GAP;. The variable can be used to obtain this correspondence. The magma index number of the &GAP; group PrimitiveGroup(deg,nr) is stored in the entry PRIMITIVE_INDICES_MAGMA[deg][nr], for degree at most 999.

Vice versa, the group of degree deg with `Magma` index number nr has the &GAP; index

Position(PRIMITIVE_INDICES_MAGMA[deg],nr)
, in particular it can be obtained by the &GAP; command

PrimitiveGroup(deg,Position(PRIMITIVE_INDICES_MAGMA[deg],nr));
Irreducible Solvable Matrix Groups
<#Include Label="IrreducibleSolvableGroupMS"> <#Include Label="NumberIrreducibleSolvableGroups"> <#Include Label="AllIrreducibleSolvableGroups"> <#Include Label="OneIrreducibleSolvableGroup"> <#Include Label="PrimitiveIndexIrreducibleSolvableGroup"> <#Include Label="IrreducibleSolvableGroup">

Irreducible Maximal Finite Integral Matrix Groups

A library of irreducible maximal finite integral matrix groups is provided with &GAP;. It contains &QQ;-class representatives for all of these groups of dimension at most 31, and &ZZ;-class representatives for those of dimension at most 11 or of dimension 13, 17, 19, or 23.

The groups provided in this library have been determined by Wilhelm Plesken, partially as joint work with Michael Pohst, or by members of his institute (Lehrstuhl B für Mathematik, RWTH Aachen). In particular, the data for the groups of dimensions 2 to 9 have been taken from the output of computer calculations which they performed in 1979 (see , ). The &ZZ;-class representatives of the groups of dimension 10 have been determined and computed by Bernd Souvignier (), and those of dimensions 11, 13, and 17 have been recomputed for this library from the circulant Gram matrices given in , using the stand-alone programs for the computation of short vectors and Bravais groups which have been developed in Plesken's institute. The &ZZ;-class representatives of the groups of dimensions 19 and 23 had already been determined in . Gabriele Nebe has recomputed them for us. Her main contribution to this library, however, is that she has determined and computed the &QQ;-class representatives of the groups of non-prime dimensions between 12 and 24 and the groups of dimensions 25 to 31 (see , , , ).

The library has been brought into &GAP; format by Volkmar Felsch. He has applied several &GAP; routines to check certain consistency of the data. However, the credit and responsibility for the lists remain with the authors. We are grateful to Wilhelm Plesken, Gabriele Nebe, and Bernd Souvignier for supplying their results to &GAP;.

In the preceding acknowledgement, we used some notations that will also be needed in the sequel. We first define these.

Any integral matrix group G of dimension n is a subgroup of GL_n(&ZZ;) as well as of GL_n(&QQ;) and hence lies in some conjugacy class of integral matrix groups under GL_n(&ZZ;) and also in some conjugacy class of rational matrix groups under GL_n(&QQ;). As usual, we call these classes the &ZZ;-class and the &QQ;-class of G, respectively. Note that any conjugacy class of subgroups of GL_n(&QQ;) contains at least one &ZZ;-class of subgroups of GL_n(&ZZ;) and hence can be considered as the &QQ;-class of some integral matrix group.

In the context of this library we are only concerned with &ZZ;-classes and &QQ;-classes of subgroups of GL_n(&ZZ;) which are irreducible and maximal finite in GL_n(&ZZ;) (we will call them i.m.f. subgroups of GL_n(&ZZ;)). We can distinguish two types of these groups:

First, there are those i.m.f. subgroups of GL_n(&ZZ;) which are also maximal finite subgroups of GL_n(&QQ;). Let us denote the set of their &QQ;-classes by Q_1(n). It is clear from the above remark that Q_1(n) just consists of the &QQ;-classes of i.m.f. subgroups of GL_n(&QQ;).

Secondly, there is the set Q_2(n) of the &QQ;-classes of the remaining i.m.f. subgroups of GL_n(&ZZ;), i.e., of those which are not maximal finite subgroups of GL_n(&QQ;). For any such group G, say, there is at least one class C \in Q_1(n) such that G is conjugate under &QQ; to a proper subgroup of some group H \in C. In fact, the class C is uniquely determined for any group G occurring in the library (though there seems to be no reason to assume that this property should hold in general). Hence we may call C the rational i.m.f. class of G. Finally, we will denote the number of classes in Q_1(n) and Q_2(n) by q_1(n) and q_2(n), respectively.

As an example, let us consider the case n = 4. There are 6 &ZZ;-classes of i.m.f. subgroups of GL_4(&ZZ;) with representative subgroups G_1, \ldots, G_6 of isomorphism types G_1 \cong W(F_4), G_2 \cong D_{12} \wr C_2, G_3 \cong G_4 \cong C_2 \times S_5, G_5 \cong W(B_4), and G_6 \cong (D_{12} Y D_{12}) \!:\! C_2. The corresponding &QQ;-classes, R_1, \ldots, R_6, say, are pairwise different except that R_3 coincides with R_4. The groups G_1, G_2, and G_3 are i.m.f. subgroups of GL_4(&QQ;), but G_5 and G_6 are not because they are conjugate under GL_4(&QQ;) to proper subgroups of G_1 and G_2, respectively. So we have Q_1(4) = \{ R_1, R_2, R_3 \}, Q_2(4) = \{ R_5, R_6 \}, q_1(4) = 3, and q_2(4) = 2.

The q_1(n) &QQ;-classes of i.m.f. subgroups of GL_n(&QQ;) have been determined for each dimension n \leq 31. The current &GAP; library provides integral representative groups for all these classes. Moreover, all &ZZ;-classes of i.m.f. subgroups of GL_n(&ZZ;) are known for n \leq 11 and for n \in \{13,17,19,23\}. For these dimensions, the library offers integral representative groups for all &QQ;-classes in Q_1(n) and Q_2(n) as well as for all &ZZ;-classes of i.m.f. subgroups of GL_n(&ZZ;).

Any group G of dimension n given in the library is represented as the automorphism group G = Aut(F,L) = \{ g \in GL_n(&ZZ;) \mid Lg = L, g F g^{tr} = F \} of a positive definite symmetric n \times n matrix F \in &ZZ;^{{n \times n}} on an n-dimensional lattice L \cong &ZZ;^{{1 \times n}} (for details see e.g. ). &GAP; provides for G a list of matrix generators and the Gram matrix F.

The positive definite quadratic form defined by F defines a norm v F v^{tr} for each vector v \in L, and there is only a finite set of vectors of minimal norm. These vectors are often simply called the short vectors. Their set splits into orbits under G, and G being irreducible acts faithfully on each of these orbits by multiplication from the right. &GAP; provides for each of these orbits the orbit size and a representative vector.

Like most of the other &GAP; libraries, the library of i.m.f. integral matrix groups supplies an extraction function, ImfMatrixGroup. However, as the library involves only 525 different groups, there is no need for a selection or an example function. Instead, there are two functions, and , which provide some &ZZ;-class invariants that can be extracted from the library without actually constructing the representative groups themselves. The difference between these two functions is that the latter one displays the resulting data in some easily readable format, whereas the first one returns them as record components so that you can properly access them.

We shall give an individual description of each of the library functions, but first we would like to insert a short remark concerning their names: Any self-explaining name of a function handling irreducible maximal finite integral matrix groups would have to include this term in full length and hence would grow extremely long. Therefore we have decided to use the abbreviation Imf instead in order to restrict the names to some reasonable length.

The first three functions can be used to formulate loops over the classes.

ImfNumberQQClasses
returns the number q_1( dim ) of &QQ;-classes of i.m.f. rational matrix groups of dimension dim. Valid values of dim are all positive integers up to 31.

Note: In order to enable you to loop just over the classes belonging to Q_1( dim ), we have arranged the list of &QQ;-classes of dimension dim for any dimension dim in the library such that, whenever the classes of Q_2( dim ) are known, too, i.e., in the cases dim \leq 11 or dim \in \{13,17,19,23\}, the classes of Q_1( dim ) precede those of Q_2( dim ) and hence are numbered from 1 to q_1( dim ).

ImfNumberQClasses
returns the number of &QQ;-classes of groups of dimension dim which are available in the library. If dim \leq 11 or dim \in \{13,17,19,23\}, this is the number q_1( dim ) + q_2( dim ) of &QQ;-classes of i.m.f. subgroups of GL_{dim}(&ZZ;). Otherwise, it is just the number q_1( dim ) of &QQ;-classes of i.m.f. subgroups of GL_{dim}(&QQ;). Valid values of dim are all positive integers up to 31.

returns the number of &ZZ;-classes in the q-th &QQ;-class of i.m.f. integral matrix groups of dimension dim. Valid values of dim are all positive integers up to 11 and all primes up to 23.

displays the following &ZZ;-class invariants of the groups in the z-th &ZZ;-class in the q-th &QQ;-class of i.m.f. integral matrix groups of dimension dim:

its &ZZ;-class number in the form dim.q.z, if dim is at most 11 or a prime at most 23, or its &QQ;-class number in the form dim.q, else,
a message if the group is solvable,
the size of the group,
the isomorphism type of the group,
the elementary divisors of the associated quadratic form,
the sizes of the orbits of short vectors (these sizes are the degrees of the faithful permutation representations which you may construct using the functions or below),
the norm of the associated short vectors,
only in case that the group is not an i.m.f. group in GL_n(&QQ;): an appropriate message, including the &QQ;-class number of the corresponding rational i.m.f. class.

If you specify the value 0 for any of the parameters dim, q, or z, the command will loop over all available dimensions, &QQ;-classes of given dimension, or &ZZ;-classes within the given &QQ;-class, respectively. Otherwise, the values of the arguments must be in range. A value z \neq 1 must not be specified if the &ZZ;-classes are not known for the given dimension, i.e., if dim > 11 and dim \not \in \{ 13, 17, 19, 23 \}. The default value of z is 1. This value of z will be accepted even if the &ZZ;-classes are not known. Then it specifies the only representative group which is available for the q-th &QQ;-class. The greatest legal value of dim is 31.

gap> DisplayImfInvariants( 3, 1, 0 ); #I Z-class 3.1.1: Solvable, size = 2^4*3 #I isomorphism type = C2 wr S3 = C2 x S4 = W(B3) #I elementary divisors = 1^3 #I orbit size = 6, minimal norm = 1 #I Z-class 3.1.2: Solvable, size = 2^4*3 #I isomorphism type = C2 wr S3 = C2 x S4 = C2 x W(A3) #I elementary divisors = 1*4^2 #I orbit size = 8, minimal norm = 3 #I Z-class 3.1.3: Solvable, size = 2^4*3 #I isomorphism type = C2 wr S3 = C2 x S4 = C2 x W(A3) #I elementary divisors = 1^2*4 #I orbit size = 12, minimal norm = 2 gap> DisplayImfInvariants( 8, 15, 1 ); #I Z-class 8.15.1: Solvable, size = 2^5*3^4 #I isomorphism type = C2 x (S3 wr S3) #I elementary divisors = 1*3^3*9^3*27 #I orbit size = 54, minimal norm = 8 #I not maximal finite in GL(8,Q), rational imf class is 8.5 gap> DisplayImfInvariants( 20, 23 ); #I Q-class 20.23: Size = 2^5*3^2*5*11 #I isomorphism type = (PSL(2,11) x D12).C2 #I elementary divisors = 1^18*11^2 #I orbit size = 3*660 + 2*1980 + 2640 + 3960, minimal norm = 4

Note that the function uses a kind of shorthand to display the elementary divisors. E. g., the expression 1*3^3*9^3*27 in the preceding example stands for the elementary divisors 1,3,3,3,9,9,9,27. (See also the next example which shows that the function provides the elementary divisors in form of an ordinary &GAP; list.)

In the description of the isomorphism types the following notations are used: A x B denotes a direct product of a group A by a group B, A subd B denotes a subdirect product of A by B, A Y B denotes a central product of A by B, A wr B denotes a wreath product of A by B, A:B denotes a split extension of A by B, A.B denotes just an extension of A by B (split or nonsplit).

The groups involved are the cyclic groups C_n, dihedral groups D_n, and generalized quaternion groups Q_n of order n, denoted by C n, D n, and Q n, respectively, the alternating groups A_n and symmetric groups S_n of degree n, denoted by A n and S n, respectively, the linear groups GL_n(q), PGL_n(q), SL_n(q), and PSL_n(q), denoted by GL(n,q), PGL(n,q), SL(n,q), and PSL(n,q), respectively, the unitary groups SU_n(q) and PSU_n(q), denoted by SU(n,q) and PSU(n,q), respectively, the symplectic groups Sp(n,q) and PSp(n,q), denoted by Sp(n,q) and PSp(n,q), respectively, the orthogonal groups O_8^+(2) and PO_8^+(2), denoted by O+(8,2) and PO+(8,2), respectively, the extraspecial groups 2_+^{{1+8}}, 3_+^{{1+2}}, 3_+^{{1+4}}, and 5_+^{{1+2}}, denoted by 2+^(1+8), 3+^(1+2), 3+^(1+4), and 5+^(1+2), respectively, the Chevalley group G_2(3), denoted by G2(3), the twisted Chevalley group {^3}D_4(2), denoted by 3D4(2), the Suzuki group Sz(8), denoted by Sz(8), the Weyl groups W(A_n), W(B_n), W(D_n), W(E_n), and W(F_4), denoted by W(An), W(Bn), W(Dn), W(En), and W(F4), respectively, the sporadic simple groups Co_1, Co_2, Co_3, HS, J_2, M_{12}, M_{22}, M_{23}, M_{24}, and Mc, denoted by Co1, Co2, Co3, HS, J2, M12, M22, M23, M24, and Mc, respectively, a point stabilizer of index 11 in M_{11}, denoted by M10.

As mentioned above, the data assembled by the function are cheap data in the sense that they can be provided by the library without loading any of its large matrix files or performing any matrix calculations. The following function allows you to get proper access to these cheap data instead of just displaying them.
returns a record which provides some &ZZ;-class invariants of the groups in the z-th &ZZ;-class in the q-th &QQ;-class of i.m.f. integral matrix groups of dimension dim. A value z \neq 1 must not be specified if the &ZZ;-classes are not known for the given dimension, i.e., if dim > 11 and dim \not \in \{ 13, 17, 19, 23 \}. The default value of z is 1. This value of z will be accepted even if the &ZZ;-classes are not known. Then it specifies the only representative group which is available for the q-th &QQ;-class. The greatest legal value of dim is 31.

The resulting record contains six or seven components:

size
the size of any representative group G,
isSolvable
is true if G is solvable,
isomorphismType
a text string describing the isomorphism type of G (in the same notation as used by the function DisplayImfInvariants above),
elementaryDivisors
the elementary divisors of the associated Gram matrix F (in the same format as the result of the function ,
minimalNorm
the norm of the associated short vectors,
sizesOrbitsShortVectors
the sizes of the orbits of short vectors under F,
maximalQClass
the &QQ;-class number of an i.m.f. group in GL_n(&QQ;) that contains G as a subgroup (only in case that not G itself is an i.m.f. subgroup of GL_n(&QQ;)).

Note that four of these data, namely the group size, the solvability, the isomorphism type, and the corresponding rational i.m.f. class, are not only &ZZ;-class invariants, but also &QQ;-class invariants.

Note further that, though the isomorphism type is a &QQ;-class invariant, you will sometimes get different descriptions for different &ZZ;-classes of the same &QQ;-class (as, e.g., for the classes 3.1.1 and 3.1.2 in the last example above). The purpose of this behaviour is to provide some more information about the underlying lattices.

gap> ImfInvariants( 8, 15, 1 ); rec( elementaryDivisors := [ 1, 3, 3, 3, 9, 9, 9, 27 ], isSolvable := true, isomorphismType := "C2 x (S3 wr S3)", maximalQClass := 5, minimalNorm := 8, size := 2592, sizesOrbitsShortVectors := [ 54 ] ) gap> ImfInvariants( 24, 1 ).size; 10409396852733332453861621760000 gap> ImfInvariants( 23, 5, 2 ).sizesOrbitsShortVectors; [ 552, 53130 ] gap> for i in [ 1 .. ImfNumberQClasses( 22 ) ] do > Print( ImfInvariants( 22, i ).isomorphismType, "\n" ); od; C2 wr S22 = W(B22) (C2 x PSU(6,2)).S3 (C2 x S3) wr S11 = (C2 x W(A2)) wr S11 (C2 x S12) wr C2 = (C2 x W(A11)) wr C2 C2 x S3 x S12 = C2 x W(A2) x W(A11) (C2 x HS).C2 (C2 x Mc).C2 C2 x S23 = C2 x W(A22) C2 x PSL(2,23) C2 x PSL(2,23) C2 x PGL(2,23) C2 x PGL(2,23)
is the essential extraction function of this library (note that its name has been changed from ImfMatGroup in &GAP; 3 to in &GAP; 4). It returns a representative group, G say, of the z-th &ZZ;-class in the q-th &QQ;-class of i.m.f. integral matrix groups of dimension dim. A value z \neq 1 must not be specified if the &ZZ;-classes are not known for the given dimension, i.e., if dim > 11 and dim \not \in \{ 13, 17, 19, 23 \}. The default value of z is 1. This value of z will be accepted even if the &ZZ;-classes are not known. Then it specifies the only representative group which is available for the q-th &QQ;-class. The greatest legal value of dim is 31.

gap> G := ImfMatrixGroup( 5, 1, 3 ); ImfMatrixGroup(5,1,3) gap> for m in GeneratorsOfGroup( G ) do PrintArray( m ); od; [ [ -1, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0 ], [ 0, 0, 0, 1, 0 ], [ -1, -1, -1, -1, 2 ], [ -1, 0, 0, 0, 1 ] ] [ [ 0, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0 ], [ 0, 0, 0, 1, 0 ], [ 1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 1 ] ]

The attributes and IsSolvable will be properly set in the resulting matrix group G. In addition, it has two attributes IsImfMatrixGroup and ImfRecord where the first one is just a logical flag set to true and the latter one is a record. Except for the group size and the solvability flag, this record contains the same components as the resulting record of the function described above, namely the components isomorphismType, elementaryDivisors, minimalNorm, and sizesOrbitsShortVectors and, if G is not a rational i.m.f. group, maximalQClass. Moreover, it has the two components

form
the associated Gram matrix F, and
repsOrbitsShortVectors
representatives of the orbits of short vectors under F.

The last one of these components will be required by the function below.

gap> Size( G ); 3840 gap> imf := ImfRecord( G );; gap> imf.isomorphismType; "C2 wr S5 = C2 x W(D5)" gap> PrintArray( imf.form ); [ [ 4, 0, 0, 0, 2 ], [ 0, 4, 0, 0, 2 ], [ 0, 0, 4, 0, 2 ], [ 0, 0, 0, 4, 2 ], [ 2, 2, 2, 2, 5 ] ] gap> imf.elementaryDivisors; [ 1, 4, 4, 4, 4 ] gap> imf.minimalNorm; 4

If you want to perform calculations in such a matrix group G you should be aware of the fact that the permutation group routines of &GAP; are much more efficient than the matrix group routines. Hence we recommend that you do your computations, whenever possible, in the isomorphic permutation group which is induced by the action of G on one of the orbits of the associated short vectors. You may call one of the following functions or to get an isomorphism to such a permutation group (note that these &GAP; 4 functions have replaced the &GAP; 3 functions PermGroup and PermGroupImfGroup).
returns an isomorphism, \varphi say, from the given i.m.f. integral matrix group G to a permutation group P := \varphi(G) acting on a minimal orbit, S say, of short vectors of G such that each matrix m \in G is mapped to the permutation induced by its action on S.

Note that in case of a large orbit the construction of \varphi may be space and time consuming. Fortunately, there are only six &QQ;-classes in the library for which the smallest orbit of short vectors is of size greater than 20000, the worst case being the orbit of size 196560 for the Leech lattice (dim = 24, q = 3).

The inverse isomorphism \varphi^{{-1}} from P to G is constructed by determining a &QQ;-base B \subset S of &QQ;^{{1 \times dim}} in S and, in addition, the associated base change matrix M which transforms B into the standard base of &ZZ;^{{1 \times dim}}. This allows a simple computation of the preimage \varphi^{{-1}}(p) of any permutation p \in P, as follows. If, for 1 \leq i \leq dim, b_i is the position number in S of the i-th base vector in B, it suffices to look up the vector whose position number in S is the image of b_i under p and to multiply this vector by M to get the i-th row of \varphi^{{-1}}(p).

You may use the functions and to switch from G to P and back from P to G.

As an example, let us continue the preceding example and compute the solvable residuum of the group G.

gap> # Perform the computations in an isomorphic permutation group. gap> phi := IsomorphismPermGroup( G );; gap> P := Image( phi ); Group([ (1,7,6)(2,9)(4,5,10), (2,3,4,5)(6,9,8,7) ]) gap> D := DerivedSubgroup( P ); Group([ (1,2,10,9)(3,8)(4,5)(6,7), (1,6)(2,7,9,4)(3,8)(5,10), (1,9) (2,10)(3,6,8,5)(4,7) ]) gap> Size( D ); 960 gap> IsPerfectGroup( D ); true gap> # We have found the solvable residuum of P, gap> # now move the results back to the matrix group G. gap> R := PreImage( phi, D ); <matrix group of size 960 with 3 generators> gap> for m in GeneratorsOfGroup( R ) do PrintArray( m ); od; [ [ -1, -1, -1, -1, 2 ], [ 0, -1, 0, 0, 0 ], [ 0, 0, 0, 1, 0 ], [ 0, 0, 1, 0, 0 ], [ -1, -1, 0, 0, 1 ] ] [ [ 0, 0, -1, 0, 0 ], [ 0, -1, 0, 0, 0 ], [ 1, 0, 0, 0, 0 ], [ -1, -1, -1, -1, 2 ], [ 0, -1, -1, 0, 1 ] ] [ [ -1, -1, -1, -1, 2 ], [ 0, 0, 0, -1, 0 ], [ 0, 0, -1, 0, 0 ], [ 0, 1, 0, 0, 0 ], [ 0, 0, -1, -1, 1 ] ]
returns an isomorphism, \varphi say, from the given i.m.f. integral matrix group G to a permutation group P acting on the n-th orbit, S say, of short vectors of G such that each matrix m \in G is mapped to the permutation induced by its action on S.

The only difference to the above function is that you can specify the orbit to be used. In fact, as the orbits of short vectors are sorted by increasing sizes, the function IsomorphismPermGroup( G ) has been implemented such that it is equivalent to IsomorphismPermGroupImfGroup( G, 1 ).

gap> ImfInvariants( 12, 9 ).sizesOrbitsShortVectors; [ 120, 300 ] gap> G := ImfMatrixGroup( 12, 9 ); ImfMatrixGroup(12,9) gap> phi1 := IsomorphismPermGroupImfGroup( G, 1 );; gap> P1 := Image( phi1 ); <permutation group of size 2400 with 2 generators> gap> LargestMovedPoint( P1 ); 120 gap> phi2 := IsomorphismPermGroupImfGroup( G, 2 );; gap> P2 := Image( phi2 ); <permutation group of size 2400 with 2 generators> gap> LargestMovedPoint( P2 ); 300