Database of Transitive Groups

Magma has a database containing all transitive permutation groups, up to conjugacy in the ambient symmetric group, having degree up to 48, and one containing all primitive permutation groups with degree less than 4096.

The transitive groups up to degree 15 were determined by Greg Butler and John McKay, the groups having degree in the range 16 to 30 were determined by Alexander Hulpke [Hul05]. John Cannon and Derek Holt [CH08] have determined the transitive groups of degree 32. Derek Holt and Gordon Royle have determined the transitive groups with degrees 33 to 47 [HR19], and Derek Holt has determined the transitive groups of degree 48.

Accessing the Databases

TransitiveGroupDatabaseLimit() -> RngIntElt

The limiting degree of the database of transitive groups.

NumberOfTransitiveGroups(d): RngIntElt -> RngIntElt

Given a degree \(d\) in the required range, return the number of transitive groups of degree \(d\).

TransitiveGroup(d, n): RngIntElt, RngIntElt -> GrpPerm, MonStgElt

Given a degree \(d\) in the required range and a positive integer \(n\), return the \(n\)-th transitive group of degree \(d\). Also returns a string giving a description of the group.

TransitiveGroupDescription(d, n): RngIntElt, RngIntElt -> MonStgElt

A string giving a description of the \(n\)-th transitive group of degree \(d\).

TransitiveGroupDescription(G): GrpPerm -> MonStgElt

A string giving a description of the transitive group \(G\).

TransitiveGroup(d): RngIntElt -> GrpPerm, MonStgElt

Given a degree \(d\) in the required range, return the first transitive group of degree \(d\). Also returns a string giving a description of the group.

TransitiveGroup(d, f): RngIntElt, Program -> GrpPerm, MonStgElt

Given a degree \(d\) in the required range and a predicate \(f\) (as a function or intrinsic), return the first transitive group of degree \(d\) which satisfies \(f\). Also returns a string giving a description of the group.

TransitiveGroup(S, f): [RngIntElt], Program -> GrpPerm, MonStgElt

Given a sequence \(S\) of degrees and a predicate \(f\) (as a function or intrinsic), return the first transitive group with degree in \(S\) which satisfies \(f\). Also returns a string giving a description of the group.

TransitiveGroups(d: parameters): RngIntElt -> [GrpPerm]
Warning: BoolElt                    Default: true

Return a sequence of all transitive groups of degree \(d\) up to conjugacy in the symmetric group \(S_d\). Some degrees will produce a very large sequence of groups – in such cases a warning will be printed unless the user specifies Warning := false.

TransitiveGroups(S: parameters): [RngIntElt] -> [GrpPerm]
Warning: BoolElt                    Default: true

Given a sequence \(S\) of degrees, return a sequence of all transitive groups with degree in \(S\). The resulting sequence may be very long – in such cases a warning will be printed unless the user specifies Warning := false.

TransitiveGroups(d, f): RngIntElt, Program -> [GrpPerm]

Given an integer \(d\) and a predicate (function or intrinsic) \(f\), return a sequence containing all transitive groups \(G\) of degree \(d\) satisfying f(G) eq true.

TransitiveGroups(S, f): [RngIntElt], Program -> [GrpPerm]

Given a sequence \(S\) of degrees and a predicate (function or intrinsic) \(f\), return a sequence containing all transitive groups \(G\) with degree in \(S\) satisfying f(G) eq true.

Example: Transitive Groups of Degree 8 (ex-95bf5a)

Run in calculator (opens in a new tab)

We apply some of these functions to the degree \(8\) case.

> NumberOfTransitiveGroups(8);
50
> TransitiveGroup(8, 3);
Permutation group acting on a set of cardinality 8
    (1, 2)(3, 4)(5, 6)(7, 8)
    (1, 4)(2, 3)(5, 8)(6, 7)
    (1, 8)(2, 7)(3, 6)(4, 5)
