<Chapter><Heading>Basic functionality for <M>\mathbb ZG</M>-resolutions and group cohomology</Heading>

This page covers the functions used in chapter 3 of the book
<URL><Link>https://global.oup.com/academic/product/an-invitation-to-computational-homotopy-9780198832980</Link><LinkText>An Invitation to Computational Homotopy</LinkText></URL>.


<Section><Heading> Resolutions</Heading>

<ManSection>

<Func Name="EquivariantChainMap" Arg="R,S,f"/>
<Description>

<P/> 
Inputs a free <M>\mathbb ZG</M>-resolution <M>R</M> of <M>\mathbb Z</M>,
a free <M>\mathbb ZQ</M>-resolution <M>S</M> of <M>\mathbb Z</M>, and
a group homomorphism <M>f\colon G \rightarrow Q</M>. It returns the induced
<M>f</M>-equivariant chain map <M>F\colon R \rightarrow S</M>.

 <P/><B>Examples:</B> <URL><Link>../www/SideLinks/About/aboutCohomologyRings.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPoincareSeries.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutFunctorial.html</Link><LinkText>3</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="FreeGResolution" Arg="P,n"/>
<Description><P/> 

Inputs a non-free <M>\mathbb ZG</M>-resolution <M>P_\ast</M> and a  positive integer <M>n</M>. 
It attempts to return <M>n</M> terms of a free <M>\mathbb ZG</M>-resolution
of <M>\mathbb Z</M>. However, the stabilizer groups in the non-free resolution must be such that HAP can construct free resolutions with contracting homotopies for them.

<P/>
The contracting homotopy on the resolution was implemented by  Bui Anh Tuan.

 <P/><B>Examples:</B> <URL><Link>../tutorial/chap1.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../tutorial/chap6.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../tutorial/chap10.html</Link><LinkText>3</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutArithmetic.html</Link><LinkText>4</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPolytopes.html</Link><LinkText>5</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutDavisComplex.html</Link><LinkText>6</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutIntro.html</Link><LinkText>7</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="ResolutionBieberbachGroup" Arg="G"/>

<Func Name="ResolutionBieberbachGroup" Arg="G,v"/>
<Description><P/>

<P/> 
Inputs a torsion free crystallographic group <M>G</M>, also known as a 
Bieberbach group, represented using <B>AffineCrystGroupOnRight</B>
 as in the GAP package Cryst. It also optionally inputs 
a choice of vector 
<M>v</M> in the Euclidean space <M>\mathbb R^n</M> on which <M>G</M>
 acts freely. The function returns <M>n+1</M> terms of the free ZG-resolution 
of <M>\mathbb Z</M> arising as the cellular chain complex of the tessellation of <M>\mathbb R^n</M>
 by the Dirichlet-Voronoi fundamental domain determined by <M>v</M>.
No contracting homotopy is returned with the resolution.

<P/>
This function is part of the HAPcryst package written by Marc Roeder
 and thus requires the HAPcryst package to be loaded.

<P/>
The function requires the use of Polymake software.

 <P/><B>Examples:</B> 
</Description>







































































































</ManSection>

<ManSection>

<Func Name="ResolutionCubicalCrystGroup" Arg="G,k"/>
<Description>

<P/> 
Inputs a crystallographic group <M>G</M> 
 represented using <B>AffineCrystGroupOnRight</B>
 as in the GAP package <M>Cryst</M> together with an integer <M>k \ge 1</M>. 
The function tries to find a cubical fundamental domain in  
  the Euclidean space <M>\mathbb R^n</M> on which <M>G</M>
 acts. If it succeeds it uses this domain to
return   <M>k+1</M> terms of a free ZG-resolution 
of <M>\mathbb Z</M>.

<P/>
This function was written by Bui Anh Tuan.

 <P/><B>Examples:</B> <URL><Link>../tutorial/chap1.html</Link><LinkText>1</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="ResolutionFiniteGroup" Arg="G,k"/>
<Description><P/>

