All Tutorials Tutorial

Normal Structure

Permutation groups, continued

Beyond checking whether a group is abelian or simple, Magma provides a rich set of tools for dissecting a group's normal structure — the chains of normal subgroups that reveal how a group is built out of simpler pieces. This tutorial covers subgroup series, normal subgroups, composition/chief series, the socle, the soluble radical, and complements.

Characteristic Series

A group can be broken down along several canonical descending chains. DerivedSeries(G) returns the derived series (each term is the commutator subgroup of the previous), LowerCentralSeries(G) returns the lower central series, and UpperCentralSeries(G) returns the upper central series, each as a sequence of subgroups. Related single-subgroup queries include DerivedSubgroup(G) (also CommutatorSubgroup(G)), Centre(G), and Hypercentre(G) (the stationary term of the upper central series). DerivedLength(G) counts the terms of the derived series, and NilpotencyClass(G) returns the nilpotency class, or -1 if G is not nilpotent.

> G := WreathProduct(Sym(4), DihedralGroup(4));
> [ FactoredOrder(H) : H in DerivedSeries(G) ];
[
    [ <2, 15>, <3, 4> ],
    [ <2, 12>, <3, 4> ],
    [ <2, 9>, <3, 4> ],
    [ <2, 8>, <3, 4> ],
    [ <2, 8> ],
    []
]
> DerivedLength(G);
5
> NilpotencyClass(G);
-1
> Centre(G);
Permutation group acting on a set of cardinality 16
Order = 1

The trivial centre and the -1 nilpotency class both confirm that this wreath product is far from nilpotent, even though FactoredOrder shows it is soluble (the derived series eventually reaches the trivial group).

Other useful series functions include pCentralSeries(G, p) (the lower p-central series for a soluble group), JenningsSeries(G) for p-groups, and SubnormalSeries(G, H), which returns the chain of subgroups from G down to a subnormal subgroup H. Related single subgroups are FittingSubgroup(G) (the product of the p-cores of the radical), FrattiniSubgroup(G), and pCore(G, p), the maximal normal p-subgroup of G.

Normal Subgroups and the Normal Lattice

NormalSubgroups(G) computes every normal subgroup of G, returned as a sequence of records each with a subgroup field. NormalLattice(G) goes further and returns the full lattice of normal subgroups with inclusions determined. MaximalNormalSubgroup(G) and MinimalNormalSubgroups(G) give the extreme ends of that lattice.

> G := WreathProduct(Sym(8), DihedralGroup(4));
> Order(G);
21143266346926080000
> N := NormalSubgroups(G);
> #N;
29
> [ Order(H`subgroup) : H in N ][1..4];
[ 1, 165181768335360000, 330363536670720000, 660727073341440000 ]

Composition and Chief Series

CompositionSeries(G) returns a descending chain of normal subgroups whose successive quotients are simple. CompositionFactors(G) instead summarizes the isomorphism types of those simple quotients as triples <f, d, q> identifying the family, dimension, and field size (or, for f = 17, an alternating group of degree d, and for f = 19, a cyclic group of order q). ChiefFactors(G) and ChiefSeries(G) provide the analogous chief-series data, with each factor described as <f, d, q, m> — a direct product of m copies of the simple group <f, d, q>.

> G := sub<Sym(48) | ... >;   // Rubik's cube group
> CompositionFactors(G);
     G
     |  Cyclic(2)
     *
     |  Alternating(12)
     *
     ...
     |  Alternating(8)
     *
     |  Cyclic(3)
     ...
     1

The Socle

The socle of a group is the product of its minimal normal subgroups. Socle(G) computes it directly; SocleFactors(G) lists its simple direct factors, and SocleSeries(G) returns the chain S_1, S_1 x S_2, ..., S_1 x ... x S_r built from them. SocleAction, SocleImage, SocleKernel, and SocleQuotient describe the action of G on the socle factors and the resulting quotient G/Socle(G).

> G := PrimitiveWreathProduct(Sym(5), Sym(3));
> S := Socle(G);
> S;
Permutation group S acting on a set of cardinality 125
Order = 216000 = 2^6 * 3^3 * 5^3
> Q := SocleFactors(G);
> #Q;
3

Here the socle splits into three isomorphic copies of a simple group of order 60 (i.e. Alt(5)), consistent with G being built as a wreath product with base group Sym(5)^3.

Soluble Radical

The soluble radical is the maximal normal soluble subgroup. Radical(G) (also SolubleRadical/SolvableRadical) computes it, while RadicalQuotient(G) returns a faithful permutation representation of G/R together with the quotient map and R itself. ElementaryAbelianSeries(G) refines the radical into a chain of normal subgroups with elementary abelian quotients, terminating at the trivial group.

> Radical(G);
Permutation group acting on a set of cardinality 16
Order = 256 = 2^8
> RadicalQuotient(G);
Permutation group acting on a set of cardinality 16
Order = 40320 = 2^7 * 3^2 * 5 * 7

Complements and Supplements

Given a normal subgroup M of G, Complements(G, M) returns one representative from each conjugacy class of complements — subgroups K with K meet M trivial and #K * #M eq #G. HasComplement(G, M) just tests existence and returns one if found. Supplements(G, M) finds minimal supplements instead (subgroups K with K*M eq G, without the trivial-intersection requirement), available whenever M is soluble.

> H := ncl< G | (6, 7, 8)(14, 16, 15) >;
> C := Complements(G, H);
> K := C[1];
> IsTrivial(K meet H);
true
> #K * #H eq #G;
true

This confirms K is a genuine complement of the normal subgroup H in G.

Quiz