Subgroups

Subgroups of pc-groups are treated as independent pc-groups in their own right, with the subgroup relationship maintained in internal data structures. Thus, a subgroup has generators and a pc-presentation and one can apply any of the functions described earlier for groups. Furthermore, there are a variety of functions and operations specifically involving subgroups.

Contents

Definition of Subgroups by Generators

The most flexible method of defining a subgroup is to list generators or normal generators for the subgroup.

sub<G | L> : GrpPC, List -> GrpPC, Map
Construct the subgroup H of the pc-group G generated by the elements specified by the terms of the generator list L.

A term L[i] of the generator list may consist of any of the following objects:

(a)
An element liftable to G (in particular, any element of G);
(b)
A subgroup of G;
(c)
A set or sequence of (a), or (b).

The collection of words and groups specified by the list must all belong to the group G and H will be constructed as a subgroup of G.

The subgroup H is defined to be generated by the words specified directly by terms L[i] together with the stored generating words for any groups specified by terms of L[i]. Magma will compute a set of pc-generators for H and, if H is a p-group, a minimal generating set.

The inclusion map from H to G is returned as well.

ncl<G | L> : GrpPC, List -> GrpPC, Map
Construct the subgroup N of the pc-group G as the normal closure of the subgroup generated by the elements specified by the terms of the generator list L.

The possible forms of a term L[i] of the generator list are the same as for the sub-constructor.

The inclusion map from N to G is returned as well.

Example GrpPC_sub_creation (H69E13)

We define G to be Z5 wr Z3 and then create two subgroups. Notice that the ncl-constructor builds a larger subgroup in this case.
> G<a,b,c,d> := PolycyclicGroup<a,b,c,d| a^3, b^5, c^5, d^5,
>   b^a = c, c^a = d, d^a = b>;
> H := sub<G| b,c>;
> Order(H);
25
> IsAbelian(H);
true
> IsNormal(G, H);
false
> N := ncl<G| b,c>;
> IsNormal(G, N);
true
> Order(N);
125

Membership and Coercion

There are several functions and operators which allow one to take advantage of the subgroup relationship to rewrite elements from one presentation to another. That is, if x is an element of H which is a subgroup of G, then x has a representation as a normal word in the pc-generators of H, but also has a representation as a (different) normal word in the pc-generators of G. The coercion operator and inclusion map allow one to compute one of these words based on the other, thus shifting where we view the element in question.

Magma keeps track of the various relationships between subgroups in a group. Thus, if H is a subgroup of K which is a subgroup of G, then H can also be considered a subgroup G. Similarly, in situations involving elements of two groups, A and B, Magma will often try to find a covering group C which contains both of A and B. In this case, the elements may be automatically coerced into the covering group.

g in G : GrpPCElt, GrpPC -> BoolElt
Given an element g and a group G, return true if g is an element of G, false otherwise. In order for this comparison to make sense, both g and G must be contained in some covering group.
g notin G : GrpPCElt, GrpPC -> BoolElt
Given an element g and a group G, return true if g is not an element of G, false otherwise. In order for this comparison to make sense, both g and G must be contained in some covering group.
G ! g : GrpPC, GrpPCElt -> GrpPCElt
Given an element g belonging to some subgroup H of the group G, rewrite g as an element of G.
H ! g : GrpPC, GrpPCElt -> GrpPCElt
Given an element g belonging to the group G, and given a subgroup H of G containing g, rewrite g as an element of H.
K ! g : GrpPC, GrpPCElt -> GrpPCElt
Given an element g belonging to the group H, and a group K, such that H and K are subgroups of a covering group G, and both H and K contain g, rewrite g as an element of K.

Example GrpPC_coercion (H69E14)

We create two subgroups of a dihedral group.
> G := DihedralGroup(GrpPC, 10);
> C := sub<G| G.2>;
> H := sub<G| G.1, G.3>;
> H.1 in C;
false
> H.2 in C;
true
> Parent(H.1);
GrpPC : H of order 10 = 2 * 5
PC-Relations:
    H.1^2 = Id(H),
    H.2^5 = Id(H),
    H.2^H.1 = H.2^4
