This database contains one representative of each conjugacy class of irreducible soluble subgroups of (GL)(n, p), p prime, They may be accessed through specifying a group by its label in the database, as described in the section on basic functions, or through searching using predicates, or through a process. The database was constructed by Mark Short [Sho92].
The basic access functions for the database are described in this section. The label of a group in the database is three integers, d, p, i. The first, d ≥2, is the degree of the matrix group. The second, a prime p, specifies the base field of the group. The third is the number of the group in this degree/field set.
Open the database and return a reference to it. This reference may be passed to other functions so that they do fewer file operations.
Given a positive integer o ≤1000 (with o != 512 or 768) and a positive integer n, return the n-th group of order o.
The number of groups in the database of degree n over GF(p).
This function returns a string which gives some information about a group in the database given its label. In particular, it contains the order and primitivity information about the group.
This function returns the order of a group given its label.
This function returns the minimal block size of a group given its label. If it is primitive, it returns 0.
This function returns whether a group is primitive given its label.
This function returns the "guardian" of a group given its label, i.e., the maximal subgroup of GL(n, p) of which the group is a subgroup.
> IsolNumberOfDegreeField(3, 5); 22 > G := IsolGroup(3, 5, 10); > #G; 62 > GG := IsolGuardian(3, 5, 10); > #GG; 372 > G; MatrixGroup(3, GF(5)) of order 62 = 2 * 31 Generators: [0 0 1] [3 0 4] [2 3 1] > GG; MatrixGroup(3, GF(5)) of order 372 = 2^2 * 3 * 31 Generators: [1 0 0] [3 2 2] [1 4 2] [0 1 0] [0 0 1] [3 0 4]
We may search the database for a group satisfying some predicate. A predicate for a group in this database is one of the following:
Given a predicate f, return a group satisfying it. This function runs through all the stored groups and applies the predicate until it finds a suitable one. If no group is found, an error message is printed.
As IsolGroupSatisfying(f), except it only runs through the groups of degree d.
As IsolGroupSatisfying(f), except it only runs through the groups of degree d and defined over GF(p).
As IsolGroupSatisfying(f), except a sequence of all such groups is returned.
As IsolGroupOfDegreeSatisfying(d, f), except a sequence of all such groups is returned.
As IsolGroupOfDegreeFieldSatisfying(d, p, f), except a sequence of all such groups is returned.
Associated with this database are two functions which can be used for constructing the semidirect product of a finite vector space and an irreducible matrix group. In particular, they are useful for constructing soluble affine permutation groups.
The function takes a matrix group G over a finite prime field and returns a sequence, Q say, containing all the vectors of the natural module for G. The ordering of Q does not depend on G, but only on its natural module.
Given an irreducible matrix group G of degree n defined over a finite prime field of cardinality p and the sequence Q obtained from Getvecs, this function returns the permutation group H of degree pn, that is, the semidirect product of G with its natural module. The group H acts on the set {1 ... pn} and G is isomorphic to each of the point stabilizers. It is well known that H is primitive, and that every primitive permutation group with soluble socle arises in this way. Note that if Semidir is to be called more than once for subgroups of the same general linear group, then Getvecs need only be called on the first occasion, since the ordering of Q depends only on n and p. This is why the call to Getvecs is not made by Semidir itself.
A small group process enables iteration over all groups with specified degrees and fields, without having to create and store all such groups together.
A process is created via the function IsolProcess and its variants. The standard process functions IsEmpty, Current, CurrentLabel and Advance can then be applied to the process.
A specifier for degree or field is one of a valid degree (field size), or a tuple < l, h >, of valid degrees (field sizes) which is interpreted to mean all degrees (prime field sizes) in [l, h].
Return a process which will iterate though all groups in the database.
Return a process which will iterate though all groups in the database of degree d.
Return a process which will iterate though all groups in the database over the specified field.
Return a process for iterating over all the stored groups with degree specifier d and field specifier p. Initially it points to the first such group (the principal key is the degree).
Returns true if the process p has passed its last group.
Return the current group of the process p.
Return the label of the current group of the process p. That is, return d, n and i such that the current group is IsolGroup(d, n, i).
Move the process p to its next group.
> P := IsolProcessOfDegree(3); > ords := {* *}; > repeat > Include(~ords, #Current(P)); > Advance(~P); > until IsEmpty(P); > ords; {* 31, 62, 93, 7, 124, 96^^4, 39, 12^^2, 186, 13, 192^^2, 48^^4, 21, 24^^6, 26 *}