<P/> 
Inputs a finite group <M>G</M> 
and  an integer <M>k \ge 1</M>. 
It 
returns   <M>k+1</M> terms of a free ZG-resolution 
of <M>\mathbb Z</M>.

 <P/><B>Examples:</B> <URL><Link>../tutorial/chap5.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../tutorial/chap6.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutParallel.html</Link><LinkText>3</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPerformance.html</Link><LinkText>4</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutCocycles.html</Link><LinkText>5</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPeriodic.html</Link><LinkText>6</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutCohomologyRings.html</Link><LinkText>7</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPoincareSeries.html</Link><LinkText>8</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutCrossedMods.html</Link><LinkText>9</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutDefinitions.html</Link><LinkText>10</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutSimplicialGroups.html</Link><LinkText>11</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutExtensions.html</Link><LinkText>12</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutSpaceGroup.html</Link><LinkText>13</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutFunctorial.html</Link><LinkText>14</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutGouter.html</Link><LinkText>15</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutTopology.html</Link><LinkText>16</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutTwistedCoefficients.html</Link><LinkText>17</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="ResolutionNilpotentGroup" Arg="G,k"/>
<Description><P/>

<P/> 
Inputs a nilpotent group <M>G</M> (which can be infinite) 
and  an integer <M>k \ge 1</M>. 
It 
returns   <M>k+1</M> terms of a free <M>\mathbb ZG</M>-resolution 
of <M>\mathbb Z</M>.

 <P/><B>Examples:</B> <URL><Link>../www/SideLinks/About/aboutCohomologyRings.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutRosenbergerMonster.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutExtensions.html</Link><LinkText>3</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="ResolutionNormalSeries" Arg="L,k"/>
<Description><P/>

<P/> 
Inputs a a list <M>L</M> consisting of a chain $<M>1=N_1 \le N_2
\le \cdots \le N_n =G</M> of normal subgroups of <M>G</M>, together with
  an integer <M>k \ge 1</M>. 
It 
returns   <M>k+1</M> terms of a free ZG-resolution 
of <M>\mathbb Z</M>.

 <P/><B>Examples:</B> <URL><Link>../www/SideLinks/About/aboutModPRings.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPerformance.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPersistent.html</Link><LinkText>3</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutRosenbergerMonster.html</Link><LinkText>4</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutExtensions.html</Link><LinkText>5</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="ResolutionPrimePowerGroup" Arg="G,k"/>
<Description><P/>

<P/> 
Inputs a finite <M>p</M>-group <M>G</M>  
and  an integer <M>k \ge 1</M>. 
It 
returns   <M>k+1</M> terms of a minimal free <M>\mathbb FG</M>-resolution 
of the field <M>\mathbb F</M> of <M>p</M> elements.

 <P/><B>Examples:</B> <URL><Link>../www/SideLinks/About/aboutModPRings.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutDefinitions.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutTopology.html</Link><LinkText>3</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="ResolutionSL2Z" Arg="m,k"/>
<Description>

Inputs positive integers <M>m, n</M>
 and returns <M>n</M> terms of a free <M>\mathbb ZG</M>-resolution
of <M>\mathbb Z</M> for the group <M>G=SL_2(\mathbb Z[1/m])</M>.

<P/>
This function is joint work with Bui Anh Tuan.

 <P/><B>Examples:</B> <URL><Link>../tutorial/chap10.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutArithmetic.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutIntro.html</Link><LinkText>3</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="ResolutionSmallGroup" Arg="G,k"/>

<Func Name="ResolutionSmallGroup" Arg="G,k"/>
<Description>

<P/> 
Inputs a small group <M>G</M> 
and  an integer <M>k \ge 1</M>. 
It 
returns   <M>k+1</M> terms of a free ZG-resolution 
of <M>\mathbb Z</M>.

<P/> If <M>G</M> is a finitely presented group then up to degree <M>2</M> the resolution coincides with cellular chain complex of the universal cover of the <M>2</M> complex associated to the presentation of <M>G</M>. Thus the boundaries of
the generators in degree <M>3</M> provide a generating set for the module of identities of the presentation.

<P/>
This function was written by Irina Kholodna.

 <P/><B>Examples:</B> 
</Description>







































































































</ManSection>

<ManSection>

<Func Name="ResolutionSubgroup" Arg="R,H"/>
<Description><P/>

