Complexes of Modules
Complexes of modules are a fundamental object in homological algebra. Magma supports the type ModCpx representing a complex of modules. Conceptually, a complex is an infinite sequence of modules, indexed by integers, with maps between successive modules such that the composition of any two maps is zero. Complexes are often written
where the map \(f_n\) has domain \(M_n\) and codomain \(M_{n-1}\). The indices on the modules and maps decrease to the right. In practice, Magma requires all but a finite number of the modules and maps to be zero.
The homomorphism from \(M_n\) to \(M_{n-1}\) in the complex is the \(n^{th}\) boundary map of the complex. The homology of the complex in degree \(n\) is the quotient of the kernel of the \(n^{th}\) boundary map by the image of the boundary map of degree \(n-1\). Magma computes the homology only if both boundary maps are defined. A complex is said to be exact if the image of each map is equal to the kernel of the next.
Currently, there are two types of modules over which complexes are supported:
- (a)
Modules over a basic algebra \(A\) (see Chapter Basic Algebras);
- (b)
Modules over a multivariate polynomial ring over a field (see Chapter Modules over Multivariate Rings and in particular the function
FreeResolution). Most of the functions in this chapter work for either type of module but exceptions are noted.
Creation
- Complex(L, d): List, RngIntElt -> ModCpx
Given a list \(L\) of maps between successive \(A\)-modules create the corresponding complex. The last term of the complex has degree \(d\). This function returns an error if the maps don’t actually form a complex.
- Complex(f, d): Map, RngIntElt -> ModCpx
Given a map \(f\) between \(A\)-modules \(M\) and \(N\), form the complex consisting of the two term complex whose only map is \(f\). The term \(N\) is in degree \(d\).
- ZeroComplex(A, m, n): AlgBas, RngIntElt, RngIntElt -> ModCpx
Given a basic algebra \(A\) and integers \(m\) and \(n\) such that \(m > n\), create a complex of modules over the basic algebra \(A\), starting with a term of degree \(m\) and ending with a term of degree \(n\), where all the modules and maps are zero.
- Dual(C): ModCpx -> ModCpx
- Dual(C, n): ModCpx, RngIntElt -> ModCpx
The dual of the complex \(C\) over a basic algebra \(A\) as a complex over the opposite algebra of \(A\). If an integer \(n\) is supplied then the last term of the dual complex is in degree \(n\). Otherwise, the last term of the dual complex is in degree 0.
Subcomplexes and Quotient Complexes
Let \(C\) be a complex of \(A\)-modules, \(M_m, \ldots, M_n\). A subcomplex \(S\) of \(C\) is a complex whose terms are submodules of the terms of \(C\) and whose maps are the restrictions of the maps of \(C\) to the terms of \(S\).
- sub< C | Q >: ModCpx, SeqEnum[ModAlg] -> ModCpx, MapChn
- sub< C | L >: ModCpx, List -> ModCpx, MapChn
Given a complex \(C\) and a sequence \(Q\) of submodules of the terms of \(C\), returns the smallest subcomplex whose terms contain the modules in \(Q\). The input can also be a list \(L\) of sequences of elements of the successive terms of \(C\). In this case the submodules generated by the elements is computed. The function also returns the chain map giving the inclusion of the subcomplex in \(C\).
- RandomSubcomplex(C, Q): ModCpx, SeqEnum -> ModCpx, MapChn
Given a chain complex \(C\) over a basic algebra in degrees \(a\) to \(a-t+1\) and a sequence \(Q = [q_1, \ldots, q_t]\) of natural numbers, the function creates the minimal chain complex whose term in degree \(a-i+1\) is a submodule generated by \(q_i\) random elements of the term in degree \(a-i+1\) of \(C\). The function also returns the chain map that is the inclusion of the subcomplex into \(C\).
- quo< C | D >: ModCpx, ModCpx -> ModCpx
- quo< C | S >: ModCpx, SeqEnum[ModAlg] -> ModCpx
- quo< C | L >: ModCpx, List -> ModCpx
Given a complex \(C\) and a subcomplex \(D\) of \(C\), returns the quotient complex C/D together with the natural quotient map. If given as a sequence \(S\) of submodules of the terms of \(C\) or a list \(L\) of sequences of elements of the terms of \(C\), then the submodule generated by \(S\) or \(L\) is created and the quotient computed. The function also returns the chain map of \(C\) on the quotient.
Access Functions
- Degrees(C): ModCpx -> RngIntElt
Returns the first and last degrees of the defined terms of the complex \(C\).
- Algebra(C): ModCpx -> AlgBas
Given a complex \(C\) over a basic algebra \(A\), this function returns the algebra \(A\).
- BoundaryMap(C, n): ModCpx, RngIntElt -> ModMatRngElt
Returns the boundary map of the complex \(C\) from the term of degree \(n\) to the term of degree \(n-1\).
- DimensionsOfHomology(C): ModCpx -> SeqEnum
Returns the list of the dimensions of the homology groups of the complex \(C\).
- DimensionOfHomology(C, n): ModCpx, RngIntElt -> RngIntElt
Returns the dimension of the homology group of the complex \(C\) in degree \(n\).
Elementary Operations
- DirectSum(C, D): ModCpx, ModCpx -> ModCpx
Returns the direct sum of the complex \(C\) and the complex \(D\).
- Homology(C): ModCpx -> SeqEnum
- HomologyOfChainComplex(C): ModCpx -> SeqEnum
The sequence of homology groups of the complex \(C\) as a sequence of modules.
- Homology(C, n): ModCpx, RngIntElt -> SeqEnum
Returns the homology group in degree \(n\) of the complex \(C\), as an \(A\)-module.
- Prune(C): ModCpx -> ModCpx
Returns the complex that consists of the terms of \(C\) with the right end term (term of lowest degree) removed.
- Prune(C, n): ModCpx, RngIntElt -> ModCpx
Returns the complex that consists of the terms of \(C\) with \(n\) terms removed from the right end.
- Preprune(C): ModCpx -> ModCpx
Returns the complex that consists of the terms of \(C\) with the left end term (term of highest degree) removed.
- Preprune(C, n): ModCpx, RngIntElt -> ModCpx
Returns the complex that consists of the terms of \(C\) with \(n\) terms removed from the left end.
- Shift(C, n): ModCpx, RngIntElt -> ModCpx
Given the complex \(C\) in degrees \(r\) to \(s\), returns the complex in shifted degrees \(r+n\) to \(s+n\). The integer \(n\) may be either positive or negative. The maps in the complex are all multiplied by the scalar \((-1)^n\).
- ShiftToDegreeZero(C): ModCpx -> ModCpx
Given the complex \(C\), returns the shift of \(C\) so that the last term, the term of lowest degree, is in degree 0.
- Splice(C, D): ModCpx, ModCpx -> ModCpx
Given two complexes \(C\) and \(D\) over the same basic algebra, such that the end term of \(C\) coincides with the initial term of \(D\), form the complex that corresponds to the concatenation of \(C\) and \(D\) (as sequences of maps) This function checks that the resulting sequence of maps forms a complex. The degrees of complex \(D\) remain unchanged while the degrees of the terms in complex \(C\) are changed to fit.
Extensions
The following are elementary operations related to extending complexes
- LeftExactExtension(C): ModCpx -> ModCpx
Given a complex \(C\) of modules over a basic algebra, returns the complex of length one greater that is obtained by adjoining the inclusion map from the kernel of the boundary map in highest degree to the term of highest degree in \(C\).
- RightExactExtension(C): ModCpx -> ModCpx
Given a complex \(C\) of modules over a basic algebra, returns the complex of length one greater that is obtained by adjoining the quotient map to the cokernel of the boundary map of lowest degree from the term of lowest degree in \(C\).
- ExactExtension(C): ModCpx -> ModCpx
Returns the left and right exact extensions of the complex \(C\).
- LeftZeroExtension(C): ModCpx -> ModCpx
- LeftZeroExtension(C, n): ModCpx, RngIntElt -> ModCpx
Given a complex \(C\) of modules over a basic algebra, returns the complex of length one greater that is obtained by adjoining the zero map from the zero module to the term of highest degree in the complex. If a natural number \(n\) is included in the input then the operation is performed \(n\) times.
- RightZeroExtension(C): ModCpx -> ModCpx
- RightZeroExtension(C, n): ModCpx, RngIntElt -> ModCpx
Given a complex \(C\) of modules over a basic algebra, returns the complex of length one greater that is obtained by adjoining the zero map to the zero module from the term of lowest degree in the complex. If a natural number \(n\) is included in the input then the operation is performed \(n\) times.
- EqualizeDegrees(C, D): ModCpx, ModCpx -> ModCpx, ModCpx
- EqualizeDegrees(Q): SeqEnum -> SeqEnum
Given complexes \(C\) and \(D\) over the same algebra, the function returns the complexes obtained by taking zero extensions of \(C\) and \(D\), if necessary, so that both complexes have the same degrees. The input can also be given as a sequence \(Q\) of complexes, in which case the function returns the sequence of complexes obtained by taking zero extensions of the elements of \(Q\), if necessary, until all of the elements of the sequence have the same degrees.
Predicates
The following functions return a Boolean value.
- IsExact(C): ModComplex -> BoolElt
Returns
trueif and only if the complex \(C\) is an exact sequence, i.e. the image of each map in \(C\) is equal to the kernel of the succeeding map (with the obvious exceptions of the first and last maps of the complex). If the complex has only two terms then this is true trivially.
- IsShortExactSequence(C): ModCpx -> BoolElt, RngIntElt
Returns
trueif the complex \(C\) consists of a short exact sequence together with other terms that are zero. The function returns also the degrees of the complex of nonzero terms.
- IsExact(C, n): ModCpx, RngIntElt -> BoolElt
Returns
trueif and only if the complex \(C\) is an exact sequence in degree \(n\), i.e. the image of the map in \(C\) into the term of degree \(n\) is equal to the kernel of the succeeding map.
- IsZeroComplex(C): ModCpx -> BoolElt
Returns
trueif and only if the complex \(C\) is composed entirely of zero modules and maps.
- IsZeroMap(C, n): ModCpx, RngIntElt -> BoolElt
Returns
trueif and only if the boundary map in degree \(n\) of the complex \(C\) is the zero map.
- IsZeroTerm(C, n): ModCpx, RngIntElt -> BoolElt
Returns
trueif and only if the term in degree \(n\) of the complex \(C\) is the zero object.
- Example: Complexes over a Quiver Algebra (ex-bb43ae)
Run in calculator (opens in a new tab)
We construct the quiver algebra of a quiver with three nodes and three arrows going from node 1 to node 2, from 2 to 1, and 2 to 3. The relation is that \((ab)^3a =0\) where \(a\) is the first arrow and \(b\) is the second. Then we construct projective and injective resolutions of the first simple module.
> ff := GF(8); > FA<e1,e2,e3,a,b,c> := FreeAlgebra(ff,6); > rrr := [a*b*a*b*a*b*a]; > D := BasicAlgebra(FA,rrr,3,[<1,2>,<2,1>,<2,3>]); > D; Basic algebra of dimension 23 over GF(2^3) Number of projective modules: 3 Number of generators: 6 > DimensionsOfProjectiveModules(D); [ 10, 12, 1 ] > DimensionsOfInjectiveModules(D); [ 8, 7, 8 ]
Here is the opposite algebra:
> OD := OppositeAlgebra(D); reverse trees > OD; Basic algebra of dimension 23 over GF(2^3) Number of projective modules: 3 Number of generators: 6 > s1 := SimpleModule(D,1); > P,mu := ProjectiveResolution(s1,7); > P; Basic algebra complex with terms of degree 7 down to 0 Dimensions of terms: 12 12 12 12 12 12 12 10 > Q,nu := InjectiveResolution(s1,7); > Q; Basic algebra complex with terms of degree 0 down to -7 Dimensions of terms: 8 7 0 0 0 0 0 0
Note that the projective and injective resolutions are complexes with the appropriate augmentation and coaugmentation maps. First we form the two term complex whose boundary map is the composition of the augmentation and coaugmentation maps.
> theta := MapToMatrix(hom<Term(P,0)-> Term(Q,0)|mu*nu>); > E := Complex(theta,0);
Then we splice all of this together.
> R := Splice(P,E); > S := Splice(R,Q); > S; Basic algebra complex with terms of degree 8 down to -7 Dimensions of terms: 12 12 12 12 12 12 12 10 8 7 0 0 0 0 0 0