Magma provides functions for computing with the characters of a group directly from a permutation representation, and for identifying what a permutation group actually is — whether it is alternating, symmetric, or some other recognisable abstract type.
Character Tables
CharacterTable(G) constructs the table of ordinary irreducible characters of G. Magma chooses between two algorithms: the Dixon-Schneider algorithm and Unger's induction/reduction algorithm. By default, Dixon-Schneider is used for groups of order at most 5000, and Unger's algorithm is used for larger groups. This choice can be forced with the Al parameter, passing "DS" or "IR".
> G := PermutationGroup<9 | (1,2,4)(5,6,8)(3,9,7), (4,5,6)(7,9,8)>;
> CT := CharacterTable(G);
Permutation Characters
The action of G on its natural set of points affords a character, obtained with PermutationCharacter(G). More generally, if H is a subgroup of G, then G acts on the cosets of H, and PermutationCharacter(G, H) returns the ordinary character afforded by that coset action.
> PermutationCharacter(G);
> H := Stabiliser(G, 1);
> PermutationCharacter(G, H);
Full details of character theory functions live in the Character Theory chapter; the two functions above are the ones most often reached for directly when working with a permutation group.
Modules from a Permutation Group
A handful of functions build an R[G]-module out of a permutation group, so that representation-theoretic and module-theoretic machinery can be applied to it. PermutationModule(G, R) creates the natural permutation module for G over the ring R, and PermutationModule(G, H, R) does the same for the action on the cosets of a subgroup H. GModule(G, A, B), given normal subgroups B ≤ A of G with elementary abelian section A/B of order p^n, builds the GF(p)[G]-module corresponding to the conjugation action of G on A/B, together with the map from A/B into the module.
> G := PermutationGroup<24 |
> [ 3, 4, 1, 2,23,24, 7, 8, 9,10,12,11,14,13,16,15,18,17,22,21,20,19, 5, 6 ],
> [ 7, 8,11,12,13,14,22,21,20,19,15,16,17,18, 6, 5, 4, 3, 1, 2,23,24, 9,10 ] >;
> N := sub<G |
> [ 24, 23, 6, 5, 4, 3, 10, 9, 8, 7, 14, 13, 12, 11, 18, 17, 16, 15, 22, 21, 20, 19, 2, 1 ],
> [ 23, 24, 5, 6, 3, 4, 8, 7, 10, 9, 12, 11, 14, 13, 15, 16, 17, 18, 19, 20, 21, 22, 1, 2 ],
> [ 2, 1, 4, 3, 6, 5, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 15, 16, 21, 22, 19, 20, 24, 23 ]>;
> IsNormal(G, N);
true
> IsElementaryAbelian(N);
true
> M, f := GModule(G, N);
> SM := Submodules(M);
> #SM;
4
Pulling each submodule back through f (using @@) recovers a chain of normal subgroups of G sitting inside N, refining the original elementary abelian normal subgroup of order 8 into a chain of length 3, with orders [1, 2, 4, 8].
Identifying Simple Groups
If G is known to be simple, NameSimple(G) determines its isomorphism type, returned as a triple <f, d, q> interpreted the same way as the output of CompositionFactors.
Recognising Alternating and Symmetric Groups
A permutation group G acting on a set X may coincide with the full alternating or symmetric group on X. IsAlternating(G) and IsSymmetric(G) test for this directly, while IsAltsym(G) tests only whether G contains Alt(X), which is cheaper. IsAltsym accepts a Limit parameter controlling how many random elements are inspected and a Proof parameter; setting Proof := false restricts the algorithm to its probabilistic part, so a true answer is always correct but a false answer might occasionally be wrong. IsEven(G) checks whether G lies inside the alternating group.
Beyond simple membership testing, RecogniseAlternatingOrSymmetric(G) performs constructive recognition: given a group isomorphic to some A_n or S_n (in a permutation or matrix representation), it returns true together with an isomorphism to the standard alternating or symmetric group, the inverse isomorphism, maps to and from a word group, and a flag saying whether the symmetric or alternating case was found. RecogniseSymmetric(G, n) and RecogniseAlternating(G, n) do the analogous job when the degree n is already known, and AlternatingOrSymmetricElementToWord(G, g) (or the degree-specific SymmetricElementToWord / AlternatingElementToWord) expresses a given element as a word in the recognised generators, which is useful for membership testing.
> A := AlternatingGroup(13);
> H := Stabiliser(A, {1,2});
> G := CosetImage(A, H);
> Degree(G);
78
> success, bb_to_perm, perm_to_bb, bb_to_wg, wg_to_bb, is_sym :=
> RecogniseAlternatingOrSymmetric(G);
> success;
true
> is_sym;
false
When the degree n is not known in advance but G is believed to be alternating or symmetric, GuessAltsymDegree(G) samples element orders to guess both the type and the degree, returning true, a type string ("Symmetric" or "Alternating"), and n. This guess can then be confirmed with RecogniseSymmetric or RecogniseAlternating. Because the function assumes its input is alternating or symmetric, feeding it an unrelated group — such as PSL(5,5) — still produces a confident-looking but meaningless guess, so a positive result from GuessAltsymDegree alone should not be treated as proof.