  
  [1X1 [33X[0;0YCohomology[133X[101X
  
  [33X[0;0YThis  chapter  describes  functions  which  may  be  used to perform certain
  cohomological  calculations  on  a  finite  group  [3XG[103X,  based on [Hol85]. The
  installation    of    the    package    can    be    tested    by    calling
  [10XTestPackage("cohomolo")[110X.[133X
  
  [33X[0;0YThis  package  has  been updated from the original [5XGAP[105X3 package with minimal
  changes,  so  the user should find the interface unchanged. In fact the only
  real  changes  are that the function [10XInfoCohomology[110X has been replaced by the
  [10XInfo[110X variable [10XInfoCohomolo[110X, and the function [10XSplitExtension[110X has been renamed
  [10XSplitExtensionCHR[110X, to avoid clashing with an existing [5XGAP[105X function name. (Of
  course, it does more or less the same thing as the [5XGAP[105X function!)[133X
  
  [33X[0;0YThe following properties of [3XG[103X can be computed:[133X
  
  [8X(i)[108X
        [33X[0;6YThe  [3Xp[103X-part [22XMul_p[122X of the Schur multiplier [3XMul[103X of [3XG[103X, and a presentation
        of a covering extension of [22XMul_p[122X by [3XG[103X, for a specified prime [3Xp[103X;[133X
  
  [8X(ii)[108X
        [33X[0;6YThe  dimensions  of the first and second cohomology groups of [3XG[103X acting
        on  a  finite  dimensional  [3XKG[103X  module  [3XM[103X, where [3XK[103X is a field of prime
        order; and[133X
  
  [8X(iii)[108X
        [33X[0;6YPresentations of split and nonsplit extensions of [3XM[103X by [3XG[103X.[133X
  
  [33X[0;0YAll  of  these  functions  require  [3XG[103X  to be defined as a finite permutation
  group.  The  functions  which  compute presentations require, in addition, a
  presentation  of  [3XG[103X.  Finally,  the  functions  which  operate on a module [3XM[103X
  require  the  module  to  be  defined  by  a  list  of matrices over [3XK[103X. This
  situation  is  handled  by  first  defining a [5XGAP[105X record, which contains the
  required  information.  This  is  done using the function [10XCHR[110X, which must be
  called before any of the other functions. The remaining functions operate on
  this record.[133X
  
  [33X[0;0YIf  no  presentation of the permutation group [3XG[103X is known, and [3XG[103X has order at
  most  32767,  then a presentation can be computed using the package function
  [10XCalcPres[110X  (which  calls a standalone [10XC[110X program), or alternatively by the [5XGAP[105X
  function             call            [10XImage(IsomorphismFpGroupByGenerators([3XG[103X[10X,
  GeneratorsOfGroup([3XG[103X[10X)))[110X.  Note  that [10XIsomorphismFpGroup[110X is not suitable here,
  since  the  presentation it returns is on a different generating set. On the
  other  hand,  if  you  start  with  a finitely presented group, then you can
  create  a  permutation  representation  with  the function [10XPermRep[110X (although
  there is no guarantee that the representation will be faithful in general).[133X
  
  [33X[0;0YThe functions all compute and make use of a descending sequence of subgroups
  of  [3XG[103X,  starting  at  [3XG[103X  and  ending with a Sylow [3Xp[103X-subgroup of [3XG[103X, and it is
  usually most efficient to have the indices of the subgroups in this chain as
  small  as  possible.  If you get a warning message, and one of the functions
  fails  because the indices in the chain computed are too large, then you can
  try to remedy matters by supplying your own chain. See Section [14X1.10[114X for more
  details, and an example.[133X
  
  [33X[0;0YIf  you  set  the  Info  variable  [10XInfoCohomolo[110X to 1, then a small amount of
  information  will  be  printed,  indicating what is happening. If [3Xchr[103X is the
  cohomology record you are working with, and you set the field [3Xchr[103X[10X.verbose[110X to
  the value [9Xtrue[109X, then you will see all the output of the external programs.[133X
  
  
  [1X1.1 [33X[0;0YCHR[133X[101X
  
  [1X1.1-1 CHR[101X
  
  [33X[1;0Y[29X[2XCHR[102X( [3XG[103X, [3Xp[103X[, [3XF[103X, [3Xmats[103X] ) [32X function[133X
  
  [33X[0;0Y[10XCHR[110X  constructs a cohomology-record, which is used as a parameter for all of
  the  other  functions in this chapter. [3XG[103X must be a finite permutation group,
  and  [3Xp[103X  a  prime  number.  If  present,  [3XF[103X must either be zero or a finitely
  presented  group  with  the  same  number  of  generators as [3XG[103X, of which the
  relators are satisfied by the generators of [3XG[103X. In fact, to obtain meaningful
  results,  [3XF[103X  should  almost  certainly  be isomorphic to [3XG[103X. If present, [3Xmats[103X
  should be a list of invertible matrices over the finite field [3XK[103X = [22XGF(p)[122X. The
  list  should  have the same length as the number of generators of [3XG[103X, and the
  matrices  should correspond to these generators, and define a [22XGF(p)G[122X-module,
  which we shall denote by [3XM[103X.[133X
  
  
  [1X1.2 [33X[0;0YSchurMultiplier[133X[101X
  
  [1X1.2-1 SchurMultiplier[101X
  
  [33X[1;0Y[29X[2XSchurMultiplier[102X( [3Xchr[103X ) [32X function[133X
  
  [33X[0;0Y[3Xchr[103X   must   be   a   cohomology-record  that  was  created  by  a  call  of
  [10XCHR([3XG[103X[10X,[3Xp[103X[10X,[[3XF[103X[10X,[3Xmats[103X[10X])[110X.  [10XSchurMultiplier[110X calculates the [3Xp[103X-part [22XMul_p[122X of the Schur
  multiplier [3XMul[103X of [3XG[103X. The result is returned as a list of integers, which are
  the  abelian  invariants  of  [22XMul_p[122X.  If  the  list  is empty, then [22XMul_p[122X is
  trivial.[133X
  
  
  [1X1.3 [33X[0;0YCoveringGroup[133X[101X
  
  [1X1.3-1 CoveringGroup[101X
  
  [33X[1;0Y[29X[2XCoveringGroup[102X( [3Xchr[103X ) [32X function[133X
  
  [33X[0;0Y[3Xchr[103X  must  be  a  cohomology-record, created by a call of [10XCHR([3XG[103X[10X,[3Xp[103X[10X,[3XF[103X[10X[,[3Xmats[103X[10X])[110X,
  where   [3XF[103X   is  a  finitely  presented  group.  [10XCoveringGroup[110X  calculates  a
  presentation  of  a  covering  extension  of  [22XMul_p[122X by [3XG[103X, where [22XMul_p[122X is the
  [3Xp[103X-part  of  the  Schur  multiplier  [3XMul[103X  of  [3XG[103X. The set of generators of the
  finitely  presented group that is returned is a union of two sets, which are
  in   one-one   correspondence  with  the  generators  of  [3XF[103X  and  of  [22XMul_p[122X,
  respectively.[133X
  
  [33X[0;0YThe relators fall into three classes:[133X
  
  [8X(a)[108X
        [33X[0;6YThose that specify the orders of the generators of [22XMul_p[122X;[133X
  
  [8X(b)[108X
        [33X[0;6YThose that say that the generators of [22XMul_p[122X are central; and[133X
  
  [8X(c)[108X
        [33X[0;6YThose that give the values of the relators of [3XF[103X as elements of [22XMul_p[122X.[133X
  
  
  [1X1.4 [33X[0;0YFirstCohomologyDimension[133X[101X
  
  [1X1.4-1 FirstCohomologyDimension[101X
  
  [33X[1;0Y[29X[2XFirstCohomologyDimension[102X( [3Xchr[103X ) [32X function[133X
  
  [33X[0;0Y[3Xchr[103X  must  be a cohomology-record, created by a call of [10XCHR([3XG[103X[10X,[3Xp[103X[10X,[3XF[103X[10X,[3Xmats[103X[10X)[110X. (If
  there is no finitely presented group [3XF[103X involved, then the third parameter of
  [10XCHR[110X  should  be given as 0.) [10XFirstCohomologyDimension[110X calculates and returns
  the  dimension  over [3XK[103X = [22XGF(p)[122X of the first cohomology group [22XH^1(G,M)[122X of the
  group [3XG[103X in its action on the module [3XM[103X defined by the matrices [3Xmats[103X.[133X
  
  
  [1X1.5 [33X[0;0YSecondCohomologyDimension[133X[101X
  
  [1X1.5-1 SecondCohomologyDimension[101X
  
  [33X[1;0Y[29X[2XSecondCohomologyDimension[102X( [3Xchr[103X ) [32X function[133X
  
  [33X[0;0Y[3Xchr[103X  must  be a cohomology-record, created by a call of [10XCHR([3XG[103X[10X,[3Xp[103X[10X,[3XF[103X[10X,[3Xmats[103X[10X)[110X. (If
  there is no finitely presented group [3XF[103X involved, then the third parameter of
  [10XCHR[110X  should be given as 0.) [10XSecondCohomologyDimension[110X calculates and returns
  the  dimension over [3XK[103X = [22XGF(p)[122X of the second cohomology group [22XH^2(G,M)[122X of the
  group [3XG[103X in its action on the module [3XM[103X defined by the matrices [3Xmats[103X.[133X
  
  
  [1X1.6 [33X[0;0YSplitExtensionCHR[133X[101X
  
  [1X1.6-1 SplitExtensionCHR[101X
  
  [33X[1;0Y[29X[2XSplitExtensionCHR[102X( [3Xchr[103X ) [32X function[133X
  
  [33X[0;0Y[3Xchr[103X must be a cohomology-record, created by a call of [10XCHR([3XG[103X[10X,[3Xp[103X[10X,[3XF[103X[10X,[3Xmats[103X[10X)[110X, where
  [3XF[103X is a finitely presented group. [10XSplitExtensionCHR[110X returns a presentation of
  the  split  extension  of  the  module [3XM[103X defined by the matrices [3Xmats[103X by the
  group  [3XG[103X. This is a straightforward calculation, and involves no call of the
  external cohomology programs. It is provided here for convenience.[133X
  
  
  [1X1.7 [33X[0;0YNonsplitExtension[133X[101X
  
  [1X1.7-1 NonsplitExtension[101X
  
  [33X[1;0Y[29X[2XNonsplitExtension[102X( [3Xchr[103X[, [3Xvec[103X] ) [32X function[133X
  
  [33X[0;0Y[3Xchr[103X must be a cohomology-record, created by a call of [10XCHR([3XG[103X[10X,[3Xp[103X[10X,[3XF[103X[10X,[3Xmats[103X[10X)[110X, where
  [3XF[103X  is a finitely presented group. If present, [3Xvec[103X must be a list of integers
  of  length  equal  to  the dimension over [3XK[103X = [22XGF(p)[122X of the second cohomology
  group  [22XH^2(G,M)[122X  of the group [3XG[103X in its action on the module [3XM[103X defined by the
  matrices  [3Xmats[103X. [10XNonsplitExtension[110X calculates and returns a presentation of a
  nonsplit  extension  of [3XM[103X by [3XG[103X. Since there may be many such extensions, and
  the  equivalence  classes  of these extensions are in one-one correspondence
  with  the nonzero elements of [22XH^2(G,M)[122X, the optional second parameter can be
  used  to  specify  an  element of [22XH^2(G,M)[122X as a vector. The default value of
  this  vector is [10X[1,0,...,0][110X. The set of generators of the finitely presented
  group  that  is  returned  is  a  union  of  two  sets, which are in one-one
  correspondence  with  the  generators  of  [3XF[103X and of [3XM[103X (as an abelian group),
  respectively.[133X
  
  [33X[0;0YThe relators fall into three classes:[133X
  
  [8X(a)[108X
        [33X[0;6YThose that say that [3XM[103X is an abelian group of exponent [3Xp[103X;[133X
  
  [8X(b)[108X
        [33X[0;6YThose that define the action of the generators of [3XF[103X on those of [3XM[103X; and[133X
  
  [8X(c)[108X
        [33X[0;6YThose  that  give  the  values  of the relators of [3XF[103X as elements of [22XM[122X.
        ([13XNote[113X:     It     is    not    particularly    efficient    to    call
        [10XSecondCohomologyDimension[110X   first   to   calculate  the  dimension  of
        [22XH^2(G,M)[122X,  which must of course be known if the second parameter is to
        be  given;  it  is  preferable  to  call [10XNonsplitExtension[110X immediately
        without   the   second  parameter  (which  will  return  one  nonsplit
        extension),  and then to call [10XSecondCohomologyDimension[110X, which will at
        that  stage return the required dimension immediately - all subsequent
        calls of [10XNonsplitExtension[110X on [3Xchr[103X will also yield immediate results.)[133X
  
  
  [1X1.8 [33X[0;0YCalcPres[133X[101X
  
  [1X1.8-1 CalcPres[101X
  
  [33X[1;0Y[29X[2XCalcPres[102X( [3Xchr[103X ) [32X function[133X
  
  [33X[0;0Y[10XCalcPres[110X  computes a presentation of the permutation group [3Xchr[103X[10X.permgp[110X on the
  same  set  of  generators  as  [3Xchr[103X[10X.permgp[110X,  and  stores  it  as [3Xchr[103X[10X.fpgp[110X. It
  currently  only  works  for groups of order up to 32767, although that could
  easily  be increased if required. Note that a presentation of a finite group
  [3XG[103X  on its given generators can also be computed by the standard [5XGAP[105X function
  call [10XImage(IsomorphismFpGroupByGenerators([3XG[103X[10X, GeneratorsOfGroup([3XG[103X[10X)))[110X.[133X
  
  
  [1X1.9 [33X[0;0YPermRep[133X[101X
  
  [1X1.9-1 PermRep[101X
  
  [33X[1;0Y[29X[2XPermRep[102X( [3XF[103X, [3XK[103X ) [32X function[133X
  
  [33X[0;0Y[10XPermRep[110X  calculates the permutation representation of the finitely presented
  group  [3XF[103X  on  the  right  cosets  of  the  subgroup  [3XK[103X,  and returns it as a
  permutation  group  of  which  the  generators  correspond to those of [3XF[103X. It
  simply calls the [5XGAP[105X Todd-Coxeter function. Of course, there is no guarantee
  in general that this representation will be faithful.[133X
  
  
  [1X1.10 [33X[0;0YFurther Information[133X[101X
  
  [33X[0;0YSuppose,  as  usual, that the cohomology record [3Xchr[103X was constructed with the
  call  [10XCHR([3XG[103X[10X,[3Xp[103X[10X,[[3XF[103X[10X],[[3Xmats[103X[10X]  )[110X.  All  of  the  functions make use of a strictly
  decreasing  chain  of  subgroups  of the permutation group [3XG[103X starting with [3XG[103X
  itself  and  ending with a Sylow [3Xp[103X-subgroup [3XP[103X of [3XG[103X. In general, the programs
  run  most  efficiently  if  the  indices  between  successive  terms in this
  sequence  are  as  small as possible. By default, [5XGAP[105X will attempt to find a
  suitable chain, when you call the first cohomology function on [3Xchr[103X. However,
  you may be able to construct a better chain yourself. If so, then you can do
  this by assigning the record field [3Xchr[103X[10X.chain[110X to the list [3XL[103X of subgroups that
  you  wish  to  use.  You should do that before calling any of the cohomology
  functions.  Remember  that  the first term in the list must be [3XG[103X itself, the
  sequence of subgroups must be strictly decreasing, and the last term must be
  equal  to  the Sylow subgroup stored as [3Xchr[103X[10X.sylow[110X. (You can change [3Xchr[103X[10X.sylow[110X
  to  a  different Sylow [3Xp[103X-subgroup if you like.) Here is a slightly contrived
  example of this process.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG:=AlternatingGroup(16);;[127X[104X
    [4X[25Xgap>[125X [27Xchr:=CHR(G,2);;[127X[104X
    [4X[25Xgap>[125X [27XSetInfoLevel(InfoCohomolo,1);;[127X[104X
    [4X[25Xgap>[125X [27XSchurMultiplier(chr);[127X[104X
    [4X[28X#I  Indices in the subgroup chain are:  2027025 315 [128X[104X
    [4X[28X#WARNING: An index in the subgroup chain found is larger than 50000.[128X[104X
    [4X[28X#This calculation may fail. See manual for possible remedies.[128X[104X
    [4X[28X#I   Cohomolo package: Calling external program.[128X[104X
    [4X[28XOut of tree space. Increase TRSP.[128X[104X
    [4X[28XError, the cohomolo program cohomology.gap failed with exit code 1[128X[104X
    [4X[28Xyou can enter 'quit;' to quit to outer loop, or[128X[104X
    [4X[28Xyou can enter 'return;' to continue[128X[104X
    [4X[26Xbrk>[126X [27Xquit;[127X[104X
    [4X[28X[128X[104X
    [4X[28X#The first index in the chain found by GAP was hopelessly large.[128X[104X
    [4X[28X#Let's try and do better.[128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XP:=chr.sylow;;[127X[104X
    [4X[25Xgap>[125X [27XH1:=Subgroup(G, [(1,2)(9,10), (2,3,4,5,6,7,8),[127X[104X
    [4X[25X>[125X [27X                    (1,9)(2,10)(3,11)(4,12)(5,13)(6,14)(7,15)(8,16)]);;[127X[104X
    [4X[25Xgap>[125X [27XIndex(G,H1);[127X[104X
    [4X[28X6435[128X[104X
    [4X[25Xgap>[125X [27XH2:=Subgroup(H1, [(1,2)(5,6),(1,2)(9,10), (2,3,4),[127X[104X
    [4X[25X>[125X [27X   (1,5)(2,6)(3,7)(4,8),  (1,9)(2,10)(3,11)(4,12)(5,13)(6,14)(7,15)(8,16)]);;[127X[104X
    [4X[25Xgap>[125X [27XIndex(H1,H2);[127X[104X
    [4X[28X1225[128X[104X
    [4X[25Xgap>[125X [27XIsSubgroup(H2,P);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X#If that had been false, we could have replaced chr.sylow by[128X[104X
    [4X[28X#a Sylow 2-subgroup of H2.[128X[104X
    [4X[25Xgap>[125X [27XIndex(H2,P);[127X[104X
    [4X[28X81[128X[104X
    [4X[25Xgap>[125X [27Xchr.chain := [G,H1,H2,P];;[127X[104X
    [4X[25Xgap>[125X [27XSchurMultiplier(chr);[127X[104X
    [4X[28X#I   Cohomolo package: Calling external program.[128X[104X
    [4X[28X#I   External program complete.[128X[104X
    [4X[28X#I   Removing temporary files.[128X[104X
    [4X[28X[ 2 ][128X[104X
    [4X[25Xgap>[125X [27Xquit;[127X[104X
  [4X[32X[104X
  
  [33X[0;0Y [133X
  
