  
  [1X2 [33X[0;0YResolutions[133X[101X
  
  [33X[0;0YA free [22XFG[122X-resolution of an [22XFG[122X-module [22XM[122X is a sequence of module homomorphisms[133X
  
  
  [24X[33X[0;6Y... ---> M_(n+1) ---> M_n ---> M_(n-1) ---> ... ---> M_1 ---> M_0 --->> M[133X
  
  [124X
  
  [33X[0;0YWhere  each  [22XM_n[122X  is  a  free  [22XFG[122X-module and the image of [22Xd_n+1: M_n+1 → M_n[122X
  equals the kernel of [22Xd_n: M_n → M_n-1[122X for all [22Xn > 0[122X.[133X
  
  
  [1X2.1 [33X[0;0YThe [9XHAPResolution[109X[101X[1X datatype in [5XHAPprime[105X[101X[1X[133X[101X
  
  [33X[0;0YBoth  [5XHAP[105X  and [5XHAPprime[105X use the [9XHAPResolution[109X datatype to store resolutions,
  and  you  should  refer  to  the  [5XHAP[105X documentation for full details of this
  datatype.  With  resolutions computed by [5XHAP[105X, the boundary maps which define
  the  module  homomorphisms  are  stored as lists of [22XZG[122X-module words, each of
  which  is  an  integer  pair  [10X[i,g][110X.  By  contrast,  when  [5XHAPprime[105X computes
  resolutions it stores the boundary maps as lists of [22XG[122X-generating vectors (as
  used  in  [9XFpGModuleHomomorphismGF[109X,  see Chapter [14X4[114X). 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.[133X
  
  
  [1X2.2 [33X[0;0YImplementation: Constructing resolutions[133X[101X
  
  [33X[0;0YGiven  the definition of a free [22XFG[122X-resolution given above, a resolution of a
  module [22XM[122X can be calculated by construction. If there are [22Xk[122X generators for [22XM[122X,
  we  can  set  [22XM_0[122X  equal  to  the  free  [22XFG[122X-module  [22X(FG)^k[122X,  and  the module
  homomorphism  [22Xd_0  :  M_0  →  M[122X  to  be  the one that sends the [22Xi[122Xth standard
  generator  of  [22X(FG)^k[122X  to  the  [22Xi[122Xth  element  of  [22XM[122X.  We can now recursively
  construct  the  other  modules and module homomorphisms in a similar manner.
  Given  a  boundary homomorphism [22Xd_n = M_n → M_n-1[122X, the kernel of this can be
  calculated.  Then  given  a  set  of  generators  (ideally  a small set) for
  [22Xker(d_n)[122X,   we   can  set  [22XM_n+1  =  (FG)^|ker(d_n)|[122X,  and  the  new  module
  homomorphism  [22Xd_n+1[122X  to  be the one mapping the standard generators of [22XM_n+1[122X
  onto the generators of [22Xker(d_n)[122X.[133X
  
  [33X[0;0Y[5XHAPprime[105X  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  [22XM[122X  is  performed  by  the  function
  [2XLengthZeroResolutionPrimePowerGroup[102X  ([14X2.3-2[114X),  or  for  a  resolution of the
  trivial  [22XFG[122X-module  [22XF[122X,  the  first  two  homomorphisms can be stated without
  calculation  using  [2XLengthOneResolutionPrimePowerGroup[102X  ([14X2.3-1[114X).  Once  this
  initial  sequence is created, a longer resolution can be created by repeated
  application   of   one   of   [2XExtendResolutionPrimePowerGroupGF[102X   ([14XHAPprime:
  ExtendResolutionPrimePowerGroupGF[114X),   [2XExtendResolutionPrimePowerGroupRadical[102X
  ([14XHAPprime:             ExtendResolutionPrimePowerGroupRadical[114X)            or
  [2XExtendResolutionPrimePowerGroupGF2[102X                                ([14XHAPprime:
  ExtendResolutionPrimePowerGroupGF2[114X), 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[102X                                 ([14XHAPprime:
  ExtendResolutionPrimePowerGroupGF[114X),  uses  the  block  structure  of  module
  generating  vectors  (see  Section  [14X3.2-1[114X)  and  calculates  kernels  of the
  boundary  homomorphisms  using  [2XKernelOfModuleHomomorphismSplit[102X  ([14X4.6-3[114X) and
  finds    a    minimal    set   of   generators   for   this   kernel   using
  [2XMinimalGeneratorsModuleGF[102X   ([14X3.5-9[114X).   The  much  faster  but  memory-hungry
  [2XExtendResolutionPrimePowerGroupRadical[102X                            ([14XHAPprime:
  ExtendResolutionPrimePowerGroupRadical[114X)    uses   [2XKernelOfModuleHomomorphism[102X
  ([14X4.6-3[114X)    and    [2XMinimalGeneratorsModuleRadical[102X    ([14X3.5-9[114X)    respectively.
  [2XExtendResolutionPrimePowerGroupGF2[102X                                ([14XHAPprime:
  ExtendResolutionPrimePowerGroupGF2[114X)     uses    [2XKernelOfModuleHomomorphismGF[102X
  ([14X4.6-3[114X) whic partitions the boundary homomorphism matrix using [22XFG[122X-reduction.
  This  gives  a  small memory saving over the [10XRadical[110X method, but can take as
  long as the [10XGF[110X scheme.[133X
  
  [33X[0;0YThe  construction  of resolutions of length [22Xn[122X is wrapped up in the functions
  [9XResolutionPrimePowerGroupGF[109X,       [9XResolutionPrimePowerGroupRadical[109X      and
  [9XResolutionPrimePowerGroupAutoMem[109X, which (as well as the extension functions)
  are fully documented in Section [14X'HAPprime: ResolutionPrimePowerGroup'[114X of the
  [5XHAPprime[105X user manual.[133X
  
  
  [1X2.3 [33X[0;0YResolution construction functions[133X[101X
  
  [1X2.3-1 LengthOneResolutionPrimePowerGroup[101X
  
  [33X[1;0Y[29X[2XLengthOneResolutionPrimePowerGroup[102X( [3XG[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Y[9XHAPResolution[109X[133X
  
  [33X[0;0YReturns  a  free  [22XFG[122X-resolution  of length 1 for group [3XG[103X (which must be of a
  prime power), i.e. the resolution[133X
  
  
  [24X[33X[0;6YFG^k ---> FG --->> F[133X
  
  [124X
  
  [33X[0;0YThis  function  requires  very  little  calculation:  the first stage of the
  resolution  can  simply  be stated given a set of minimal generators for the
  group.[133X
  
  [1X2.3-2 LengthZeroResolutionPrimePowerGroup[101X
  
  [33X[1;0Y[29X[2XLengthZeroResolutionPrimePowerGroup[102X( [3XM[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Y[9XHAPResolution[109X[133X
  
  [33X[0;0YReturns  a minimal free [22XFG[122X-resolution of length 0 for the [9XFpGModuleGF[109X module
  [3XM[103X, i.e. the resolution[133X
  
  
  [24X[33X[0;6YFG^k --->> M[133X
  
  [124X
  
  [33X[0;0YThis  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 [22XM_0[122X maps onto a generator of
  [3XM[103X.  If  [3XM[103X  does  not  have  minimal  generators,  they  are calculated using
  [2XMinimalGeneratorsModuleRadical[102X ([14X3.5-9[114X).[133X
  
  
  [1X2.4 [33X[0;0YResolution data access functions[133X[101X
  
  [1X2.4-1 ResolutionLength[101X
  
  [33X[1;0Y[29X[2XResolutionLength[102X( [3XR[103X ) [32X method[133X
  [6XReturns:[106X  [33X[0;10YInteger[133X
  
  [33X[0;0YReturns the length (i.e. the maximum index [22Xk[122X) in the resolution [3XR[103X.[133X
  
  [1X2.4-2 ResolutionGroup[101X
  
  [33X[1;0Y[29X[2XResolutionGroup[102X( [3XR[103X ) [32X method[133X
  [6XReturns:[106X  [33X[0;10YGroup[133X
  
  [33X[0;0YReturns the group of the resolution [3XR[103X.[133X
  
  [1X2.4-3 ResolutionFpGModuleGF[101X
  
  [33X[1;0Y[29X[2XResolutionFpGModuleGF[102X( [3XR[103X, [3Xk[103X ) [32X method[133X
  [6XReturns:[106X  [33X[0;10Y[9XFpGModuleGF[109X[133X
  
  [33X[0;0YReturns  the  module  [22XM_k[122X in the resolution [3XR[103X, as a [9XFpGModuleGF[109X (see Chapter
  [14X3[114X), assuming the canonical action.[133X
  
  [1X2.4-4 ResolutionModuleRank[101X
  
  [33X[1;0Y[29X[2XResolutionModuleRank[102X( [3XR[103X, [3Xk[103X ) [32X method[133X
  [6XReturns:[106X  [33X[0;10YInteger[133X
  
  [33X[0;0YReturns the [22XFG[122X rank of the [3Xk[103Xth module [22XM_k[122X in the resolution.[133X
  
  [1X2.4-5 ResolutionModuleRanks[101X
  
  [33X[1;0Y[29X[2XResolutionModuleRanks[102X( [3XR[103X ) [32X method[133X
  [6XReturns:[106X  [33X[0;10YList of integers[133X
  
  [33X[0;0YReturns  a  list  containg the [22XFG[122X rank of the each of the modules [22XM_k[122X in the
  resolution [3XR[103X.[133X
  
  [1X2.4-6 BoundaryFpGModuleHomomorphismGF[101X
  
  [33X[1;0Y[29X[2XBoundaryFpGModuleHomomorphismGF[102X( [3XR[103X, [3Xk[103X ) [32X method[133X
  [6XReturns:[106X  [33X[0;10Y[9XFpGModuleHomomorphismGF[109X[133X
  
  [33X[0;0YReturns    the    [3Xk[103Xth   boundary   map   in   the   resolution   [3XR[103X,   as   a
  [9XFpGModuleHomomorphismGF[109X.  This represents the linear homomorphism [22Xd_k: M_k →
  M_k-1[122X.[133X
  
  [1X2.4-7 ResolutionsAreEqual[101X
  
  [33X[1;0Y[29X[2XResolutionsAreEqual[102X( [3XR[103X, [3XS[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10YBoolean[133X
  
  [33X[0;0YReturns  [9Xtrue[109X  if  the resolutions appear to be equal, [9Xfalse[109X otherwise. This
  compares the torsion coefficients of the homology from the two resolutions.[133X
  
  
  [1X2.5 [33X[0;0YExample: Computing and working with resolutions[133X[101X
  
  [33X[0;0YIn this example we construct a minimal free [22XFG[122X-resolution of length four for
  the group [22XG = D_8 × Q_8[122X of order 64, which will be the sequence[133X
  
  
  [24X[33X[0;6Y(FG)^22 ---> (FG)^15 ---> (FG)^9 ---> FG --->> F[133X
  
  [124X
  
  [33X[0;0YWe     first     build     each     stage    explicitly,    starting    with
  [2XLengthOneResolutionPrimePowerGroup[102X ([14X2.3-1[114X) followed by repeated applications
  of             [2XExtendResolutionPrimePowerGroupRadical[102X             ([14XHAPprime:
  ExtendResolutionPrimePowerGroupRadical[114X).  We  extract  various properties of
  this  resolution.  Finally,  we construct equivalent resolutions for [22XG[122X using
  [2XResolutionPrimePowerGroupGF[102X   ([14XHAPprime:   ResolutionPrimePowerGroupGF   for
  group[114X)          and          [2XResolutionPrimePowerGroupGF2[102X         ([14XHAPprime:
  ResolutionPrimePowerGroupGF2  for  group[114X)  and  check  that  the  three  are
  equivalent.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG := DirectProduct(DihedralGroup(8), SmallGroup(8, 4));[127X[104X
    [4X[28X<pc group of size 64 with 6 generators>[128X[104X
    [4X[25Xgap>[125X [27XR := LengthOneResolutionPrimePowerGroup(G);[127X[104X
    [4X[28XResolution of length 1 in characteristic 2 for <pc group of size 64 with[128X[104X
    [4X[28X6 generators> .[128X[104X
    [4X[28XNo contracting homotopy available.[128X[104X
    [4X[28XA partial contracting homotopy is available.[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XR := ExtendResolutionPrimePowerGroupRadical(R);;[127X[104X
    [4X[25Xgap>[125X [27XR := ExtendResolutionPrimePowerGroupRadical(R);;[127X[104X
    [4X[25Xgap>[125X [27XR := ExtendResolutionPrimePowerGroupRadical(R);[127X[104X
    [4X[28XResolution of length 4 in characteristic 2 for <pc group of size 64 with[128X[104X
    [4X[28X6 generators> .[128X[104X
    [4X[28XNo contracting homotopy available.[128X[104X
    [4X[28XA partial contracting homotopy is available.[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27X#[127X[104X
    [4X[25Xgap>[125X [27XResolutionLength(R);[127X[104X
    [4X[28X4[128X[104X
    [4X[25Xgap>[125X [27XResolutionGroup(R);[127X[104X
    [4X[28X<pc group of size 64 with 6 generators>[128X[104X
    [4X[25Xgap>[125X [27XResolutionModuleRanks(R);[127X[104X
    [4X[28X[ 4, 9, 15, 22 ][128X[104X
    [4X[25Xgap>[125X [27XResolutionModuleRank(R, 3);[127X[104X
    [4X[28X15[128X[104X
    [4X[25Xgap>[125X [27XM2 := ResolutionFpGModuleGF(R, 2);[127X[104X
    [4X[28XFull canonical module FG^9 over the group ring of <pc group of size 64 with[128X[104X
    [4X[28X6 generators> in characteristic 2[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xd3 := BoundaryFpGModuleHomomorphismGF(R, 3);[127X[104X
    [4X[28X<Module homomorphism>[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XImageOfModuleHomomorphism(d3);[127X[104X
    [4X[28XModule over the group ring of <pc group of size 64 with[128X[104X
    [4X[28X6 generators> in characteristic 2 with 15 generators in FG^9.[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27X#[127X[104X
    [4X[25Xgap>[125X [27XS := ResolutionPrimePowerGroupGF(G, 4);[127X[104X
    [4X[28XResolution of length 4 in characteristic 2 for <pc group of size 64 with[128X[104X
    [4X[28X6 generators> .[128X[104X
    [4X[28XNo contracting homotopy available.[128X[104X
    [4X[28XA partial contracting homotopy is available.[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XResolutionsAreEqual(R, S);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XT := ResolutionPrimePowerGroupGF2(G, 4);[127X[104X
    [4X[28XResolution of length 4 in characteristic 2 for <pc group of size 64 with[128X[104X
    [4X[28X6 generators> .[128X[104X
    [4X[28XNo contracting homotopy available.[128X[104X
    [4X[28XA partial contracting homotopy is available.[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XResolutionsAreEqual(R, T);[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  [33X[0;0YFurther  example  of  constructing resolutions and extracting data from them
  are  given  in  Sections  [14X3.4-11[114X,  [14X3.5-11[114X,  [14X3.6-3[114X,  [14X4.5-7[114X  and [14X4.6-4[114X in this
  reference  manual,  and  also  the  chapter  of  [14X'HAPprime: Examples'[114X in the
  [5XHAPprime[105X user guide.[133X
  
  
  [1X2.6 [33X[0;0YMiscellaneous resolution functions[133X[101X
  
  [1X2.6-1 BestCentralSubgroupForResolutionFiniteExtension[101X
  
  [33X[1;0Y[29X[2XBestCentralSubgroupForResolutionFiniteExtension[102X( [3XG[103X[, [3Xn[103X] ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10YGroup[133X
  
  [33X[0;0YReturns the central subgroup of [3XG[103X that is likely to give the smallest module
  ranks   when   using   the   [5XHAP[105X  function  [2XResolutionFiniteExtension[102X  ([14XHAP:
  ResolutionFiniteExtension[114X).  That function computes a non-minimal resolution
  for [3XG[103X from the twisted tensor product of resolutions for a normal subgroup [22XN[122X
  and the quotient group [22XG/N[122X. The ranks of the modules in the resolution for [22XG[122X
  are  the  products  of the module ranks of the resolutions for these smaller
  groups.  This  function tests [3Xn[103X terms of the minimal resolutions for all the
  central  subgroups  of  [22XG[122X  and  the  corresponding  quotients  to  find  the
  subgroup/quotient pair with the smallest module ranks. If [3Xn[103X is not provided,
  then [22Xn=5[122X is used.[133X
  