E(8) = 2[x]2[x]2
> S := TransitiveGroups(8, IsPrimitive);
> #S;
7
> S;
[
    Permutation group acting on a set of cardinality 8
        (1, 8)(2, 3)(4, 5)(6, 7)
        (1, 3)(2, 8)(4, 6)(5, 7)
        (1, 5)(2, 6)(3, 7)(4, 8)
        (1, 2, 6, 3, 4, 5, 7),
    Permutation group acting on a set of cardinality 8
        (1, 8)(2, 3)(4, 5)(6, 7)
        (1, 3)(2, 8)(4, 6)(5, 7)
        (1, 5)(2, 6)(3, 7)(4, 8)
        (1, 2, 6, 3, 4, 5, 7)
        (1, 2, 3)(4, 6, 5),
    Permutation group acting on a set of cardinality 8
        (1, 2, 3, 4, 5, 6, 8)
        (1, 2, 4)(3, 6, 5)
        (1, 6)(2, 3)(4, 5)(7, 8),
    Permutation group acting on a set of cardinality 8
        (1, 2, 3, 4, 5, 6, 8)
        (1, 3, 2, 6, 4, 5)
        (1, 6)(2, 3)(4, 5)(7, 8),
    Permutation group acting on a set of cardinality 8
        (1, 8)(2, 3)(4, 5)(6, 7)
        (1, 3)(2, 8)(4, 6)(5, 7)
        (1, 5)(2, 6)(3, 7)(4, 8)
        (1, 2, 6, 3, 4, 5, 7)
        (1, 2, 3)(4, 6, 5)
        (1, 2)(5, 6),
    Permutation group acting on a set of cardinality 8
        (1, 2)(3, 4, 5, 6, 7, 8)
        (1, 2, 3),
    Permutation group acting on a set of cardinality 8
        (1, 2, 3, 4, 5, 6, 7, 8)
        (1, 2)
]

Run in calculator (opens in a new tab)

Example: Isomorphic Non-Conjugate Transitive Groups (ex-974219)

An example of isomorphic, non-conjugate transitive groups.

> G := TransitiveGroup(22, 26);
> H := TransitiveGroup(22, 27);
> b, _ := IsIsomorphic(G, H); b;
true
> S := SymmetricGroup(22);
> IsConjugate(S, G, H);
false

Run in calculator (opens in a new tab)

Processes

A transitive group process enables iteration over all transitive groups of specified degrees satisfying a given predicate, without having to create and store all such groups together. The intrinsic function TransitiveGroupProcess may be used to create a transitive group process in Magma. The standard process functions IsEmpty, Current, CurrentLabel, and Advance can then be applied to the process.

TransitiveGroupProcess(d): RngIntElt -> Process

Return a group process which will iterate though all transitive groups of degree \(d\).

TransitiveGroupProcess(S): [RngIntElt] -> Process

Return a process which will iterate though all transitive groups with degree in the sequence \(S\).

TransitiveGroupProcess(d, f): RngIntElt, Program -> Process

Return a process which will iterate though all transitive groups with degree \(d\) which satisfy the predicate \(f\).

TransitiveGroupProcess(S, f): [RngIntElt], Program -> Process

Return a process which will iterate though all transitive groups with degree in the sequence \(S\) which satisfy the predicate \(f\).

IsEmpty(p): Process -> BoolElt

Returns true if the process \(p\) has passed its last group.

Current(p): Process -> GrpPerm, MonStgElt

Return the current group of the process \(p\), as well as a description of the group.

CurrentLabel(p): Process -> RngIntElt, RngIntElt

Return the label of the current group of the process \(p\). That is, return \(d\) and \(n\) such that the current group is TransitiveGroup(d, n).

Advance(~p): Process

Move the process \(p\) to its next group.

Example: Processing Transitive Groups of Degree 5 (ex-851721)

The use of processes is illustrated by the following code, in which the orders of all transitive groups of degree \(5\) are listed.

> p := TransitiveGroupProcess(5);
> while not IsEmpty(p) do
>     CurrentLabel(p), #Current(p);
>     Advance(~p);
> end while;
5 1 5
5 2 10
5 3 20
5 4 60
5 5 120

Run in calculator (opens in a new tab)

Transitive Group Identification

Given a transitive group \(G\) whose degree is at most 30, it is possible to obtain the number of the group in the transitive groups database which is isomorphic to \(G\).

TransitiveGroupIdentification(G): GrpPerm -> RngIntElt, RngIntElt
Raw: BoolElt                    Default: true

The number (and degree) of the group in the transitive groups database which is isomorphic to the transitive group \(G\).

If the optional parameter Raw is set to \(\texttt{false}\), a third value is returned. In this case, the third value is a permutation conjugating the given group to the copy in the library.

Example: Identifying a Transitive Group (ex-026a1e)

We get a transitive permutation group from the small groups database and identify it as a transitive group.

> G := SmallGroup(336, IsTransitive: Search:="Insoluble");
> G;
Permutation group G acting on a set of cardinality 16
  (1, 14, 6, 2, 12, 8, 13, 7)(3, 15, 10, 5, 16, 9, 4, 11)
  (2, 5, 6)(3, 10, 9)(4, 15, 16)(7, 11, 13)
> TransitiveGroupIdentification(G : Raw := false);
715 16 (1, 16, 3, 4, 2, 11, 5, 6, 9, 8, 13, 10)(7, 12, 15)
> n, d, p := $1;
> G^p eq TransitiveGroup(d, n);
true

We found it to be group 715 of degree 16.

Run in calculator (opens in a new tab)