> G!(H.1);
G.1
Magma will compute appropriate covering groups as needed.
> H.1*C.1;
G.1 * G.2 * G.3^2
> x := (H.1, C.2);
> x;
G.3^2
> H!x;
H.2^2
> C!x;
C.2^2
> C!(H.2);
C.2

Inclusion and Equality

S subset G : { GrpPCElt } , GrpPC -> BoolElt
Given a group G and a set S of elements belonging to a group H, where G and H have some covering group, return true if S is a subset of G, false otherwise.
S notsubset G : { GrpPCElt } , GrpPC -> BoolElt
Given a group G and a set S of elements belonging to a group H, where G and H have some covering group, return true if S is not a subset of G, false otherwise.
H subset G : GrpPC, GrpPC -> BoolElt
Given groups G and H, subgroups of some covering group, return true if H is a subgroup of G, false otherwise.
H notsubset G : GrpPC, GrpPC -> BoolElt
Given groups G and H, subgroups of some covering group, return true if H is not a subgroup of G, false otherwise.
G eq H : GrpPC, GrpPC -> BoolElt
Given groups G and H, subgroups of some covering group, return true if G and H are the same group, false otherwise.
G ne H : GrpPC, GrpPC -> BoolElt
Given groups G and H, subgroups of some covering group, return true if G and H are distinct groups, false otherwise.
InclusionMap(G, H) : GrpPC, GrpPC -> Map
The map from the subgroup H of G to G.

Standard Subgroup Constructions

The operators and functions which construct a subgroup of a pc-group always return the subgroup as a pc-group.

H ^ g : GrpPC, GrpPCElt -> GrpPC
Conjugate(H, g) : GrpPC, GrpPCElt -> GrpPC
Construct the conjugate g - 1 * H * g of the group H under the action of the element g. The group H and the element g must belong to a common group.
H meet K : GrpPC, GrpPC -> GrpPC
The intersection of groups H and K. The algorithm used for non-p-groups is described in [GS90].
H meet:= K : GrpPC, GrpPC -> GrpPC
Replace H with the intersection of groups H and K.
CommutatorSubgroup(G, H, K) : GrpPC, GrpPC, GrpPC -> GrpPC
CommutatorSubgroup(H, K) : GrpPC, GrpPC -> GrpPC
Construct the commutator subgroup of groups H and K, where H and K are subgroups of a common group G.
Centralizer(G, g) : GrpPC, GrpPCElt -> GrpPC
Centraliser(G, g) : GrpPC, GrpPCElt -> GrpPC
The centralizer of the element g in the group G.
Centralizer(G, H) : GrpPC, GrpPC -> GrpPC
Centraliser(G, H) : GrpPC, GrpPC -> GrpPC
The centralizer of the subgroup H in the group G.
Core(G, H) : GrpPC, GrpPC -> GrpPC
The maximal normal subgroup of G that is contained in the subgroup H of G.
H ^ G : GrpPC, GrpPC -> GrpPC
NormalClosure(G, H) : GrpPC, GrpPC -> GrpPC
The normal closure of the subgroup H in the group G.
Normalizer(G, H) : GrpPC, GrpPC -> GrpPC
Normaliser(G, H) : GrpPC, GrpPC -> GrpPC
The normalizer of the subgroup H of the group G. The algorithm used for non-p-groups is described in [GS90].

Example GrpPC_subgroup-constructions (H69E15)

We'll consider various subgroups of a direct product of a cyclic group of order 6 and dihedral group of order 10.
> G := DirectProduct(CyclicGroup(GrpPC,6), DihedralGroup(GrpPC,5));
> x := G.3;
> C := Centralizer(G,x);
> C;
GrpPC : C of order 12 = 2^2 * 3
PC-Relations:
    C.1^2 = Id(C),
    C.2^2 = Id(C),
    C.3^3 = Id(C)
> H := sub<G|G.2,G.4>;
> Order(H);
15
We can compute the intersection using the meet operator.
> K := H meet C;
> K;
GrpPC : K of order 3
PC-Relations:
    K.1^3 = Id(K)