<P/> 
Inputs  a free ZG-resolution 
of <M>\mathbb Z</M> and a finite index subgroup <M>H \le G</M>.
It returns a free ZH-resolution  of <M>\mathbb Z</M>.
 <P/><B>Examples:</B> <URL><Link>../www/SideLinks/About/aboutArithmetic.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutArtinGroups.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutTwistedCoefficients.html</Link><LinkText>3</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

</Section>


<Section><Heading> Algebras <M>\longrightarrow </M> (Co)chain Complexes</Heading>
 
<ManSection>

<Func Name="LeibnizComplex" Arg="g,n"/>
<Description>

<P/> Inputs a Leibniz algebra, or Lie algebra, <M>\mathfrak{g}</M> over a ring
<M>\mathbb K</M> together with
an integer <M>n\ge 0</M>. 
It returns the first <M>n</M> terms of the Leibniz chain complex over <M>\mathbb K</M>.

The complex was implemented by Pablo Fernandez Ascariz.

 <P/><B>Examples:</B> 
</Description>







































































































</ManSection>

</Section>


<Section><Heading> Resolutions <M>\longrightarrow </M> (Co)chain Complexes</Heading>

<ManSection>

<Func Name="HomToIntegers" Arg="C"/>

<Func Name="HomToIntegers" Arg="R"/>

<Func Name="HomToIntegers" Arg="F"/>
<Description><P/>

<P/> Inputs a chain complex <M>C</M> of free abelian groups  
and returns the cochain complex <M>Hom_{\mathbb Z}(C,\mathbb Z)</M>.

<P/> Inputs a free <M>\mathbb ZG</M>-resolution <M>R</M> in characteristic <M>0</M>  
and returns the cochain complex <M>Hom_{\mathbb ZG}(R,\mathbb Z)</M>.

<P/> Inputs an equivariant chain map <M>F\colon R\rightarrow S</M> of 
resolutions 
and returns the induced cochain map <M>Hom_{\mathbb ZG}(S,\mathbb Z)
\longrightarrow Hom_{\mathbb ZG}(R,\mathbb Z)</M>.

 <P/><B>Examples:</B> <URL><Link>../tutorial/chap1.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../tutorial/chap10.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutCohomologyRings.html</Link><LinkText>3</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutSpaceGroup.html</Link><LinkText>4</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutIntro.html</Link><LinkText>5</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutTorAndExt.html</Link><LinkText>6</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="HomToIntegralModule" Arg="R,A"/>
<Description><P/>

<P/> Inputs a free <M>\mathbb ZG</M>-resolution <M>R</M> in characteristic <M>0</M>  
and a group homomorphism 
<M>A\colon G \rightarrow {\rm GL}_n(\mathbb Z)</M>. The homomorphism <M>A</M>
 can be viewed as the <M>\mathbb ZG</M>-module with underlying abelian group 
<M>\mathbb Z^n</M> on which <M>G</M> acts via the homomorphism <M>A</M>.
It returns the cochain complex <M>Hom_{\mathbb ZG}(R,A)</M>.

 <P/><B>Examples:</B> <URL><Link>../tutorial/chap6.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../tutorial/chap10.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutTwistedCoefficients.html</Link><LinkText>3</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="TensorWithIntegers" Arg="R"/>

<Func Name="TensorWithIntegers" Arg="F"/>
<Description><P/>

<P/> Inputs a free <M>\mathbb ZG</M>-resolution <M>R</M> of characteristic <M>0</M> and 
 returns the chain complex
<M>R \otimes_{\mathbb ZG} {\mathbb Z}</M>.

<P/> Inputs an equivariant chain map <M>F\colon R \rightarrow S</M> in 
characteristic <M>0</M> and  returns
the induced chain map <M>F\otimes_{\mathbb ZG}\mathbb Z \colon
R \otimes_{\mathbb ZG} {\mathbb Z} \longrightarrow S \otimes_{\mathbb ZG} {\mathbb Z}</M>.

 <P/><B>Examples:</B> <URL><Link>../tutorial/chap1.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../tutorial/chap3.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../tutorial/chap6.html</Link><LinkText>3</LinkText></URL>&nbsp;,
