All Tutorials Tutorial

Quotients & Group Actions

Permutation groups, continued

Beyond building subgroups, Magma lets you construct quotient groups and study the many different ways a permutation group can act. This tutorial covers quotient construction and the central notion of a G-set, which underlies orbits, stabilizers, and induced homomorphisms.

Constructing Quotient Groups

Given a permutation group G, the quo< G | L > constructor builds the quotient Q = G/N, where N is the normal closure of the subgroup generated by the elements or subgroups listed in L. It returns both the quotient group and the natural epimorphism f: G -> Q.

> Q, f := quo< Sym(4) | (1,2)(3,4), (1,3)(2,4) >;
> Q;
Permutation group Q acting on a set of cardinality 3
Order = 6 = 2 * 3

Here the Klein four-group is normally closed in Sym(4), and the quotient of order 6 is returned. If N is already known as a normal subgroup of G, the shorthand G / N does the same job. In both cases the quotient is currently built via the regular representation (then degree-reduced), so this is only practical when the index of N in G is small.

Magma also provides quotients targeting specific classes of groups: AbelianQuotient(G) returns the maximal abelian quotient G/G' as a GrpAb, NilpotentQuotient(G, c) returns the largest class-c nilpotent quotient, and SolubleQuotient(G) (also SolvableQuotient) returns the largest soluble quotient of G, each together with the natural epimorphism. These work by first forming a presentation of G and applying the corresponding fp-group algorithm.

> G := WreathProduct(Sym(6), DihedralGroup(6));
> SQ, phi := SolubleQuotient(G);
> SQ;
GrpPC : SQ of order 768 = 2^8 * 3

G-Sets

A G-set is a pair (Y, f) where Y is a set and f : Y x G -> Y is an action satisfying f(f(y,g),h) = f(y,gh) and f(y,1) = y. If G is defined acting on X, then X with its defining action is the natural G-set. Other G-sets arise as derived sets of X — subsets, sets of k-subsets, sequences, or partitions of X — or as fully general sets equipped with a user-supplied action map via GSet(G, Y, f).

The idea is powerful because it lets you reason about several different actions of the same group G without constantly rebuilding permutation representations by hand. GSet(G) returns the natural G-set, and Labelling(G) reveals the internal correspondence between X and {1,...,n}.

Orbits, Stabilizers, and Images

For an element x of a G-set, x^g gives its image under g, and x^G (or Orbit(G, x)) constructs its full orbit under G. Orbits(G) returns all orbits of G on a G-set as a sequence. Stabilizer(G, y) returns the subgroup of G fixing y, where y may be a point, a sequence, a set, or a partition.

The following example works with the Mathieu group M24:

> M24 := sub< Sym(24) |
>  (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,24),
>  (2,16,9,6,8)(3,12,13,18,4)(7,17,10,11,22)(14,19,21,20,15),
>  (1,22)(2,11)(3,15)(4,17)(5,9)(6,19)(7,13)(8,20)(10,16)(12,21)(14,18)(23,24)>;
> x := Random(M24);
> [1,2,3,4]^x;
[ 7, 9, 8, 17 ]
> S1 := Stabilizer(M24, 1);
> Order(S1);
10200960

The stabilizer of the point 1 in M24 is a copy of M23. Taking the stabilizer of a longer sequence, [1,2,3,4,5], cuts the order down further, and its orbits partition the remaining 19 points into a fixed set, an orbit of size 3, and an orbit of size 15 — the block structure underlying a Steiner system for M24. Related predicates include IsTransitive(G), IsPrimitive(G), IsRegular(G), and Transitivity(G), which reports the degree of transitivity of G.

Induced Homomorphisms and Actions

Given any G-set Y, Action(G, Y) constructs the homomorphism phi: G -> L describing how G acts on Y, returning the map, the induced permutation group L, and the kernel of the action. ActionImage(G, Y) and ActionKernel(G, Y) extract just the image or just the kernel, and IsFaithful(G, Y) tests whether the action is faithful (trivial kernel).

Two specialized, more efficient variants exist for common situations. OrbitAction(G, T) handles the case where T is a union of orbits (a G-invariant subset of the support), returning the homomorphism, image, and kernel exactly as Action does but using faster algorithms:

> f := OrbitAction(G, O[9]);
> Im := Image(f);
> Ker := Kernel(f);
> IsElementaryAbelian(Ker);
true

Similarly, BlocksAction(G, P) computes the action of a transitive group G on the blocks of a G-invariant partition P (found via MaximalPartition(G) or MinimalPartition(G)), again returning homomorphism, image, and kernel. Finally, CosetAction(G, H) builds the permutation representation of G on the right cosets of a subgroup H, and CosetImage(G, H) / CosetKernel(G, H) extract the image and kernel alone — this works for any type of group G, not just permutation groups, making it a general tool for turning an abstract group into a permutation group.

Summary

Quotients (quo, AbelianQuotient, SolubleQuotient) let you collapse a permutation group down to a smaller structure via a normal subgroup, while the G-set machinery (GSet, Orbit, Stabilizer, Action, OrbitAction, BlocksAction, CosetAction) lets you study, and compute homomorphic images from, the many actions a group can have — on its natural points, on derived sets, on orbits, on block systems, or on cosets of a subgroup.

Quiz