To get the join of two subgroups, we simply use the sub-constructor.
> J := sub<G|H, C>;
> J eq G;
true

Properties of Subgroups

Index(G, H) : GrpPC, GrpPC -> RngIntElt
The index of the subgroup H in the group G, returned as an ordinary integer.
FactoredIndex(G, H) : GrpPC, GrpPC -> [<RngIntElt, RngIntElt>]
The factored index of the subgroup H in the group G.

Predicates for Subgroups

IsCentral(G, H) : GrpPC, GrpPC -> BoolElt
Returns true if the subgroup H of the group G lies in the centre of G, false otherwise.
IsConjugate(G, H, K) : GrpPC, GrpPC, GrpPC -> BoolElt, GrpPCElt
Given a group G and subgroups H and K belonging to G, return the value true if H and K are conjugate in G. The function returns a second value in the event that the subgroups are conjugate: an element z which conjugates H into K.
IsMaximal(G, H) : GrpPC, GrpPC -> BoolElt
Returns true if the subgroup H of the group G is a maximal subgroup of G, false otherwise.
IsNormal(G, H) : GrpPC, GrpPC -> BoolElt
Returns true if the subgroup H of the group G is a normal subgroup of G, false otherwise.
IsSelfNormalizing(G, H) : GrpPC, GrpPC -> BoolElt
Returns true if the subgroup H of the group G is self-normalizing in G, false otherwise.
IsSubnormal(G, H) : GrpPC, GrpPC -> BoolElt
Returns true if the subgroup H of the group G is subnormal in G, false otherwise.

Example GrpPC_sub-predicates (H69E16)

> G := PCGroup(Sym(4));
> G;
GrpPC : G of order 24 = 2^3 * 3
PC-Relations:
    G.1^2 = Id(G),
    G.2^3 = Id(G),
    G.3^2 = Id(G),
    G.4^2 = Id(G),
    G.2^G.1 = G.2^2,
    G.3^G.1 = G.3 * G.4,
    G.3^G.2 = G.4,
    G.4^G.2 = G.3 * G.4
> U := sub<G|G.4>;
> IsNormal(G,U);
false
> IsSubnormal(G,U);
true
Now, we try to construct a subnormal chain by taking normalizers.
> N1 := Normalizer(G,U);
> Index(G,N1);
3
> N2 := Normalizer(G,N1);
> Index(G,N2);
3
> N1 eq N2;
true
We're stuck. However, we can work our way down with NormalClosure.
> M1 := NormalClosure(G,U);
> U subset M1;
true
> M1 subset U;
false
> M2 := NormalClosure(M1,U);
> M2 eq U;
true
Now, we work inside the Sylow 2-subgroup and look for complements of the cyclic group of order 4 by brute force.
> S := Sylow(G,2);
> S;
GrpPC : S of order 8 = 2^3
PC-Relations:
    S.2^S.1 = S.2 * S.3
> T := sub<S|S.1*S.2>;
> list := [];
> for x in S do
>   if (Order(x) ne 2) or (x in T) then
>     continue;
>   end if;
>   Append(~list, sub<S|x>);
> end for;
> #list;
4
> for i in [1..3], j in [i+1..4] do
>   print i,j,IsConjugate(S,list[i],list[j]);
> end for;
1 2 true S.1
1 3 false
1 4 false
2 3 false
2 4 false
3 4 true S.2
We see that T has two conjugacy classes of complements.

Hall π-Subgroups and Sylow Systems

The functions given here all assume that G is a soluble group having order p1e1p2e2 ... pkek.

