1############################################################################# 2## 3## This file is part of GAP, a system for computational discrete algebra. 4## This file's authors include Werner Nickel, Alexander Hulpke. 5## 6## Copyright of GAP belongs to its developers, whose names are too numerous 7## to list here. Please refer to the COPYRIGHT file for details. 8## 9## SPDX-License-Identifier: GPL-2.0-or-later 10## 11 12############################################################################# 13## 14#V InfoSchur 15## 16## <ManSection> 17## <InfoClass Name="InfoSchur"/> 18## 19## <Description> 20## </Description> 21## </ManSection> 22## 23DeclareInfoClass( "InfoSchur" ); 24 25############################################################################# 26## 27#O SchurCover(<G>) 28## 29## <#GAPDoc Label="SchurCover"> 30## <ManSection> 31## <Attr Name="SchurCover" Arg='G'/> 32## 33## <Description> 34## returns one (of possibly several) Schur covers of the group <A>G</A>. 35## <P/> 36## At the moment this cover is represented as a finitely presented group 37## and <Ref Attr="IsomorphismPermGroup"/> would be needed to convert it to a 38## permutation group. 39## <P/> 40## If also the relation to <A>G</A> is needed, 41## <Ref Attr="EpimorphismSchurCover"/> should be used. 42## <Example><![CDATA[ 43## gap> g:=Group((1,2,3,4),(1,2));; 44## gap> epi:=EpimorphismSchurCover(g); 45## [ F1, F2, F3 ] -> [ (1,2), (2,3), (3,4) ] 46## gap> Size(Source(epi)); 47## 48 48## gap> f:=FreeGroup("a","b");; 49## gap> g:=f/ParseRelators(f,"a2,b3,(ab)5");; 50## gap> epi:=EpimorphismSchurCover(g); 51## [ a, b ] -> [ a, b ] 52## gap> Size(Kernel(epi)); 53## 2 54## ]]></Example> 55## <P/> 56## If the group becomes bigger, Schur Cover calculations might become 57## unfeasible. 58## <P/> 59## There is another operation, <Ref Attr="AbelianInvariantsMultiplier"/>, 60## which only returns the structure of the Schur Multiplier, 61## and which should work for larger groups as well. 62## </Description> 63## </ManSection> 64## <#/GAPDoc> 65## 66DeclareAttribute( "SchurCover", IsGroup ); 67 68############################################################################## 69## 70#O EpimorphismSchurCover(<G>[,<pl>]) 71## 72## <#GAPDoc Label="EpimorphismSchurCover"> 73## <ManSection> 74## <Attr Name="EpimorphismSchurCover" Arg='G[, pl]'/> 75## 76## <Description> 77## returns an epimorphism <M>epi</M> from a group <M>D</M> onto <A>G</A>. 78## The group <M>D</M> is one (of possibly several) Schur covers of <A>G</A>. 79## The group <M>D</M> can be obtained as the <Ref Attr="Source"/> value of 80## <A>epi</A>. 81## The kernel of <M>epi</M> is the Schur multiplier of <A>G</A>. 82## If <A>pl</A> is given as a list of primes, 83## only the multiplier part for these primes is realized. 84## At the moment, <M>D</M> is represented as a finitely presented group. 85## </Description> 86## </ManSection> 87## <#/GAPDoc> 88## 89DeclareAttribute( "EpimorphismSchurCover", IsGroup ); 90 91############################################################################## 92## 93#A AbelianInvariantsMultiplier(<G>) 94## 95## <#GAPDoc Label="AbelianInvariantsMultiplier"> 96## <ManSection> 97## <Attr Name="AbelianInvariantsMultiplier" Arg='G'/> 98## 99## <Description> 100## <Index>Multiplier</Index> 101## <Index>Schur multiplier</Index> 102## returns a list of the abelian invariants of the Schur multiplier of 103## <A>G</A>. 104## <P/> 105## At the moment, this operation will not give any information about how to 106## extend the multiplier to a Schur Cover. 107## <Example><![CDATA[ 108## gap> AbelianInvariantsMultiplier(g); 109## [ 2 ] 110## gap> AbelianInvariantsMultiplier(AlternatingGroup(6)); 111## [ 2, 3 ] 112## gap> AbelianInvariantsMultiplier(SL(2,3)); 113## [ ] 114## gap> AbelianInvariantsMultiplier(SL(3,2)); 115## [ 2 ] 116## gap> AbelianInvariantsMultiplier(PSU(4,2)); 117## [ 2 ] 118## ]]></Example> 119## (Note that the last command from the example will take some time.) 120## <P/> 121## The &GAP; 4.4.12 manual contained examples for larger groups e.g. 122## <M>M_{22}</M>. However, some issues that may very rarely (and not 123## easily reproducibly) lead to wrong results were discovered in the code 124## capable of handling larger groups, and in &GAP; 4.5 it was replaced 125## by a more reliable basic method. To deal with larger groups, one can use 126## the function <Ref BookName="cohomolo" Func="SchurMultiplier"/> from the 127## <Package>cohomolo</Package> package. Also, additional methods for 128## <Ref Attr="AbelianInvariantsMultiplier"/> are installed in the 129## <Package>Polycyclic</Package> package for pcp-groups. 130## </Description> 131## </ManSection> 132## <#/GAPDoc> 133## 134DeclareAttribute( "AbelianInvariantsMultiplier", IsGroup ); 135 136############################################################################## 137#### Derived functions. Robert F. Morse 138#### 139############################################################################## 140## 141#A Epicentre(<G>) 142#A ExteriorCentre(<G>) 143## 144## <#GAPDoc Label="Epicentre"> 145## <ManSection> 146## <Attr Name="Epicentre" Arg='G'/> 147## <Attr Name="ExteriorCentre" Arg='G'/> 148## 149## <Description> 150## There are various ways of describing the epicentre of a group <A>G</A>. 151## It is the smallest normal subgroup <M>N</M> of <A>G</A> such that 152## <M><A>G</A>/N</M> is a central quotient of a group. 153## It is also equal to the Exterior Center of <A>G</A>, 154## see <Cite Key="Ellis98"/>. 155## </Description> 156## </ManSection> 157## <#/GAPDoc> 158## 159DeclareAttribute("Epicentre", IsGroup ); 160DeclareSynonymAttr("Epicenter", Epicentre); 161DeclareSynonymAttr("ExteriorCentre", Epicentre); 162DeclareSynonymAttr("ExteriorCenter", Epicentre); 163 164############################################################################## 165## 166#O NonabelianExteriorSquare(<G>) 167## 168## <#GAPDoc Label="NonabelianExteriorSquare"> 169## <ManSection> 170## <Oper Name="NonabelianExteriorSquare" Arg='G'/> 171## 172## <Description> 173## Computes the nonabelian exterior square <M><A>G</A> \wedge <A>G</A></M> 174## of the group <A>G</A>, which for a finitely presented group is the 175## derived subgroup of any Schur cover of <A>G</A> 176## (see <Cite Key="BJR87"/>). 177## </Description> 178## </ManSection> 179## <#/GAPDoc> 180## 181DeclareOperation("NonabelianExteriorSquare", [IsGroup]); 182 183############################################################################## 184## 185#O EpimorphismNonabelianExteriorSquare(<G>) 186## 187## <#GAPDoc Label="EpimorphismNonabelianExteriorSquare"> 188## <ManSection> 189## <Oper Name="EpimorphismNonabelianExteriorSquare" Arg='G'/> 190## 191## <Description> 192## Computes the mapping 193## <M><A>G</A> \wedge <A>G</A> \rightarrow <A>G</A></M>. 194## The kernel of this mapping is equal to the Schur multiplier of <A>G</A>. 195## </Description> 196## </ManSection> 197## <#/GAPDoc> 198## 199DeclareOperation("EpimorphismNonabelianExteriorSquare", [IsGroup]); 200 201############################################################################## 202## 203#P IsCentralFactor(<G>) 204## 205## <#GAPDoc Label="IsCentralFactor"> 206## <ManSection> 207## <Prop Name="IsCentralFactor" Arg='G'/> 208## 209## <Description> 210## This function determines if there exists a group <M>H</M> such that 211## <A>G</A> is isomorphic to the quotient <M>H/Z(H)</M>. 212## A group with this property is called in literature <E>capable</E>. 213## A group being capable is 214## equivalent to the epicentre of <A>G</A> being trivial, 215## see <Cite Key="BFS79"/>. 216## </Description> 217## </ManSection> 218## <#/GAPDoc> 219## 220DeclareProperty("IsCentralFactor", IsGroup); 221 222############################################################################## 223###########################END RFM############################################ 224 225 226############################################################################## 227## 228#F SchuMu(<G>,<p>) 229## 230## <ManSection> 231## <Func Name="SchuMu" Arg='G,p'/> 232## 233## <Description> 234## returns epimorphism from p-part of multiplier.p-Sylow (note: This 235## extension is <E>not</E> necessarily isomorphic to a Sylow subgroup of a 236## Darstellungsgruppe!) onto p-Sylow, the 237## kernel is the p-part of the multiplier. 238## The implemented algorithm is based on section 7 in Derek Holt's paper. 239## However we use some of the general homomorphism setup to avoid having to 240## remember certain relations. 241## </Description> 242## </ManSection> 243## 244DeclareGlobalFunction("SchuMu"); 245 246############################################################################## 247## 248#F CorestEval(<FG>,<s>) 249## 250## <ManSection> 251## <Func Name="CorestEval" Arg='FG,s'/> 252## 253## <Description> 254## evaluate corestriction mapping. 255## <A>FH</A> is a homomorphism from a finitely presented group onto a finite 256## group <A>G</A>. <A>s</A> an epimorphism onto a p-Sylow subgroup of <A>G</A> as obtained 257## from <C>SchuMu</C>. 258## This function evaluates the relators of the source of <A>FH</A> in the 259## extension M_p.<A>G</A>. It returns a list whose entries are of the form 260## [<A>rel</A>,<A>val</A>], where <A>rel</A> is a relator of <A>G</A> and <A>val</A> its evaluation as 261## an element of M_p. 262## </Description> 263## </ManSection> 264## 265DeclareGlobalFunction("CorestEval"); 266 267############################################################################## 268## 269#F RelatorFixedMultiplier(<hom>,<p>) 270## 271## <ManSection> 272## <Func Name="RelatorFixedMultiplier" Arg='hom,p'/> 273## 274## <Description> 275## Let <A>hom</A> an epimorphism from an fp group onto a finite group <A>G</A>. This 276## function returns an epimorphism onto the <A>p</A>-Sylow subgroup of <A>G</A>, 277## whose kernel is the largest quotient of the multiplier, that can lift 278## <A>hom</A> to a larger quotient. (The source of this map thus is <M>M_R(B)</M> 279## of <Cite Key="HulpkeQuot"/>.) 280## </Description> 281## </ManSection> 282## 283DeclareGlobalFunction("RelatorFixedMultiplier"); 284