# 23.3 Group Functions for Finitely Presented Groups

Finitely presented groups are after all groups, thus in principle all group functions are applicable to them (see chapter Groups). However because words that are not equal may denote the same element of a finitely presented group many of them will not work correctly. This sections describes which group functions are implemented specially for finitely presented groups and how they work. You should not use the group functions that are not mentioned in this section.

The general information that enables GAP to work with a finitely presented group G is a coset table (see CosetTableFpGroup). Basically a coset table is the permutation representation of the finitely presented group on the cosets of a subgroup (which need not be faithful if the subgroup has a nontrivial core). Most of the functions below use the regular representation of G, i.e., the coset table of G over the trivial subgroup. Such a coset table is computed by a method called coset enumeration.

`Order( G, g )`

The order of an element g is computed by translating the element into the regular permutation representation and computing the order of this permutation (which is the length of the cycle of 1).

`Index( G, H )`

The index of a subgroup H in a finitely presented group G is simply the degree of the permutation representation of the group G on the cosets of H.

`Normalizer( G, H )`

The normalizer of a subgroup H of a finitely presented group G is the union of those cosets of H in G that are fixed by all the generators of H when viewed as permutations in the permutation representation of G on the cosets of H. The normalizer is returned as the subgroup generated by the generators of H and representatives of such cosets.

`CommutatorFactorGroup( G )`

The commutator factor group of a finitely presented group G is returned as a new finitely presented group. The relations of this group are the relations of G plus the commutator of all the pairs of generators of G.

`AbelianInvariants( G )`

The abelian invariants of a abelian finitely presented group (e.g., a commutator factor group of an arbitrary finitely presented group) are computed by building the relation matrix of G and transforming this matrix to diagonal form with `ElementaryDivisorsMat` (see ElementaryDivisorsMat).

`AbelianInvariantsSubgroupFpGroup( G, H )` `AbelianInvariantsSubgroupFpGroup( G, cosettable )`

This function is equivalent to `AbelianInvariantsSubgroupFpGroupRrs` below, but note that there is an alternative function, `AbelianInvariantsSubgroupFpGroupMtc`.

`AbelianInvariantsSubgroupFpGroupRrs( G, H )` `AbelianInvariantsSubgroupFpGroupRrs( G, cosettable )`

`AbelianInvariantsSubgroupFpGroupRrs` returns the invariants of the commutator factor group H/H' of a subgroup H of a finitely presented group G. They are computed by first applying an abelianized Reduced Reidemeister-Schreier procedure (see Subgroup Presentations) to construct a relation matrix of H/H' and then transforming this matrix to diagonal form with `ElementaryDivisorsMat` (see ElementaryDivisorsMat).

As second argument, you may provide either the subgroup H itself or its coset table in G.

`AbelianInvariantsSubgroupFpGroupMtc( G, H )`

`AbelianInvariantsSubgroupFpGroupMtc` returns the invariants of the commutator factor group H/H' of a subgroup H of a finitely presented group G. They are computed by applying an abelianized Modified Todd-Coxeter procedure (see Subgroup Presentations) to construct a relation matrix of H/H' and then transforming this matrix to diagonal form with `ElementaryDivisorsMat` (see ElementaryDivisorsMat).

`AbelianInvariantsNormalClosureFpGroup( G, H )`

This function is equivalent to `AbelianInvariantsNormalClosureFpGroupRrs` below.

`AbelianInvariantsNormalClosureFpGroupRrs( G, H )`

`AbelianInvariantsNormalClosureFpGroupRrs` returns the invariants of the commutator factor group N/N' of the normal closure N a subgroup H of a finitely presented group G. They are computed by first applying Subgroup Presentations) to construct a relation matrix of N/N' and then transforming this matrix to diagonal form with `ElementaryDivisorsMat` (see ElementaryDivisorsMat).

```    gap> # Define the Coxeter group E1.
gap> F5 := FreeGroup( "x1", "x2", "x3", "x4", "x5" );;
gap> E1 := F5 / [ F5.1^2, F5.2^2, F5.3^2, F5.4^2, F5.5^2,
>  ( F5.1 * F5.3 )^2, ( F5.2 * F5.4 )^2, ( F5.1 * F5.2 )^3,
>  ( F5.2 * F5.3 )^3, ( F5.3 * F5.4 )^3, ( F5.4 * F5.1 )^3,
>  ( F5.1 * F5.5 )^3, ( F5.2 * F5.5 )^2, ( F5.3 * F5.5 )^3,
>  ( F5.4 * F5.5 )^2,
>  ( F5.1 * F5.2 * F5.3 * F5.4 * F5.3 * F5.2 )^2 ];;
gap> x1:=E1.1;;  x2:=E1.2;;  x3:=E1.3;;  x4:=E1.4;;  x5:=E1.5;;
gap> # Get normal subgroup generators for B1.
gap> H := Subgroup( E1, [ x5 * x2^-1, x5 * x4^-1 ] );;
gap> # Compute the abelian invariants of B1/B1'.
gap> A := AbelianInvariantsNormalClosureFpGroup( E1, H );
[ 2, 2, 2, 2, 2, 2, 2, 2 ]
gap> # Compute a presentation for B1.
gap> P := PresentationNormalClosure( E1, H );
<< presentation with 18 gens and 46 rels of total length 132 >>
gap> SimplifyPresentation( P );
#I  there are 8 generators and 30 relators of total length 148
gap> B1 := FpGroupPresentation( P );
Group( _x1, _x2, _x3, _x4, _x6, _x7, _x8, _x11 )
gap> # Compute normal subgroup generators for B1'.
gap> gens := B1.generators;;
gap> numgens := Length( gens );;
gap> comms := [ ];;
gap> for i in [ 1 .. numgens - 1 ] do
>        for j in [i+1 .. numgens ] do
>            Add( comms, Comm( gens[i], gens[j] ) );
>        od;
>    od;
gap> # Compute the abelian invariants of B1'/B1".
gap> K := Subgroup( B1, comms );;
gap> A := AbelianInvariantsNormalClosureFpGroup( B1, K );
[ 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2 ] ```

The prededing calculation for B_1 and a similar one for B_0 have been used to prove that B_1^prime / B_1^{prime prime} cong Z_2^9 times Z^3 and B_0^prime / B_0^{prime prime} cong Z_2^{91} times Z^{27} as stated in Proposition 5 in FJNT95.

The following functions are not implemented specially for finitely presented groups, but they work nevertheless. However, you probably should not use them for larger finitely presented groups.

`Core( G, U )`
`SylowSubgroup( G, p )`
`FittingSubgroup( G )`

GAP 3.4.4
April 1997