<Chapter><Heading> Cohomology ring structure</Heading> <Section><Heading> &nbsp;</Heading> 
<ManSection> <Func Name="IntegralCupProduct" Arg="R,u,v,p,q"/> <Func Name="IntegralCupProduct" Arg="R,u,v,p,q,P,Q,N"/> <Description> <P/> (Various functions used to construct the cup product are also <URL Text="available">../www/SideLinks/CR_functions.html</URL>.) <P/> Inputs a <M>ZG</M>-resolution <M>R</M>, a vector <M>u</M> representing an element in <M>H^p(G,Z)</M>, a vector <M>v</M> representing an element in <M>H^q(G,Z)</M> and the two integers <M>p,q</M> &tgt;<M> 0</M>. It returns a vector <M>w</M> representing the cup product <M>u\cdot v</M> in <M>H^{p+q}(G,Z)</M>. This product is associative and <M>u\cdot v = (-1)pqv\cdot u</M> . It provides <M>H^\ast(G,Z)</M> with the structure of an anti-commutative graded ring. This function implements the cup product for characteristic 0 only. <P/> The resolution <M>R</M> needs a contracting homotopy. <P/> To save the function from having to calculate the abelian groups <M>H^n(G,Z)</M> additional input variables can be used in the form <M>IntegralCupProduct(R,u,v,p,q,P,Q,N)</M> , where <List> <Item> <M>P</M> is the output of the command <M>CR_CocyclesAndCoboundaries(R,p,true)</M> </Item> <Item> <M>Q</M> is the output of the command <M>CR_CocyclesAndCoboundaries(R,q,true)</M></Item> <Item><M>N</M> is the output of the command <M>CR_CocyclesAndCoboundaries(R,p+q,true)</M> . </Item> </List> <P/><B>Examples:</B> <URL><Link>../tutorial/chap7.html</Link><LinkText>1</LinkText></URL>&nbsp;, <URL><Link>../www/SideLinks/About/aboutCohomologyRings.html</Link><LinkText>2</LinkText></URL>&nbsp;
</Description> </ManSection> 
<ManSection> <Func Name="IntegralRingGenerators" Arg="R,n"/> <Description> <P/> Inputs at least <M>n+1</M> terms of a <M>ZG</M>-resolution and integer <M>n</M>&tgt; <M>0</M>. It returns a minimal list of cohomology classes in <M>H^n(G,Z)</M> which, together with all cup products of lower degree classes, generate the group <M>H^n(G,Z)</M> . <P/> (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> <URL><Link>../tutorial/chap1.html</Link><LinkText>1</LinkText></URL>&nbsp;, <URL><Link>../www/SideLinks/About/aboutCohomologyRings.html</Link><LinkText>2</LinkText></URL>&nbsp;
</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</M> terms of a minimal <M>Z_pG</M>-resolution <M>R</M> of <M>Z_p</M>. It returns a pair whose first entry is a minimal set of homogeneous generators for the cohomology ring <M>A=H^*(G,Z_p)</M> modulo all elements in degree greater than <M>n</M>. The second entry of the pair is a function <M>deg</M> which, when applied to a minimal generator, yields its degree. <P/> 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="G,n"/> <Func Name="ModPCohomologyRing" Arg="G,n,level"/> <Func Name="ModPCohomologyRing" Arg="R"/> <Func Name="ModPCohomologyRing" Arg="R,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>Z_pG</M>-resolution <M>R</M> of <M>Z_p</M>. It returns the cohomology ring <M>A=H^*(G,Z_p)</M> modulo all elements in degree greater than <M>n</M>. <P/> The ring is returned as a structure constant algebra <M>A</M>. <P/> The ring <M>A</M> is graded. It has a component <M>A!.degree(x)</M> which is a function returning the degree of each (homogeneous) element <M>x</M> in <M>GeneratorsOfAlgebra(A)</M>. <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/> When "level" is set to "high" the ring <M>A</M> is returned with a component <M>A!.niceBasis</M>. 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 <M>List(Bas,x->Product(List(x,i->Basis(A)[i]))</M>. The coefficients of the canonical basis element <M>Basis(A)[i]</M> are stored as <M>Coeff[i]</M>. <P/> If the ring <M>A</M> is computed using the setting "level"="medium" then the component <M>A!.niceBasis</M> can be added to <M>A</M> using the command <M> A:=ModPCohomologyRing_part_2(A) </M>. <P/><B>Examples:</B> <URL><Link>../tutorial/chap8.html</Link><LinkText>1</LinkText></URL>&nbsp;, <URL><Link>../www/SideLinks/About/aboutModPRings.html</Link><LinkText>2</LinkText></URL>&nbsp;
</Description> </ManSection> 
<ManSection> <Func Name="ModPRingGenerators" Arg="A"/> <Description> <P/> Inputs a mod <M>p</M> cohomology ring <M>A</M> (created using the preceeding function). It returns a minimal generating set for the ring <M>A</M>. Each generator is homogeneous. <P/><B>Examples:</B> <URL><Link>../tutorial/chap8.html</Link><LinkText>1</LinkText></URL>&nbsp;, <URL><Link>../www/SideLinks/About/aboutModPRings.html</Link><LinkText>2</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 2 cohomology ring <M>H^*(G,Z_2)</M>. The Lyndon-Hochschild-Serre spectral sequence is used to prove that the presentation is correct. <P/> When the function is applied to a <M>2</M>-group <M>G</M> and positive integer <M>n</M> the function first constructs <M>n</M> terms of a free <M>Z_2G</M>-resolution <M>R</M>, then constructs the finite-dimensional graded algebra <M>A=H^(*\le n)(G,Z_2)</M>, and finally uses <M>A</M> to approximate a presentation for <M>H^*(G,Z_2)</M>. For "sufficiently large" the approximation will be a correct presentation for <M>H^*(G,Z_2)</M>. <P/> Alternatively, the function can be applied directly to either the resolution <M>R</M> or graded algebra <M>A</M>. <P/>This function was written by <B>Paul Smith</B>. It uses the Singular commutative algebra package to handle the Lyndon-Hochschild-Serre spectral sequence. <P/><B>Examples:</B> <URL><Link>../tutorial/chap8.html</Link><LinkText>1</LinkText></URL>&nbsp;, <URL><Link>../www/SideLinks/About/aboutIntro.html</Link><LinkText>2</LinkText></URL>&nbsp;
</Description> </ManSection> </Section> </Chapter>