<URL><Link>../tutorial/chap10.html</Link><LinkText>4</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutArithmetic.html</Link><LinkText>5</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutArtinGroups.html</Link><LinkText>6</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutAspherical.html</Link><LinkText>7</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutParallel.html</Link><LinkText>8</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPerformance.html</Link><LinkText>9</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutCocycles.html</Link><LinkText>10</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPersistent.html</Link><LinkText>11</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPoincareSeries.html</Link><LinkText>12</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutCoveringSpaces.html</Link><LinkText>13</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutCoverinSpaces.html</Link><LinkText>14</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPolytopes.html</Link><LinkText>15</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutCoxeter.html</Link><LinkText>16</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutRosenbergerMonster.html</Link><LinkText>17</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutDavisComplex.html</Link><LinkText>18</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutDefinitions.html</Link><LinkText>19</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutSimplicialGroups.html</Link><LinkText>20</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutExtensions.html</Link><LinkText>21</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutSpaceGroup.html</Link><LinkText>22</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutFunctorial.html</Link><LinkText>23</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutGraphsOfGroups.html</Link><LinkText>24</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutIntro.html</Link><LinkText>25</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutTorAndExt.html</Link><LinkText>26</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="TensorWithIntegersModP" Arg="C,p"/>

<Func Name="TensorWithIntegersModP" Arg="R,p"/>

<Func Name="TensorWithIntegersModP" Arg="F,p"/>
<Description><P/>

<P/> Inputs a chain complex <M>C</M> of characteristic <M>0</M> and a prime integer <M>p</M>. It  returns
the chain complex <M>C \otimes_{\mathbb Z} {\mathbb Z}_p</M> of characteristic <M>p</M>. 

<P/> Inputs a free <M>\mathbb ZG</M>-resolution <M>R</M> of characteristic <M>0</M> and a prime integer <M>p</M>.
It returns the chain complex
<M>R \otimes_{\mathbb ZG} {\mathbb Z}_p</M> of characteristic <M>p</M>.

<P/> Inputs an equivariant chain map <M>F\colon R \rightarrow S</M> in 
characteristic <M>0</M> a prime integer <M>p</M>. It  returns
the induced chain map <M>F\otimes_{\mathbb ZG}\mathbb Z_p \colon
R \otimes_{\mathbb ZG} {\mathbb Z}_p \longrightarrow S \otimes_{\mathbb ZG} {\mathbb Z}_p</M>.

 <P/><B>Examples:</B> <URL><Link>../tutorial/chap1.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutArithmetic.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPerformance.html</Link><LinkText>3</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPersistent.html</Link><LinkText>4</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPoincareSeries.html</Link><LinkText>5</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutDefinitions.html</Link><LinkText>6</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutExtensions.html</Link><LinkText>7</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutTorAndExt.html</Link><LinkText>8</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

</Section>


<Section><Heading> Cohomology rings</Heading>

<ManSection>

<Func Name="AreIsomorphicGradedAlgebras" Arg="A,B"/>
<Description><P/>

Inputs two freely presented graded algebras
 <M>A=\mathbb F[x_1, \ldots, x_m]/I</M> and
<M>B=\mathbb F[y_1, \ldots, y_n]/J</M> and returns <B>true</B> if they are isomorphic, and <B>false</B> otherwise. 

This function was implemented by Paul Smith.

 <P/><B>Examples:</B> 
</Description>







































































































</ManSection>

<ManSection>

<Func Name="HAPDerivation" Arg="R,I,L"/>
<Description><P/>

Inputs a polynomial ring <M>R=\mathbb F[x_1,\ldots,x_m]</M> over a field 
<M>\mathbb F</M> together with a list <M>I</M> of generators for an ideal in 
<M>R</M> and a list <M>L=[y_1,\ldots,y_m]\subset R</M>. It returns the 
derivation
 <M>d\colon E \rightarrow E</M> for <M>E=R/I</M> defined by 
<M>d(x_i)=y_i</M>.

This function was written by Paul Smith. It uses the Singular commutative algebra package.

 <P/><B>Examples:</B> 
</Description>







































































































</ManSection>

<ManSection>

<Func Name="HilbertPoincareSeries" Arg="E"/>
<Description>

