[1X2 Resolutions[0X A free FG-resolution of an FG-module M is a sequence of module homomorphisms ... ---> M_(n+1) ---> M_n ---> M_(n-1) ---> ... ---> M_1 ---> M_0 --->> M Where each M_n is a free FG-module and the image of d_n+1: M_n+1 -> M_n equals the kernel of d_n: M_n -> M_n-1 for all n > 0. [1X2.1 The [9XHAPResolution[1X datatype in [5XHAPprime[1X[0X Both [5XHAP[0m and [5XHAPprime[0m use the [9XHAPResolution[0m datatype to store resolutions, and you should refer to the [5XHAP[0m documentation for full details of this datatype. With resolutions computed by [5XHAP[0m, the boundary maps which define the module homomorphisms are stored as lists of ZG-module words, each of which is an integer pair [10X[i,g][0m. By contrast, when [5XHAPprime[0m computes resolutions it stores the boundary maps as lists of G-generating vectors (as used in [9XFpGModuleHomomorphismGF[0m, see Chapter [14X6[0m). 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. [1X2.2 Implementation: Constructing resolutions[0X 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 (FG)^k, and the module homomorphism d_0 : M_0 -> M to be the one that sends the ith standard generator of (FG)^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 -> 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 = (FG)^|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). [5XHAPprime[0m 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 [2XLengthZeroResolutionPrimePowerGroup[0m ([14X2.3-2[0m), or for a resolution of the trivial FG-module F, the first two homomorphisms can be stated without calculation using [2XLengthOneResolutionPrimePowerGroup[0m ([14X2.3-1[0m). Once this initial sequence is created, a longer resolution can be created by repeated application of one of [2XExtendResolutionPrimePowerGroupGF[0m ([14XHAPprime: ExtendResolutionPrimePowerGroupGF[0m), [2XExtendResolutionPrimePowerGroupRadical[0m ([14XHAPprime: ExtendResolutionPrimePowerGroupRadical[0m) or [2XExtendResolutionPrimePowerGroupGF2[0m ([14XHAPprime: ExtendResolutionPrimePowerGroupGF2[0m), 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, [2XExtendResolutionPrimePowerGroupGF[0m ([14XHAPprime: ExtendResolutionPrimePowerGroupGF[0m), uses the block structure of module generating vectors (see Section [14X5.2-1[0m) and calculates kernels of the boundary homomorphisms using [2XKernelOfModuleHomomorphismSplit[0m ([14X6.6-3[0m) and finds a minimal set of generators for this kernel using [2XMinimalGeneratorsModuleGF[0m ([14X5.5-9[0m). The much faster but memory-hungry [2XExtendResolutionPrimePowerGroupRadical[0m ([14XHAPprime: ExtendResolutionPrimePowerGroupRadical[0m) uses [2XKernelOfModuleHomomorphism[0m ([14X6.6-3[0m) and [2XMinimalGeneratorsModuleRadical[0m ([14X5.5-9[0m) respectively. [2XExtendResolutionPrimePowerGroupGF2[0m ([14XHAPprime: ExtendResolutionPrimePowerGroupGF2[0m) uses [2XKernelOfModuleHomomorphismGF[0m ([14X6.6-3[0m) whic partitions the boundary homomorphism matrix using FG-reduction. This gives a small memory saving over the [10XRadical[0m method, but can take as long as the [10XGF[0m scheme. The construction of resolutions of length n is wrapped up in the functions [9XResolutionPrimePowerGroupGF[0m, [9XResolutionPrimePowerGroupRadical[0m and [9XResolutionPrimePowerGroupAutoMem[0m, which (as well as the extension functions) are fully documented in Section [14X'HAPprime: ResolutionPrimePowerGroup'[0m of the [5XHAPprime[0m user manual. [1X2.3 Resolution construction functions[0X [1X2.3-1 LengthOneResolutionPrimePowerGroup[0m [2X> LengthOneResolutionPrimePowerGroup( [0X[3XG[0X[2X ) __________________________[0Xfunction [6XReturns:[0X [9XHAPResolution[0m Returns a free FG-resolution of length 1 for group [3XG[0m (which must be of a prime power), i.e. the resolution FG^k ---> FG --->> F This function requires very little calculation: the first stage of the resolution can simply be stated given a set of minimal generators for the group. [1X2.3-2 LengthZeroResolutionPrimePowerGroup[0m [2X> LengthZeroResolutionPrimePowerGroup( [0X[3XM[0X[2X ) _________________________[0Xfunction [6XReturns:[0X [9XHAPResolution[0m Returns a minimal free FG-resolution of length 0 for the [9XFpGModuleGF[0m module [3XM[0m, i.e. the resolution FG^k --->> M This function requires little calculation since the the first stage of the resolution can simply be stated if the module has minimal generators: each standard generator of the zeroth-degree module M_0 maps onto a generator of [3XM[0m. If [3XM[0m does not have minimal generators, they are calculated using [2XMinimalGeneratorsModuleRadical[0m ([14X5.5-9[0m). [1X2.4 Resolution data access functions[0X [1X2.4-1 ResolutionLength[0m [2X> ResolutionLength( [0X[3XR[0X[2X ) ______________________________________________[0Xmethod [6XReturns:[0X Integer Returns the length (i.e. the maximum index k) in the resolution [3XR[0m. [1X2.4-2 ResolutionGroup[0m [2X> ResolutionGroup( [0X[3XR[0X[2X ) _______________________________________________[0Xmethod [6XReturns:[0X Group Returns the group of the resolution [3XR[0m. [1X2.4-3 ResolutionFpGModuleGF[0m [2X> ResolutionFpGModuleGF( [0X[3XR, k[0X[2X ) ______________________________________[0Xmethod [6XReturns:[0X [9XFpGModuleGF[0m Returns the module M_k in the resolution [3XR[0m, as a [9XFpGModuleGF[0m (see Chapter [14X5[0m), assuming the canonical action. [1X2.4-4 ResolutionModuleRank[0m [2X> ResolutionModuleRank( [0X[3XR, k[0X[2X ) _______________________________________[0Xmethod [6XReturns:[0X Integer Returns the FG rank of the [3Xk[0mth module M_k in the resolution. [1X2.4-5 ResolutionModuleRanks[0m [2X> ResolutionModuleRanks( [0X[3XR[0X[2X ) _________________________________________[0Xmethod [6XReturns:[0X List of integers Returns a list containg the FG rank of the each of the modules M_k in the resolution [3XR[0m. [1X2.4-6 BoundaryFpGModuleHomomorphismGF[0m [2X> BoundaryFpGModuleHomomorphismGF( [0X[3XR, k[0X[2X ) ____________________________[0Xmethod [6XReturns:[0X [9XFpGModuleHomomorphismGF[0m Returns the [3Xk[0mth boundary map in the resolution [3XR[0m, as a [9XFpGModuleHomomorphismGF[0m. This represents the linear homomorphism d_k: M_k -> M_k-1. [1X2.4-7 ResolutionsAreEqual[0m [2X> ResolutionsAreEqual( [0X[3XR, S[0X[2X ) _____________________________________[0Xoperation [6XReturns:[0X Boolean Returns [9Xtrue[0m if the resolutions appear to be equal, [9Xfalse[0m otherwise. This compares the torsion coefficients of the homology from the two resolutions. [1X2.5 Example: Computing and working with resolutions[0X In this example we construct a minimal free FG-resolution of length four for the group G = D_8 x Q_8 of order 64, which will be the sequence (FG)^22 ---> (FG)^15 ---> (FG)^9 ---> FG --->> F We first build each stage explicitly, starting with [2XLengthOneResolutionPrimePowerGroup[0m ([14X2.3-1[0m) followed by repeated applications of [2XExtendResolutionPrimePowerGroupRadical[0m ([14XHAPprime: ExtendResolutionPrimePowerGroupRadical[0m). We extract various properties of this resolution. Finally, we construct equivalent resolutions for G using [2XResolutionPrimePowerGroupGF[0m ([14XHAPprime: ResolutionPrimePowerGroupGF (for group)[0m) and [2XResolutionPrimePowerGroupGF2[0m ([14XHAPprime: ResolutionPrimePowerGroupGF2 (for group)[0m) and check that the three are equivalent. [4X--------------------------- Example ----------------------------[0X [4Xgap> G := DirectProduct(DihedralGroup(8), SmallGroup(8, 4));[0X [4X<pc group of size 64 with 6 generators>[0X [4Xgap> R := LengthOneResolutionPrimePowerGroup(G);[0X [4XResolution of length 1 in characteristic 2 for <pc group of size 64 with[0X [4X6 generators> .[0X [4XNo contracting homotopy available.[0X [4XA partial contracting homotopy is available.[0X [4X[0X [4Xgap> R := ExtendResolutionPrimePowerGroupRadical(R);;[0X [4Xgap> R := ExtendResolutionPrimePowerGroupRadical(R);;[0X [4Xgap> R := ExtendResolutionPrimePowerGroupRadical(R);[0X [4XResolution of length 4 in characteristic 2 for <pc group of size 64 with[0X [4X6 generators> .[0X [4XNo contracting homotopy available.[0X [4XA partial contracting homotopy is available.[0X [4X[0X [4Xgap> #[0X [4Xgap> ResolutionLength(R);[0X [4X4[0X [4Xgap> ResolutionGroup(R);[0X [4X<pc group of size 64 with 6 generators>[0X [4Xgap> ResolutionModuleRanks(R);[0X [4X[ 4, 9, 15, 22 ][0X [4Xgap> ResolutionModuleRank(R, 3);[0X [4X15[0X [4Xgap> M2 := ResolutionFpGModuleGF(R, 2);[0X [4XFull canonical module FG^9 over the group ring of <pc group of size 64 with[0X [4X6 generators> in characteristic 2[0X [4X[0X [4Xgap> d3 := BoundaryFpGModuleHomomorphismGF(R, 3);[0X [4X<Module homomorphism>[0X [4X[0X [4Xgap> ImageOfModuleHomomorphism(d3);[0X [4XModule over the group ring of <pc group of size 64 with[0X [4X6 generators> in characteristic 2 with 15 generators in FG^9.[0X [4X[0X [4Xgap> #[0X [4Xgap> S := ResolutionPrimePowerGroupGF(G, 4);[0X [4XResolution of length 4 in characteristic 2 for <pc group of size 64 with[0X [4X6 generators> .[0X [4XNo contracting homotopy available.[0X [4XA partial contracting homotopy is available.[0X [4X[0X [4Xgap> ResolutionsAreEqual(R, S);[0X [4Xtrue[0X [4Xgap> T := ResolutionPrimePowerGroupGF2(G, 4);[0X [4XResolution of length 4 in characteristic 2 for <pc group of size 64 with[0X [4X6 generators> .[0X [4XNo contracting homotopy available.[0X [4XA partial contracting homotopy is available.[0X [4X[0X [4Xgap> ResolutionsAreEqual(R, T);[0X [4Xtrue[0X [4X------------------------------------------------------------------[0X Further example of constructing resolutions and extracting data from them are given in Sections [14X5.4-11[0m, [14X5.5-11[0m, [14X5.6-3[0m, [14X6.5-7[0m and [14X6.6-4[0m in this reference manual, and also the chapter of [14X'HAPprime: Examples'[0m in the [5XHAPprime[0m user guide. [1X2.6 Miscellaneous resolution functions[0X [1X2.6-1 BestCentralSubgroupForResolutionFiniteExtension[0m [2X> BestCentralSubgroupForResolutionFiniteExtension( [0X[3XG[, n][0X[2X ) _______[0Xoperation [6XReturns:[0X Group Returns the central subgroup of [3XG[0m that is likely to give the smallest module ranks when using the [5XHAP[0m function [2XResolutionFiniteExtension[0m ([14XHAP: ResolutionFiniteExtension[0m). That function computes a non-minimal resolution for [3XG[0m from the twisted tensor product of resolutions for a normal subgroup N and the quotient group G/N. The ranks of the modules in the resolution for G are the products of the module ranks of the resolutions for these smaller groups. This function tests [3Xn[0m terms of the minimal resolutions for all the central subgroups of G and the corresponding quotients to find the subgroup/quotient pair with the smallest module ranks. If [3Xn[0m is not provided, then n=5 is used.