ComplementBasis(G) : GrpPC -> [GrpPC]
A complement basis of the soluble group G. This is a sequence of k subgroups of G, where the i-th subgroup has order p1e1 ... pi - 1^ (ei - 1) pi + 1ei + 1 ... pkek, i.e. the complements of the k Sylow subgroups of G.
HallSubgroup(G, S) : GrpPC, { RngIntElt } -> GrpPC
HallSubgroup(G, S) : GrpPC, RngIntElt -> GrpPC
The Hall π-subgroup of G, where π is defined by S. The argument S may be a set of primes, a single prime, or the negation of a single prime. If S = - p, then the Hall p'-subgroup of G is returned.
pCore(G, S) : GrpPC, { RngIntElt } -> GrpPC
pCore(G, S) : GrpPC, RngIntElt -> GrpPC
The core of the Hall π-subgroup, where π is defined by the argument S, which has the same interpretation as for HallSubgroup.
SylowBasis(G) : GrpPC -> [GrpPC]
A Sylow basis for the soluble group G. This is a sequence of k subgroups of G, having orders p1e1, ..., pkek, i.e. the k Sylow subgroups of G.
SylowSubgroup(G, p) : GrpPC, RngIntElt -> GrpPC
Sylow(G, p) : GrpPC, RngIntElt -> GrpPC
A Sylow p-subgroup for the group G.
SystemNormalizer(G) : GrpPC -> GrpPC
SystemNormaliser(G) : GrpPC -> GrpPC
The system normalizer for the group G. The system normalizer of the complement basis Σ = { H1, ..., Hk } is defined to be the intersection of the normalizers in G of each Hi, ie. N(Σ) = ∩i=1k NG(Hi). The algorithm used is derived directly from the definition.

Example GrpPC_Hall (H69E17)

Given the group D3 wreath D5, we can construct the Hall 2-subgroup as follows:
> H := DihedralGroup(GrpPerm, 5);
> G := WreathProduct(DihedralGroup(GrpPC, 3), DihedralGroup(GrpPC, 5),
>         [H.2, H.1]);
> H2 := HallSubgroup(G, 2);
> Order(H2);
64
The Hall 2'-subgroup of the same group is constructed as follows:
> H35 := HallSubgroup(G, -2);
> Order(H35);
1215

Conjugacy Classes of Subgroups

Magma has functions for computing the subgroups of a group that return the subgroups either as a list of conjugacy class representatives as or as a poset. Details of these functions may be found in Chapter GROUPS. Here we mention the basic functions for convenience.

SubgroupClasses(G) : GrpPC -> SeqEnum
Subgroups(G) : GrpPC -> SeqEnum
Conjugacy class representatives for all subgroups of G. The algorithm was developed by M. Slattery and is essentially that of [Hul99] without the action of automorphisms.
AbelianSubgroups(G) : GrpPC -> SeqEnum
CyclicSubgroups(G) : GrpPC -> SeqEnum
ElementaryAbelianSubgroups(G) : GrpPC -> SeqEnum
NilpotentSubgroups(G) : GrpPC -> SeqEnum
Conjugacy class representatives for all subgroups of the indicated type in G. The algorithm used is essentially that of [Hul99] without the action of automorphisms. Appropriate filters are applied to select the desired groups at each successive quotient in the computation.
LowIndexSubgroups(G, n) : GrpPC, RngIntElt -> []
Conjugacy class representatives for all subgroups of G having index ≤n in G.
MaximalSubgroups(G) : GrpPC -> [GrpPC]
A sequence of conjugacy class representatives for the maximal subgroups of G. The algorithm, developed by Charles Leedham-Green, relies on computing a special presentation for G.
SubgroupLattice(G) : GrpPC -> SubGrpLat
The lattice of conjugacy classes of subgroups of G.
BurnsideMatrix(G) : GrpPC -> AlgMatElt
The Burnside matrix corresponding to the lattice of subgroups of G. The (i, j)th entry of the matrix is the number of subgroups in class i contained in a single subgroup of class j when i≤j, and is the number of subgroups of class i containing a given subgroup in class j when i≥j.
TableOfMarks(G) : GrpPC -> AlgMatElt
Burnside's table of marks corresponding to the lattice of subgroups of G. Rows correspond to marks for transitive permutation representations of G, while the entries in column j are the number of fixed points of subgroup class j in each transitive representation.
DisplayBurnsideMatrix(G) : GrpPC ->
Pretty-print the Burnside matrix corresponding to the lattice of subgroups of G.