Inputs a presentation <M>E=\mathbb F[x_1,\ldots,x_m]/I</M> of a  graded algebra 
 and returns its Hilbert–Poincaré series. 

This function was written by Paul Smith and  uses the Singular commutative algebra package. It is essentially a wrapper for Singular's Hilbert–Poincaré series.

 <P/><B>Examples:</B> 
</Description>







































































































</ManSection>

<ManSection>

<Func Name="HomologyOfDerivation" Arg="d"/>
<Description><P/>

Inputs a derivation <M>d\colon E \rightarrow E</M> on a quotient
<M>E=R/I</M> of a polynomial ring <M>R=\mathbb F[x_1,\ldots,x_m]</M> over a field 
<M>\mathbb F</M>.  
It returns a list <M>[S,J,h]</M> where <M>S</M> is a polynomial ring and <M>J</M> is a list of generators for an ideal in <M>S</M> such that there is an isomorphism
<M>\alpha\colon S/J \rightarrow \ker d/{\rm im~} d</M>. This isomorphism lifts to the ring homomorphism <M>h\colon S \rightarrow \ker d</M>. 

This function was written by Paul Smith. It uses the Singular commutative algebra package.

 <P/><B>Examples:</B> 
</Description>







































































































</ManSection>

<ManSection>

<Func Name="IntegralCohomologyGenerators" Arg="R,n"/>
<Description><P/>

Inputs at least <M>n+1</M> terms of a free <M>\mathbb ZG</M>-resolution of
<M>\mathbb Z</M> and the  integer <M> n \ge 1</M>. It returns a minimal list of 
cohomology classes in <M>H^n(G,\mathbb Z)</M> which, together with all cup 
products of lower degree classes, generate the group <M>H^n(G,\mathbb Z)</M> .

(Let <M>a_i</M> be the <M>i</M>-th canonical generator of the <M>d</M>-generator abelian group <M>H^n(G,Z)</M>. The cohomology class <M>n_1a_1 + ... +n_da_d</M> is represented by the integer vector <M>u=(n_1, ..., n_d)</M>. )

 <P/><B>Examples:</B> 
</Description>







































































































</ManSection>

<ManSection>

<Func Name="LHSSpectralSequence" Arg="G,N,r"/>
<Description><P/>

Inputs a finite <M>2</M>-group <M>G</M>, and normal subgroup <M>N</M> and an 
integer <M>r</M>.
It returns a list of length <M>r</M>
whose <M>i</M>-th term is a presentation for the <M>i</M>-th page of the Lyndon-Hochschild-Serre spectral sequence.

This function was written by Paul Smith. It uses the Singular commutative algebra package.

 <P/><B>Examples:</B> 
</Description>







































































































</ManSection>

<ManSection>

<Func Name="LHSSpectralSequenceLastSheet" Arg="G,N"/>
<Description><P/>

Inputs a finite <M>2</M>-group <M>G</M> and normal subgroup <M>N</M>.
It returns 
 presentation for the <M>E_\infty</M> page of the Lyndon-Hochschild-Serre spectral sequence.

This function was written by Paul Smith. It uses the Singular commutative algebra package.

 <P/><B>Examples:</B> 
</Description>







































































































</ManSection>

<ManSection>

<Func Name="ModPCohomologyGenerators" Arg="G,n"/>

<Func Name="ModPCohomologyGenerators" Arg="R"/>
<Description><P/>

Inputs either a <M>p</M>-group <M>G</M> and positive integer <M>n</M>, or else 
<M>n+1</M> terms of a minimal <M>\mathbb FG</M>-resolution <M>R</M> of the field
<M>\mathbb F</M> of <M>p</M> elements. It returns a pair whose first entry is 
a minimal list of homogeneous generators for the cohomology ring 
<M>A=H^\ast(G,\mathbb F)</M> modulo all elements in degree greater than 
<M>n</M>. The second entry of the pair is a function <B>deg</B> which, when 
applied to a minimal generator, yields its degree.

