A-infinity Algebra Structures on Group Cohomology#
As described in [Keller, 2001, Keller, 2002], an \(A\infty\)-algebra structure can be induced on \(H^{*}A\) for any differential graded algebra \(A\). Consider \(\hbox{Ext}^{*}_R(S,S)\), for \(R\) a quiver algebra quotient and \(S\) the direct sum of all simple \(R\)-modules. Regarded as the homology of the endomorphism algebra of a projective resolution of \(S\), Keller further demonstrates how this additional algebraic structure allows recovery of \(R\) from \(\hbox{Ext}^{*}_R(S,S)\).
An \(A\infty\)-algebra structure on a vector space \(V\) consists of higher structural operations \(m_1,\dots\) defined as \(m_i:V^{\otimes i}\to V\) fulfilling the Stasheff axioms for all \(n\):
An \(A\infty\)-algebra homomorphism from an \(A\infty\)-algebra \(A\) to an \(A\infty\)-algebra \(B\) is a family \(f_i\) of maps \(A^{\otimes i}\to B\) such that the homomorphism axioms hold for all \(n\): \(\sum_{i+j-1=n,0\leq k\leq n-j} \pm f_i(a_1,\dots,a_{k-1},m_j(a_k,\dots,a_{k+j}),a_{k+j+1},\dots,a_n) =\)\(\sum_{i_1+\dots+i_r=n} \pm m_r(f_{i_1}(a_1,\dots,a_{i_1}),\dots,f_{i_r}(a_{n-i_r+1},\dots,a_n))\)
According to a theorem fundamental to the algebraic uses of \(A\infty\)-techniques, for a differential graded algebra \(A\), there is an \(A\infty\)-structure on \(H^{*}A\) and an \(A\infty\)-algebra homomorphism \(f:H^{*}A\to A\) such that \(f_1\) is a quasiisomorphism of differential graded algebras, and induced by the identity map on \(H^{*}A\).
A blackbox method of calculation can be based on Kadeishvilis’ proof of this statement, using the homomorphism axioms to recursively calculate any specific values that are needed, and choosing the \(m_i\) and \(f_i\) in such a way as not to violate the axioms. The following package implements this method for the special case of \(\hbox{Ext}^{*}_{kG}(k,k)\) for \(G\) a \(p\)-group, \(k\) a prime field of characteristic \(p\) and also the one-dimensional unique simple \(kG\)-module.
- AInfinityRecord(G, n): Grp, RngIntElt -> Rec#
Constructs a record carrying all relevant information to calculate \(A\infty\)-operations on a group cohomology ring. Among the data carried can be found the cohomology ring in
R, the cohomology ring quotient inS, the projective resolution used inP, the simple module resolved inkand the basic algebra inA.
- MasseyProduct(Aoo, terms): Rec, SeqEnum[RngElt] -> RngElt#
- HighProduct(Aoo, terms): Rec, SeqEnum[RngElt] -> RngElt#
Given an \(A\infty\) object \(Aoo\) corresponding to a group cohomology ring, this intrinsic calculates the structure map \(m_i(t_1\otimes\dots\otimes t_i)\), where the \(i\) give the length of terms, and \(t_1,\dots,t_i\) are the elements of terms.
- HighMap(Aoo, terms): Rec, SeqEnum[RngElt] -> MapChn#
Given an \(A\infty\) object \(Aoo\) corresponding to a group cohomology ring, this intrinsic calculates the value of an \(A\infty\)-quasiisomorphism \(f\) at the point \(t_1\otimes\dots\otimes t_i\), where the \(i\) gives the length of terms, and \(t_1,\dots,t_i\) are the elements of terms.
- Example: A-infinity mod 2 (ex-b55050)#
The \(A\infty\)-structures on the cohomology rings of cyclic \(p\)-groups are well known examples in the literature: the \(A\infty\)-structure on \(H^{*}(C_n,F_2)\) has one single higher structure nontrivial operation, namely \(m_n\), which takes any \(n\)-tuple of odd coclasses to the even coclass of appropriate degree.
In order to verify this for a specific example, we start by constructing an \(A\infty\) record that contains all relevant information for the cohomology ring.
> Aoo := AInfinityRecord(CyclicGroup(4),10); > S<x,y> := Aoo`S; > HighProduct(Aoo,[x,x,x,x]); y > HighMap(Aoo,[x,x,x,x]); Basic algebra chain map of degree -1
- Example: A-infinity mod 3 (ex-21e1bf)#
The code as written handles odd characteristics well, with the sign choices featured in Kadeishvilis article [Kadeishvili, 1980] embedded in the code.
> Aoo := AInfinityRecord(CyclicGroup(3),10); > S<x,y> := Aoo`S; > HighProduct(Aoo,[x,x,x]); y > HighMap(Aoo,[x,x,x]); Basic algebra chain map of degree -1
Homological Algebra Toolkit#
For the computation of \(A\infty\)-structures, several methods are used that would invite a wider use in a generic homological algebra toolkit.
- ActionMatrix(A, x): AlgBas, Mtrx -> ModMatFldElt#
Produces a matrix of the right action of the Basic algebra element described by \(x\) in the Basic algebra \(A\).
- CohomologyRingQuotient(CR): Rec -> Rng, Map#
Computes the actual cohomology ring as a quotient ring of a multivariate polynomial ring from a cohomology ring record.
- LiftToChainmap(P, f, d): ModCpx, Mtrx, RngIntElt -> MapChn#
Lifts the function described by \(f\) to a chain map from \(P\) to \(P\) of degree \(d\).
- NullHomotopy(f): MapChn -> MapChn#
Constructs a null homotopy of the null homotopic chain map \(f\). If \(f\) is not null homotopic, the function will throw an error message, since in that case some of the equations encountered on the way are not solvable.
- IsNullHomotopy(f, H): MapChn, MapChn -> BoolElt#
Confirms that \(H\) is a null homotopy of \(f\), in other words that \(f=dH-Hd\), with \(d\) the differential of the corresponding chain complexes.
- ChainmapToCohomology(f, CR): MapChn, Rec -> RngElt#
Takes a chain map \(f\) and returns the element in the cohomology quotient ring to which the chain map corresponds.
- CohomologyToChainmap(xi, CR, P): RngElt, Rec, ModCpx -> MapChn#
Takes an element \(xi\) of a cohomology quotient ring of the cohomology ring record \(CR\) and a projective resolution corresponding to that cohomology ring, and returns a chain map in the coclass represented by \(xi\).
- Example: Nullhomotopy (ex-ca2dae)#
To illustrate the code that generates null homotopies, we consider the cohomology ring of a cyclic group, and pick out chain map representatives for the degree \(1\) coclass. Although this squares to zero, the corresponding chainmaps do not compose to the zero chainmap.
> A := BasicAlgebra(CyclicGroup(4)); > k := SimpleModule(A,1); > P := ProjectiveResolution(k,5); > R := CohomologyRing(k,5); > S<x,y> := CohomologyRingQuotient(R); > xi := CohomologyToChainmap(x,R,P); > x*x; 0 > IsZero(xi*xi); false > ModuleMaps(xi*xi); [* [0 0 1 0] [0 0 0 1] [0 0 0 0] [0 0 0 0], [0 0 1 0] [0 0 0 1] [0 0 0 0] [0 0 0 0], [0 0 1 0] [0 0 0 1] [0 0 0 0] [0 0 0 0], [0 0 1 0] [0 0 0 1] [0 0 0 0] [0 0 0 0] *] > H := NullHomotopy(xi*xi); > ModuleMaps(H); [* [0 0 0 0] [0 0 0 0] [0 0 0 0] [0 0 0 0], [0 1 0 0] [0 0 1 0] [0 0 0 1] [0 0 0 0], [0 0 0 0] [0 0 0 0] [0 0 0 0] [0 0 0 0], [0 1 0 0] [0 0 1 0] [0 0 0 1] [0 0 0 0], [0 0 0 0] [0 0 0 0] [0 0 0 0] [0 0 0 0] *] > IsNullHomotopy(xi*xi,H); true