Finitely Generated Subgroups of Free Groups

A number of functions are available that apply specifically to finitely generated subgroups of free groups. For example, it is possible to determine the index of one such subgroup in another, which may be infinite, and computation of intersections and normalisers of subgroups, and conjugacy testing are all possible. The relevant algorithms are described in [Sim94, Chapter 4], for example.

Supergroup(F) : GrpFP -> GrpFP
The largest (with respect to containment) free group of which F is known to be a subgroup. The remaining functions will fail and exit with errors if their arguments do not have a common supergroup.
x in H: GrpFP, GrpFPElt -> BoolElt
Returns true in x ∈H, where x is required to be an element of FSSupergroup(F).
IsSubgroup(H, K) : GrpFP, GrpFP -> BoolElt
Determines whether H is a subgroup of free group K.
H eq K : GrpFP, GrpFP -> BoolElt
Determines whether free groups H and K are equal.
Index(F, H) : GrpFP, GrpFP -> RngIntElt
The index in the free group F of subgroup H, which may be ∞. An error will occur if H is not a subgroup of F.
HasFiniteIndex(F, H) : GrpFP, GrpFP -> BoolElt
Returns true if the index in the free group F of subgroup H is finite. An error will occur if H is not a subgroup of F.
FreeGenerators(H) : GrpFP -> SeqEnum, GrpFP
Returns a sequence of free generators of free group H and also the same group H defined on those generators.
H meet K : GrpFP, GrpFP -> GrpFP
Computes the intersection of free groups H and K.
Centraliser(F,x) : GrpFP, GrpFPElt -> GrpFP
Centralizer(F,x) : GrpFP, GrpFPElt -> GrpFP
Computes the centralizer in free group F of element x. An error will occur if x is not in F.
IsConjugate(F, x, y) : GrpFP, GrpFPElt, GrpFPElt -> BoolElt, GrpFPElt
Determines whether elements x and y of free group F are conjugate in F and if so returns a conjugating element. An error will occur if either x or y is not in F.
Centraliser(F, H) : GrpFP, GrpFP -> GrpFP
Centralizer(F, H) : GrpFP, GrpFP -> GrpFP
Computes the centralizer in free group F of subgroup H. An error will occur if H is not a subgroup of F.
Normaliser(F, H) : GrpFP, GrpFP -> GrpFP
Normalizer(F, H) : GrpFP, GrpFP -> GrpFP
Computes the normalizer in free group F of subgroup H. An error will occur if H is not a subgroup of F.
IsConjugate(F, H, K) : GrpFP, GrpFP, GrpFP -> BoolElt, GrpFPElt
Determines whether subgroups H and K of free group F are conjugate in F and if so returns a conjugating element. An error will occur if either H or K is not a subgroup of F.

Example GrpFree_free-subgroups (H76E5)

Starting with the free group of rank 3 some subgroup calculations will be demonstrated.

> F<a,b,c> := FreeGroup(3);
> F;
Finitely presented group F on 3 generators (free)
> H<x, y> := sub< F | a, b>;
> H;
Finitely presented group H on 2 generators
Generators as words in group F
    x = a
    y = b
> Index(F, H);
0

The next step is to produce a more interesting subgroup of F. To get one, the subgroup H will be conjugated by an element of F.

> K := H^(a*b*c);
> K;
Finitely presented group K on 2 generators
Generators as words in group F
    K.1 = c^-1 * b^-1 * a * b * c
    K.2 = c^-1 * b^-1 * a^-1 * b * a * b * c
> H eq K;
false
> H meet K;
Finitely presented group on 1 generator
Generators as words in group F
    $.1 = Id(F)
> N := Normalizer(F, K);
> N;
Finitely presented group N on 2 generators
Generators as words in group F
    N.1 = a^c
    N.2 = b^c
> K eq N;
true
The normaliser N of K has nice generators but it is equal to K so K is self-normalising.
V2.28, 13 July 2023