<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IntegralCupProduct</code>( <var class="Arg">R</var>, <var class="Arg">u</var>, <var class="Arg">v</var>, <var class="Arg">p</var>, <var class="Arg">q</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IntegralCupProduct</code>( <var class="Arg">R</var>, <var class="Arg">u</var>, <var class="Arg">v</var>, <var class="Arg">p</var>, <var class="Arg">q</var>, <var class="Arg">P</var>, <var class="Arg">Q</var>, <var class="Arg">N</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>(Various functions used to construct the cup product are also <span class="URL"><a href="../www/SideLinks/CR_functions.html">available</a></span>.)</p>
<p>Inputs a <span class="SimpleMath">ZG</span>-resolution <span class="SimpleMath">R</span>, a vector <span class="SimpleMath">u</span> representing an element in <span class="SimpleMath">H^p(G,Z)</span>, a vector <span class="SimpleMath">v</span> representing an element in <span class="SimpleMath">H^q(G,Z)</span> and the two integers <span class="SimpleMath">p,q</span> ><span class="SimpleMath">0</span>. It returns a vector <span class="SimpleMath">w</span> representing the cup product <span class="SimpleMath">u⋅ v</span> in <span class="SimpleMath">H^p+q(G,Z)</span>. This product is associative and <span class="SimpleMath">u⋅ v = (-1)pqv⋅ u</span> . It provides <span class="SimpleMath">H^∗(G,Z)</span> with the structure of an anti-commutative graded ring. This function implements the cup product for characteristic 0 only.</p>
<p>The resolution <span class="SimpleMath">R</span> needs a contracting homotopy.</p>
<p>To save the function from having to calculate the abelian groups <span class="SimpleMath">H^n(G,Z)</span> additional input variables can be used in the form <span class="SimpleMath">IntegralCupProduct(R,u,v,p,q,P,Q,N)</span> , where</p>
<ul>
<li><p><span class="SimpleMath">P</span> is the output of the command <span class="SimpleMath">CR_CocyclesAndCoboundaries(R,p,true)</span></p>
</li>
<li><p><span class="SimpleMath">Q</span> is the output of the command <span class="SimpleMath">CR_CocyclesAndCoboundaries(R,q,true)</span></p>
</li>
<li><p><span class="SimpleMath">N</span> is the output of the command <span class="SimpleMath">CR_CocyclesAndCoboundaries(R,p+q,true)</span> .</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IntegralRingGenerators</code>( <var class="Arg">R</var>, <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Inputs at least <span class="SimpleMath">n+1</span> terms of a <span class="SimpleMath">ZG</span>-resolution and integer <span class="SimpleMath">n</span>> <span class="SimpleMath">0</span>. It returns a minimal list of cohomology classes in <span class="SimpleMath">H^n(G,Z)</span> which, together with all cup products of lower degree classes, generate the group <span class="SimpleMath">H^n(G,Z)</span> .</p>
<p>(Let <span class="SimpleMath">a_i</span> be the <span class="SimpleMath">i</span>-th canonical generator of the <span class="SimpleMath">d</span>-generator abelian group <span class="SimpleMath">H^n(G,Z)</span>. The cohomology class <span class="SimpleMath">n_1a_1 + ... +n_da_d</span> is represented by the integer vector <span class="SimpleMath">u=(n_1, ..., n_d)</span>. )</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ModPCohomologyGenerators</code>( <var class="Arg">G</var>, <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ModPCohomologyGenerators</code>( <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Inputs either a <span class="SimpleMath">p</span>-group <span class="SimpleMath">G</span> and positive integer <span class="SimpleMath">n</span>, or else <span class="SimpleMath">n</span> terms of a minimal <span class="SimpleMath">Z_pG</span>-resolution <span class="SimpleMath">R</span> of <span class="SimpleMath">Z_p</span>. It returns a pair whose first entry is a minimal set of homogeneous generators for the cohomology ring <span class="SimpleMath">A=H^*(G,Z_p)</span> modulo all elements in degree greater than <span class="SimpleMath">n</span>. The second entry of the pair is a function <span class="SimpleMath">deg</span> which, when applied to a minimal generator, yields its degree.</p>
<p>WARNING: the following rule must be applied when multiplying generators <span class="SimpleMath">x_i</span> together. Only products of the form <span class="SimpleMath">x_1*(x_2*(x_3*(x_4*...)))</span> with <span class="SimpleMath">deg(x_i) ≤ deg(x_i+1)</span> should be computed (since the <span class="SimpleMath">x_i</span> belong to a structure constant algebra with only a partially defined structure constants table).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ModPCohomologyRing</code>( <var class="Arg">G</var>, <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ModPCohomologyRing</code>( <var class="Arg">G</var>, <var class="Arg">n</var>, <var class="Arg">level</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ModPCohomologyRing</code>( <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ModPCohomologyRing</code>( <var class="Arg">R</var>, <var class="Arg">level</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Inputs either a <span class="SimpleMath">p</span>-group <span class="SimpleMath">G</span> and positive integer <span class="SimpleMath">n</span>, or else <span class="SimpleMath">n</span> terms of a minimal <span class="SimpleMath">Z_pG</span>-resolution <span class="SimpleMath">R</span> of <span class="SimpleMath">Z_p</span>. It returns the cohomology ring <span class="SimpleMath">A=H^*(G,Z_p)</span> modulo all elements in degree greater than <span class="SimpleMath">n</span>.</p>
<p>The ring is returned as a structure constant algebra <span class="SimpleMath">A</span>.</p>
<p>The ring <span class="SimpleMath">A</span> is graded. It has a component <span class="SimpleMath">A!.degree(x)</span> which is a function returning the degree of each (homogeneous) element <span class="SimpleMath">x</span> in <span class="SimpleMath">GeneratorsOfAlgebra(A)</span>.</p>
<p>An optional input variable "level" can be set to one of the strings "medium" or "high". These settings determine parameters in the algorithm. The default setting is "medium".</p>
<p>When "level" is set to "high" the ring <span class="SimpleMath">A</span> is returned with a component <span class="SimpleMath">A!.niceBasis</span>. This component is a pair <span class="SimpleMath">[Coeff,Bas]</span>. Here <span class="SimpleMath">Bas</span> is a list of integer lists; a "nice" basis for the vector space <span class="SimpleMath">A</span> can be constructed using the command <span class="SimpleMath">List(Bas,x->Product(List(x,i->Basis(A)[i]))</span>. The coefficients of the canonical basis element <span class="SimpleMath">Basis(A)[i]</span> are stored as <span class="SimpleMath">Coeff[i]</span>.</p>
<p>If the ring <span class="SimpleMath">A</span> is computed using the setting "level"="medium" then the component <span class="SimpleMath">A!.niceBasis</span> can be added to <span class="SimpleMath">A</span> using the command <span class="SimpleMath">A:=ModPCohomologyRing_part_2(A)</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ModPRingGenerators</code>( <var class="Arg">A</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Inputs a mod <span class="SimpleMath">p</span> cohomology ring <span class="SimpleMath">A</span> (created using the preceeding function). It returns a minimal generating set for the ring <spanclass="SimpleMath">A</span>. Each generator is homogeneous.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Mod2CohomologyRingPresentation</code>( <var class="Arg">G</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Mod2CohomologyRingPresentation</code>( <var class="Arg">G</var>, <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Mod2CohomologyRingPresentation</code>( <var class="Arg">A</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Mod2CohomologyRingPresentation</code>( <var class="Arg">R</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>When applied to a finite <span class="SimpleMath">2</span>-group <span class="SimpleMath">G</span> this function returns a presentation for the mod 2 cohomology ring <span class="SimpleMath">H^*(G,Z_2)</span>. The Lyndon-Hochschild-Serre spectral sequence is used to prove that the presentation is correct.</p>
<p>When the function is applied to a <span class="SimpleMath">2</span>-group <span class="SimpleMath">G</span> and positive integer <span class="SimpleMath">n</span> the function first constructs <span class="SimpleMath">n</span> terms of a free <span class="SimpleMath">Z_2G</span>-resolution <span class="SimpleMath">R</span>, then constructs the finite-dimensional graded algebra <span class="SimpleMath">A=H^(*≤ n)(G,Z_2)</span>, and finally uses <span class="SimpleMath">A</span> to approximate a presentation for <span class="SimpleMath">H^*(G,Z_2)</span>. For "sufficiently large" the approximation will be a correct presentation for <span class="SimpleMath">H^*(G,Z_2)</span>.</p>
<p>Alternatively, the function can be applied directly to either the resolution <span class="SimpleMath">R</span> or graded algebra <span class="SimpleMath">A</span>.</p>
<p>This function was written by <strong class="button">Paul Smith</strong>. It uses the Singular commutative algebra package to handle the Lyndon-Hochschild-Serre spectral sequence.</p>