Example GrpPC_SubgroupClasses (H69E18)

To show a bit about subgroup classes, we look at the direct product of C3 and D3. First we list out the normal subgroups of G.
> G := DirectProduct(CyclicGroup(GrpPC,3),
>                      DihedralGroup(GrpPC,3));
> ns := NormalSubgroups(G);
> ns;
Conjugacy classes of subgroups
------------------------------
[1]     Order 1            Length 1
        GrpPC of order 1
        PC-Relations:
[2]     Order 3            Length 1
        GrpPC of order 3
        PC-Relations:
            $.1^3 = Id($)
[3]     Order 3            Length 1
        GrpPC of order 3
        PC-Relations:
            $.1^3 = Id($)
[4]     Order 6            Length 1
        GrpPC of order 6 = 2 * 3
        PC-Relations:
            $.1^2 = Id($),
            $.2^3 = Id($),
            $.2^$.1 = $.2^2
[5]     Order 9            Length 1
        GrpPC of order 9 = 3^2
        PC-Relations:
            $.1^3 = Id($),
            $.2^3 = Id($)
[6]     Order 18           Length 1
        GrpPC of order 18 = 2 * 3^2
        PC-Relations:
            $.1^2 = Id($),
            $.2^3 = Id($),
            $.3^3 = Id($),
            $.3^$.1 = $.3^2
The normal subgroups sequence has a special printing routine. Each entry in the sequence is actually a record.
> ns[2];
rec<recformat<order, length, subgroup, presentation> |
 order := 3, length := 1, subgroup := GrpPC of order 3
PC-Relations:
    $.1^3 = Id($)>
We extract the two normal subgroups of order 3. Each of them turn out to have one conjugacy class of complements in G. However, one of the complements is normal and the other is not.
> N1 := ns[2]`subgroup;
> N2 := ns[3]`subgroup;
> c1 := Complements(G,N1);
> c1;
[
    GrpPC of order 6 = 2 * 3
    PC-Relations:
        $.1^2 = Id($),
        $.2^3 = Id($),
        $.2^$.1 = $.2^2
]
> c2 := Complements(G,N2);
> c2;
[
    GrpPC of order 6 = 2 * 3
    PC-Relations:
        $.1^2 = Id($),
        $.2^3 = Id($)
]
> Index(G,Normalizer(G,c1[1]));
1
> Index(G,Normalizer(G,c2[1]));
3
We can look at the full list of classes of subgroups of G to see that there are three classes of non-normal subgroups as well as the normal subgroups. There are two non-normal subgroups of order 3 in addition to N1 and N2.
> Subgroups(G);
Conjugacy classes of subgroups
------------------------------
[ 1]    Order 1            Length 1
        GrpPC of order 1
        PC-Relations:
[ 2]    Order 2            Length 3
        GrpPC of order 2
        PC-Relations:
            $.1^2 = Id($)
[ 3]    Order 3            Length 1
        GrpPC of order 3
        PC-Relations:
            $.1^3 = Id($)
[ 4]    Order 3            Length 1
        GrpPC of order 3
        PC-Relations:
            $.1^3 = Id($)
[ 5]    Order 3            Length 2
        GrpPC of order 3
        PC-Relations:
            $.1^3 = Id($)
[ 6]    Order 6            Length 1
        GrpPC of order 6 = 2 * 3
        PC-Relations:
            $.1^2 = Id($),
            $.2^3 = Id($),
            $.2^$.1 = $.2^2
[ 7]    Order 6            Length 3
        GrpPC of order 6 = 2 * 3
        PC-Relations:
            $.1^2 = Id($),
            $.2^3 = Id($)
[ 8]    Order 9            Length 1
        GrpPC of order 9 = 3^2
        PC-Relations:
            $.1^3 = Id($),
            $.2^3 = Id($)
[ 9]    Order 18           Length 1
        GrpPC of order 18 = 2 * 3^2
        PC-Relations:
            $.1^2 = Id($),
            $.2^3 = Id($),
            $.3^3 = Id($),
            $.3^$.1 = $.3^2
V2.28, 13 July 2023