WARNING: the following rule must be applied when multiplying generators 
<M>x_i</M> together. 
Only products of the form <M>x_1*(x_2*(x_3*(x_4*...)))</M> with 
<M>deg(x_i) \le deg(x_{i+1})</M> should be computed (since the <M>x_i</M>
 belong to a structure constant algebra with only a partially defined structure constants table).

 <P/><B>Examples:</B> <URL><Link>../www/SideLinks/About/aboutIntro.html</Link><LinkText>1</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="ModPCohomologyRing" Arg="R"/>

<Func Name="ModPCohomologyRing" Arg="R,level"/>

<Func Name="ModPCohomologyRing" Arg="G,n"/>

<Func Name="ModPCohomologyRing" Arg="G,n,level"/>
<Description><P/>

Inputs either a <M>p</M>-group <M>G</M> and positive integer <M>n</M>, or 
else <M>n</M> terms of a minimal <M>\mathbb FG</M>-resolution <M>R</M> of 
the field <M>\mathbb F</M> of <M>p</M> elements. It returns the cohomology 
ring <M>A=H^\ast(G,\mathbb F)</M>
 modulo all elements in degree greater than <M>n</M>.  
The ring is returned as a structure constant algebra <M>A</M>.

The ring <M>A</M> is graded. It has a component <B>A!.degree(x)</B>
 which is a function returning the degree of each (homogeneous) element 
<M>x</M> in <B>GeneratorsOfAlgebra(A)</B>.

An optional input variable <M>"level"</M> can be set to one of the strings 
<M>"medium"</M> or <M>"high"</M>. These settings determine parameters in the algorithm. The default setting is <M>"medium"</M>.

