Central Extensions

We now describe functions to construct H2(G, U) for a finite soluble group G and finite abelian group U (a trivial G-module). We also present functions to construct central extensions of U by G.

Denote by Z2(G, U) the abelian group of all cocycles from G to U, under pointwise multiplication. The values ψ(g, h) of ψ ∈Z2(G, U) may be represented as a "cocyclic matrix" with entries in U.

If φ : G -> U is a set map with φ (1G) = 1U, then there is a coboundary ∂φ ∈Z2(G, U) defined by ∂φ(g, h) = φ(g) φ (h) φ(gh) - 1. The group of all coboundaries from G to U is denoted B2(G, U), and we have H2(G, U) = Z2(G, U)/B2(G, U). Then H2(G, U)=I x T, where I is the (faithful) image of Ext(G/G', U) ≤H2(G/G', U) under inflation, and T is the (faithful) image of Hom(H2(G), U) under a certain transgression homomorphism. Here we provide functions which construct representatives for the elements in a generating set for each of these two factors.

For details of the theory and the algorithm used, see [FO00].

SetVerbose ("Cocycle", 1) will provide additional information on the calculations in the functions.

ExtGenerators(G, U) : GrpPC, GrpPC -> [<AlgMatElt, RngIntElt>]
Given a soluble group G and an abelian group U (both defined by pc-presentations) the function returns a sequence of tuples describing generators for Ext(G/G', U) as cocyclic matrices; the first entry in each tuple is a representative of a generator, the second is the order of the coset of the representative in H2(G, U).
HomGenerators(G, U) : GrpPC, GrpPC -> [<AlgMatElt, RngIntElt>]
Given a soluble group G and an abelian group U (both defined by pc-presentations) the function returns a sequence of tuples describing generators for Hom(H2 (G), U) as cocyclic matrices; the first entry in each tuple is a representative of a generator, the second is the order of the coset of the representative in H2(G, U).
ElementSequence(G) : GrpPC -> SeqEnum
For a soluble group G, the function returns an indexed set of elements of G listed in the order used by ExtGenerators and HomGenerators.
RepresentativeCocycles(G, U, Ext, Hom) : GrpPC, GrpPC, [AlgMatElt], [AlgMatElt]-> [AlgMatElt]
Let G be a soluble group G and U be an abelian group both defined by pc-presentations. Let Ext and Hom be the values returned by calling ExtGenerators and HomGenerators respectively. The function RepresentativeCocycles returns a complete and irredundant set of representatives for the elements of H2(G, U) as cocyclic matrices.
CentralExtension(G, U, A) : GrpPC, GrpPC, AlgMatElt -> GrpPC
Let G be a soluble group G and U be an abelian group, both defined by pc-presentations. Further, let A be a cocyclic matrix (as determined by the function RepresentativeCocycles). Then, this function returns the central extension of U by G determined by the cocyclic matrix A.
CentralExtensions(G, U, Q) : GrpPC, GrpPC, [AlgMatElt] -> [GrpPC]
If G is a soluble group G and U is an abelian group, both defined by pc-presentations, and Q is a sequence of cocyclic matrices (as determined by the function RepresentativeCocycles), this function returns the corresponding sequence of central extension of U by G determined by the sequence of cocyclic matrices A. Note that the central extensions thereby constructed need not be mutually non-isomorphic.
CentralExtensionProcess(G, U) : GrpPC, GrpPC -> Proc
Given a soluble group G and an abelian group U (both defined by pc-presentations) the function creates a process P for central extensions of U by G. Note that the list of central extensions constructed by this process will contain all isomorphism types but the extensions need not be mutually non-isomorphic.
NextExtension(~P) : Rec -> GrpPC
Given a central extension process P, construct the next central extension determined by P.
IsEmpty(P) : Rec -> BoolElt
Return true if all central extensions determined by the process P have been constructed; otherwise return false.

Example GrpPC_CentralExtension (H69E32)

We compute the abelian invariants of H2 (D4, C2).
> G := DihedralGroup(GrpPC, 4);
> U := AbelianGroup(GrpPC, [2]);
>
> Ext := ExtGenerators(G, U);
> Ext[1];
    <[Id(U) Id(U) Id(U) Id(U) Id(U) Id(U) Id(U) Id(U)]
    [Id(U) Id(U) Id(U) Id(U) Id(U) Id(U) Id(U) Id(U)]
    [Id(U) Id(U) Id(U) Id(U) Id(U) Id(U) Id(U) Id(U)]
    [Id(U) Id(U) Id(U) Id(U) Id(U) Id(U) Id(U) Id(U)]
    [Id(U) Id(U) Id(U) Id(U) U.1 U.1 U.1 U.1]
    [Id(U) Id(U) Id(U) Id(U) U.1 U.1 U.1 U.1]
    [Id(U) Id(U) Id(U) Id(U) U.1 U.1 U.1 U.1]
    [Id(U) Id(U) Id(U) Id(U) U.1 U.1 U.1 U.1], 2>,
>
> Hom := HomGenerators(G, U);
> Hom;
[
    <[Id(U) Id(U) Id(U) Id(U) Id(U) Id(U) Id(U) Id(U)]
    [Id(U) U.1 U.1 Id(U) Id(U) U.1 U.1 Id(U)]
    [Id(U) Id(U) Id(U) Id(U) Id(U) Id(U) Id(U) Id(U)]
    [Id(U) U.1 U.1 Id(U) Id(U) U.1 U.1 Id(U)]
    [Id(U) Id(U) Id(U) U.1 Id(U) U.1 U.1 U.1]
    [Id(U) U.1 Id(U) Id(U) U.1 U.1 Id(U) U.1]
    [Id(U) Id(U) Id(U) U.1 Id(U) U.1 U.1 U.1]
    [Id(U) U.1 Id(U) Id(U) U.1 U.1 Id(U) U.1], 2>
]
>
> AbelianInvariants(Ext, Hom);
[ 2, 2, 2 ]
We now compute the central extension of U by G determined by a single cocyclic matrix.
> A := RepresentativeCocycles(G, U, Ext, Hom);
> E := CentralExtension(G, U, A[2]);
> E;
GrpPC : E of order 16 = 2^4
PC-Relations:
    E.1^2 = E.4,
    E.2^2 = E.3 * E.4,
    E.2^E.1 = E.2 * E.3
Alternatively we can build all central extensions of U by G.
> E := CentralExtensions(G, U, A);
> "Number of extensions is ", #E;
Number of extensions is  8
Next, we provide an example of using the central extension process. Firstly, we create the groups and initialize the process.
> G := SmallGroup(12, 5);
> U := AbelianGroup(GrpPC, [2, 3]);
> P := CentralExtensionProcess(G, U);
Now we run over the central extensions and count conjugacy classes.
> C := [];
> while IsEmpty(P) eq false do
>    NextExtension(~P, ~E);
>    Append(~C, #Classes (E));
> end while;
> "# conjugacy classes is ", C;
# conjugacy classes is  [ 45, 72, 45, 72, 45, 72, 45, 72, 45, 72, 45,
72, 45, 72, 45, 72, 45, 72, 45, 72, 45, 72, 45, 72 ]
V2.28, 13 July 2023