Resolutions

A free &FG;-resolution of an &FG;-module M is a sequence of module homomorphisms \ldots \rightarrow M_{n+1} \rightarrow M_n \rightarrow M_{n-1} \rightarrow \ldots \rightarrow M_1 \rightarrow M_0 \twoheadrightarrow M ... ---> M_(n+1) ---> M_n ---> M_(n-1) ---> ... ---> M_1 ---> M_0 --->> M Where each M_n is a free \mathbb{F}G-module and the image of d_{n+1}: M_{n+1} \rightarrow M_{n} equals the kernel of d_n: M_n \rightarrow M_{n-1} for all n > 0.

The HAPResolution datatype in &HAPprime;

Both &HAP; and &HAPprime; use the HAPResolution datatype to store resolutions, and you should refer to the &HAP; documentation for full details of this datatype. With resolutions computed by &HAP;, the boundary maps which define the module homomorphisms are stored as lists of \mathbb{Z}G-module words, each of which is an integer pair [i,g]. By contrast, when &HAPprime; computes resolutions it stores the boundary maps as lists of &G;-generating vectors (as used in FpGModuleHomomorphismGF, see Chapter ). Over small finite fields (and in particular in GF(2)), these compressed vectors take far less memory, saving at least a factor of two for long resolutions. The different data storage method is entirely an internal change - as far as the used is concerned, both versions behave exactly the same.
Implementation: Constructing resolutions

Given the definition of a free &FG;-resolution given above, a resolution of a module M can be calculated by construction. If there are k generators for M, we can set M_0 equal to the free &FG;-module (\mathbb{F}G)^k, and the module homomorphism d_0 : M_0 \rightarrow M to be the one that sends the ith standard generator of (\mathbb{F}G)^k to the ith element of M. We can now recursively construct the other modules and module homomorphisms in a similar manner. Given a boundary homomorphism d_n = M_n \rightarrow M_{n-1}, the kernel of this can be calculated. Then given a set of generators (ideally a small set) for ker(d_n), we can set M_{n+1} = (\mathbb{F}G)^{|ker(d_n)|}, and the new module homomorphism d_{n+1} to be the one mapping the standard generators of M_{n+1} onto the generators of ker(d_n).

&HAPprime; implements the construction of resolutions using this method. The construction is divided into two stages. The creation of the first homomorphism in the resolution for M is performed by the function , or for a resolution of the trivial &FG;-module &FF;, the first two homomorphisms can be stated without calculation using . Once this initial sequence is created, a longer resolution can be created by repeated application of one of , or , each of which extends the resolution by one stage by constructing a new module and homomorphism mapping onto the minimal generators of the kernel of the last homomorphism of the input resolution. These extension functions differ in speed and the amount of memory that they use. The lowest-memory version, , uses the block structure of module generating vectors (see Section ) and calculates kernels of the boundary homomorphisms using and finds a minimal set of generators for this kernel using . The much faster but memory-hungry uses and respectively. uses whic partitions the boundary homomorphism matrix using &FG;-reduction. This gives a small memory saving over the Radical method, but can take as long as the GF scheme.

The construction of resolutions of length n is wrapped up in the functions ResolutionPrimePowerGroupGF, ResolutionPrimePowerGroupRadical and ResolutionPrimePowerGroupAutoMem, which (as well as the extension functions) are fully documented in Section of the &HAPprime; user manual.

Resolution construction functions
<#Include Label="LengthOneResolutionPrimePowerGroup_DTmanResolution_Con"> <#Include Label="LengthZeroResolutionPrimePowerGroup_DTmanResolution_Con">
Resolution data access functions
<#Include Label="ResolutionLength_DTmanResolution_Dat"> <#Include Label="ResolutionGroup_DTmanResolution_Dat"> <#Include Label="ResolutionFpGModuleGF_DTmanResolution_Dat"> <#Include Label="ResolutionModuleRank_DTmanResolution_Dat"> <#Include Label="ResolutionModuleRanks_DTmanResolution_Dat"> <#Include Label="BoundaryFpGModuleHomomorphismGF_DTmanResolution_Dat"> <#Include Label="ResolutionsAreEqual_DTmanResolution_Dat">
Example: Computing and working with resolutions

In this example we construct a minimal free &FG;-resolution of length four for the group G = D_8 \times Q_8 of order 64, which will be the sequence (\mathbb{F}G)^{22} \rightarrow (\mathbb{F}G)^{15} \rightarrow (\mathbb{F}G)^9 \rightarrow (\mathbb{F}G) \twoheadrightarrow \mathbb{F} (FG)^22 ---> (FG)^15 ---> (FG)^9 ---> FG --->> F We first build each stage explicitly, starting with followed by repeated applications of . We extract various properties of this resolution. Finally, we construct equivalent resolutions for G using and and check that the three are equivalent. gap> G := DirectProduct(DihedralGroup(8), SmallGroup(8, 4)); <pc group of size 64 with 6 generators> gap> R := LengthOneResolutionPrimePowerGroup(G); Resolution of length 1 in characteristic 2 for <pc group of size 64 with 6 generators> . No contracting homotopy available. A partial contracting homotopy is available. gap> R := ExtendResolutionPrimePowerGroupRadical(R);; gap> R := ExtendResolutionPrimePowerGroupRadical(R);; gap> R := ExtendResolutionPrimePowerGroupRadical(R); Resolution of length 4 in characteristic 2 for <pc group of size 64 with 6 generators> . No contracting homotopy available. A partial contracting homotopy is available. gap> # gap> ResolutionLength(R); 4 gap> ResolutionGroup(R); <pc group of size 64 with 6 generators> gap> ResolutionModuleRanks(R); [ 4, 9, 15, 22 ] gap> ResolutionModuleRank(R, 3); 15 gap> M2 := ResolutionFpGModuleGF(R, 2); Full canonical module FG^9 over the group ring of <pc group of size 64 with 6 generators> in characteristic 2 gap> d3 := BoundaryFpGModuleHomomorphismGF(R, 3); <Module homomorphism> gap> ImageOfModuleHomomorphism(d3); Module over the group ring of <pc group of size 64 with 6 generators> in characteristic 2 with 15 generators in FG^9. gap> # gap> S := ResolutionPrimePowerGroupGF(G, 4); Resolution of length 4 in characteristic 2 for <pc group of size 64 with 6 generators> . No contracting homotopy available. A partial contracting homotopy is available. gap> ResolutionsAreEqual(R, S); true gap> T := ResolutionPrimePowerGroupGF2(G, 4); Resolution of length 4 in characteristic 2 for <pc group of size 64 with 6 generators> . No contracting homotopy available. A partial contracting homotopy is available. gap> ResolutionsAreEqual(R, T); true

Further example of constructing resolutions and extracting data from them are given in Sections , , , and in this reference manual, and also the chapter of in the &HAPprime; user guide.
Miscellaneous resolution functions
<#Include Label="BestCentralSubgroupForResolutionFiniteExtension_DTmanResolution_Misc">