When <M>"level"</M> is set to <M>"high"</M> the ring <M>A</M> is returned with 
a component <B>A!.niceBasis</B>. This component is a pair <M>[Coeff,Bas]</M>. 
Here <M>Bas</M> is a list of integer lists; a "nice" basis for the vector space 
<M>A</M> can be constructed using the command <B>List(Bas,x->Product(List(x,i->Basis(A)[i]))</B>. 
The coefficients of the canonical basis element <B>Basis(A)[i]</B>
 are stored as <B>Coeff[i]</B>.

If the ring <M>A</M> is computed using the setting <M>"level"="medium"</M>
 then the component <B>A!.niceBasis</B> can be added to <M>A</M>
 using the command <B>A:=ModPCohomologyRing_part_2(A)</B>.

 <P/><B>Examples:</B> <URL><Link>../www/SideLinks/About/aboutModPRings.html</Link><LinkText>1</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="Mod2CohomologyRingPresentation" Arg="G"/>

<Func Name="Mod2CohomologyRingPresentation" Arg="G,n"/>
  
<Func Name="Mod2CohomologyRingPresentation" Arg="A"/>
  
<Func Name="Mod2CohomologyRingPresentation" Arg="R"/>
<Description><P/>

When applied to a finite <M>2</M>-group <M>G</M> this function returns a 
presentation for the mod-<M>2</M> cohomology ring <M>H^\ast(G,\mathbb F)</M>.
 The Lyndon-Hochschild-Serre spectral sequence is used to prove that the 
presentation is complete.

When the function is applied to a <M>2</M>-group G and positive integer <M>n</M>
 the function first constructs <M>n+1</M> terms of a free 
<M>\mathbb FG</M>-resolution <M>R</M>, then constructs the finite-dimensional 
graded algebra <M>A=H^{(\ast \le n)}(G,\mathbb F)</M>, and finally uses <M>A</M>
 to approximate a presentation for <M>H^*(G,\mathbb F)</M>. For "sufficiently large" <M>n</M> the approximation will be a correct presentation for 
<M>H^\ast(G,\mathbb F)</M>.

Alternatively, the function can be applied directly to either the resolution <M>R</M> or graded algebra <M>A</M>.

This function was written by Paul Smith. It uses the Singular commutative algebra package to handle the Lyndon-Hochschild-Serre spectral sequence.

 <P/><B>Examples:</B> <URL><Link>../tutorial/chap7.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutIntro.html</Link><LinkText>2</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

</Section>


<Section><Heading> Group Invariants</Heading>

<ManSection>

<Func Name="GroupCohomology" Arg="G,k"/>

<Func Name="GroupCohomology" Arg="G,k,p"/>
<Description><P/>

<P/> Inputs a group <M>G</M> and integer <M>k \ge 0</M>. The group <M>G</M> should either be finite or else lie in one of a range of classes of infinite groups (such as nilpotent, crystallographic, Artin etc.). The function returns the list of abelian invariants of <M>H^k(G,\mathbb Z)</M>.

<P/> If a prime <M>p</M> is given as an optional third input variable then the 
function returns the list
of abelian invariants of <M>H^k(G,\mathbb Z_p)</M>. In this case each abelian invariant will be equal to <M>p</M> and the length of the list will be the dimension of
the vector space <M>H^k(G,\mathbb Z_p)</M>.

 <P/><B>Examples:</B> <URL><Link>../tutorial/chap6.html</Link><LinkText>1</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="GroupHomology" Arg="G,k"/>

<Func Name="GroupHomology" Arg="G,k,p"/>
<Description><P/>

<P/> Inputs a group <M>G</M> and integer <M>k \ge 0</M>. The group <M>G</M> should either be finite or else lie in one of a range of classes of infinite groups (such as nilpotent, crystallographic, Artin etc.). The function returns the list of abelian invariants of <M>H_k(G,\mathbb Z)</M>.

<P/> If a prime <M>p</M> is given as an optional third input variable then the 
function returns the list
of abelian invariants of <M>H_k(G,\mathbb Z_p)</M>. In this case each abelian invariant will be equal to <M>p</M> and the length of the list will be the dimension of
the vector space <M>H_k(G,\mathbb Z_p)</M>.

 <P/><B>Examples:</B> <URL><Link>../tutorial/chap6.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../tutorial/chap10.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../tutorial/chap11.html</Link><LinkText>3</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutLinks.html</Link><LinkText>4</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutParallel.html</Link><LinkText>5</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutRosenbergerMonster.html</Link><LinkText>6</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutFunctorial.html</Link><LinkText>7</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutIntro.html</Link><LinkText>8</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutTensorSquare.html</Link><LinkText>9</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutLie.html</Link><LinkText>10</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="PrimePartDerivedFunctor" Arg="G,R,A,k"/>
<Description><P/>

<P/> Inputs a group <M>G</M>, an integer <M>k \ge 0</M>, at least <M>k+1</M> terms of a free <M>\mathbb ZP</M>-resolution of <M>\mathbb Z</M> for <M>P</M> a Sylow <M>p</M>-subgroup of <M>G</M>. A function such as <B>A=TensorWithIntegers</B> is also entered.  The abelian invariants of the <M>p</M>-primary part <M>H_k(G,A)_{(p)}</M> of the homology with coefficients in <M>A</M> is returned.

 <P/><B>Examples:</B> <URL><Link>../www/SideLinks/About/aboutPerformance.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutFunctorial.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutTwistedCoefficients.html</Link><LinkText>3</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="PoincareSeries" Arg="G,n"/>

<Func Name="PoincareSeries" Arg="G"/>

<Func Name="PoincareSeries" Arg="R,n"/>

<Func Name="PoincareSeries" Arg="L,n"/>
<Description><P/>

<P/> 
Inputs a finite <M>p</M>-group <M>G</M> and a positive integer <M>n</M>. 
It returns a quotient of polynomials <M>f(x)=P(x)/Q(x)</M> whose expansion
 has coefficient of <M>x^k</M> equal to the rank of the vector space 
<M>H_k(G,\mathbb F_p)</M> for all <M>k</M> in the range <M>1 \le k \le n</M>. 
(The second input variable can be omitted, in which case the function tries to 
choose a `reasonable' value for <M>n</M>. For 2-groups the function 
<B>PoincareSeriesLHS(G)</B> can be used to produce an <M>f(x)</M> that is correct in all degrees.)

In place of the group <M>G</M> the function can also input (at least <M>n</M>
 terms of) a minimal mod-<M>p</M> resolution <M>R</M> for <M>G</M>.

Alternatively, the first input variable can be a list <M>L</M> of integers. 
In this case the coefficient of <M>x^k</M> in <M>f(x)</M> is equal to the 
<M>(k+1)</M>st term in the list.

 <P/><B>Examples:</B> <URL><Link>../tutorial/chap6.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutArithmetic.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutModPRings.html</Link><LinkText>3</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPoincareSeries.html</Link><LinkText>4</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPoincareSeriesII.html</Link><LinkText>5</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutIntro.html</Link><LinkText>6</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutTorAndExt.html</Link><LinkText>7</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="PoincareSeries" Arg="G,n"/>

<Func Name="PoincareSeries" Arg="G"/>

<Func Name="PoincareSeries" Arg="R,n"/>

<Func Name="PoincareSeries" Arg="L,n"/>
<Description><P/>

<P/> 
Inputs a finite <M>p</M>-group <M>G</M> and a positive integer <M>n</M>. 
It returns a quotient of polynomials <M>f(x)=P(x)/Q(x)</M> whose expansion
 has coefficient of <M>x^k</M> equal to the rank of the vector space 
<M>H_k(G,\mathbb F_p)</M> for all <M>k</M> in the range <M>1 \le k \le n</M>. 
(The second input variable can be omitted, in which case the function tries to 
choose a `reasonable' value for <M>n</M>. For 2-groups the function 
<B>PoincareSeriesLHS(G)</B> can be used to produce an <M>f(x)</M> that is correct in all degrees.)

In place of the group <M>G</M> the function can also input (at least <M>n</M>
 terms of) a minimal mod-<M>p</M> resolution <M>R</M> for <M>G</M>.

Alternatively, the first input variable can be a list <M>L</M> of integers. 
In this case the coefficient of <M>x^k</M> in <M>f(x)</M> is equal to the 
<M>(k+1)</M>st term in the list.

 <P/><B>Examples:</B> <URL><Link>../tutorial/chap6.html</Link><LinkText>1</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutArithmetic.html</Link><LinkText>2</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutModPRings.html</Link><LinkText>3</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPoincareSeries.html</Link><LinkText>4</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutPoincareSeriesII.html</Link><LinkText>5</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutIntro.html</Link><LinkText>6</LinkText></URL>&nbsp;,
<URL><Link>../www/SideLinks/About/aboutTorAndExt.html</Link><LinkText>7</LinkText></URL>&nbsp; 

</Description>







































































































</ManSection>

<ManSection>

<Func Name="RankHomologyPGroup" Arg="G,P,n"/>
<Description><P/>

Inputs a <M>p</M>-group <M>G</M>, a rational function <M>P</M> representing the Poincaré series of the mod-<M>p</M> cohomology of <M>G</M> and a positive
 integer <M>n</M>. It returns the minimum number of generators for
the finite abelian <M>p</M>-group  <M>H_n(G,\mathbb Z)</M>.
 <P/><B>Examples:</B> 
</Description>







































































































</ManSection>

</Section>


<Section><Heading> <M>\mathbb F_p</M>-modules</Heading>

<ManSection>

<Func Name="GroupAlgebraAsFpGModule" Arg="G"/>
<Description><P/>

<P/> Inputs a finite <M>p</M>-group <M>G</M> and returns the modular group algebra <M>\mathbb F_pG</M> in the form of an <M>\mathbb F_pG</M>-module. 

 <P/><B>Examples:</B> 
</Description>







































































































</ManSection>

<ManSection>

<Func Name="Radical" Arg="M"/>
<Description><P/>

<P/> Inputs an <M>\mathbb F_pG</M>-module and returns its radical.

 <P/><B>Examples:</B> 
</Description>







































































































</ManSection>

<ManSection>

<Func Name="RadicalSeries" Arg="M"/>

<Func Name="RadicalSeries" Arg="R"/>
<Description><P/>

<P/> Inputs an <M>\mathbb F_pG</M>-module <M>M</M> and returns its radical series as a list of <M>\mathbb F_pG</M>-modules.

<P/> Inputs a free <M>\mathbb F_pG</M>-resolution R and returns the filtered chain complex <M>\cdots Rad_2(\mathbb F_pG)R \le Rad_1(\mathbb F_pG)R \le R</M>. 

 <P/><B>Examples:</B> 
</Description>







































































































</ManSection>

</Section>

</Chapter>

