Regina Calculation Engine
|
Represents a finitely generated abelian group given by a chain complex. More...
#include <algebra/markedabeliangroup.h>
Public Member Functions | |
MarkedAbelianGroup (const MatrixInt &M, const MatrixInt &N) | |
Creates a marked abelian group from a chain complex. More... | |
MarkedAbelianGroup (const MatrixInt &M, const MatrixInt &N, const Integer &pcoeff) | |
Creates a marked abelian group from a chain complex with coefficients in Z_p. More... | |
MarkedAbelianGroup (unsigned long rk, const Integer &p) | |
Creates a free Z_p-module of a given rank using the direct sum of the standard chain complex 0 --> Z –p--> Z --> 0 . More... | |
MarkedAbelianGroup (const MarkedAbelianGroup &cloneMe) | |
Creates a clone of the given group. More... | |
bool | isChainComplex () const |
Determines whether or not the defining maps for this group actually give a chain complex. More... | |
unsigned long | rank () const |
Returns the rank of the group. More... | |
unsigned long | torsionRank (const Integer °ree) const |
Returns the rank in the group of the torsion term of given degree. More... | |
unsigned long | torsionRank (unsigned long degree) const |
Returns the rank in the group of the torsion term of given degree. More... | |
size_t | countInvariantFactors () const |
Returns the number of invariant factors that describe the torsion elements of this group. More... | |
unsigned long | minNumberOfGenerators () const |
Returns the minimum number of generators for the group. More... | |
const Integer & | invariantFactor (size_t index) const |
Returns the given invariant factor describing the torsion elements of this group. More... | |
bool | isTrivial () const |
Determines whether this is the trivial (zero) group. More... | |
bool | isZ () const |
Determines whether this is the infinite cyclic group (Z). More... | |
REGINA_INLINE_REQUIRED bool | isIsomorphicTo (const MarkedAbelianGroup &other) const |
Determines whether this and the given abelian group are isomorphic. More... | |
bool | equalTo (const MarkedAbelianGroup &other) const |
Determines whether or not the two MarkedAbelianGroups are identical, which means they have exactly the same presentation matrices. More... | |
void | writeTextShort (std::ostream &out, bool utf8=false) const |
The text representation will be of the form 3 Z + 4 Z_2 + Z_120 . More... | |
std::vector< Integer > | freeRep (unsigned long index) const |
Returns the requested free generator in the original chain complex defining the group. More... | |
std::vector< Integer > | torsionRep (unsigned long index) const |
Returns the requested generator of the torsion subgroup but represented in the original chain complex defining the group. More... | |
std::vector< Integer > | ccRep (const std::vector< Integer > &SNFRep) const |
A combination of freeRep and torsionRep, this routine takes a vector which represents an element in the group in the SNF coordinates and returns a corresponding vector in the original chain complex. More... | |
std::vector< Integer > | ccRep (unsigned long SNFRep) const |
Same as ccRep(const std::vector<Integer>&), but we assume you only want the chain complex representation of a standard basis vector from SNF coordinates. More... | |
std::vector< Integer > | cycleProjection (const std::vector< Integer > &ccelt) const |
Projects an element of the chain complex to the subspace of cycles. More... | |
std::vector< Integer > | cycleProjection (unsigned long ccindx) const |
Projects an element of the chain complex to the subspace of cycles. More... | |
bool | isCycle (const std::vector< Integer > &input) const |
Given a vector, determines if it represents a cycle in the chain complex. More... | |
std::vector< Integer > | boundaryMap (const std::vector< Integer > &CCrep) const |
Computes the differential of the given vector in the chain complex whose kernel is the cycles. More... | |
bool | isBoundary (const std::vector< Integer > &input) const |
Given a vector, determines if it represents a boundary in the chain complex. More... | |
std::vector< Integer > | writeAsBoundary (const std::vector< Integer > &input) const |
Expresses the given vector as a boundary in the chain complex (if the vector is indeed a boundary at all). More... | |
unsigned long | rankCC () const |
Returns the rank of the chain complex supporting the homology computation. More... | |
std::vector< Integer > | snfRep (const std::vector< Integer > &v) const |
Expresses the given vector as a combination of free and torsion generators. More... | |
unsigned long | minNumberCycleGens () const |
Returns the number of generators of ker(M), where M is one of the defining matrices of the chain complex. More... | |
std::vector< Integer > | cycleGen (unsigned long i) const |
Returns the ith generator of the cycles, i.e., the kernel of M in the chain complex. More... | |
const MatrixInt & | M () const |
Returns the ‘right’ matrix used in defining the chain complex. More... | |
const MatrixInt & | N () const |
Returns the ‘left’ matrix used in defining the chain complex. More... | |
const Integer & | coefficients () const |
Returns the coefficients used for the computation of homology. More... | |
std::unique_ptr< MarkedAbelianGroup > | torsionSubgroup () const |
Returns a MarkedAbelianGroup representing the torsion subgroup of this group. More... | |
std::unique_ptr< HomMarkedAbelianGroup > | torsionInclusion () const |
Returns a HomMarkedAbelianGroup representing the inclusion of the torsion subgroup into this group. More... | |
MarkedAbelianGroup & | operator= (const MarkedAbelianGroup &)=delete |
void | writeTextLong (std::ostream &out) const |
A default implementation for detailed output. More... | |
std::string | str () const |
Returns a short text representation of this object. More... | |
std::string | utf8 () const |
Returns a short text representation of this object using unicode characters. More... | |
std::string | detail () const |
Returns a detailed text representation of this object. More... | |
Friends | |
class | HomMarkedAbelianGroup |
Represents a finitely generated abelian group given by a chain complex.
This class is initialized with a chain complex. The chain complex is given in terms of two integer matrices M and N such that M*N=0. The abelian group is the kernel of M mod the image of N.
In other words, we are computing the homology of the chain complex Z^a –N--> Z^b –M--> Z^c
where a=N.columns(), M.columns()=b=N.rows(), and c=M.rows(). An additional constructor allows one to take the homology with coefficients in an arbitrary cyclic group.
This class allows one to retrieve the invariant factors, the rank, and the corresponding vectors in the kernel of M. Moreover, given a vector in the kernel of M, it decribes the homology class of the vector (the free part, and its position in the invariant factors).
The purpose of this class is to allow one to not only represent homology groups, but it gives coordinates on the group allowing for the construction of homomorphisms, and keeping track of subgroups.
Some routines in this class refer to the internal presentation matrix. This is a proper presentation matrix for the abelian group, and is created by constructing the product MRBi() * N, and then removing the first rankM() rows.
Optimise (long-term): Look at using sparse matrices for storage of SNF and the like.
Testsuite additions: isBoundary(), boundaryMap(), writeAsBdry(), cycleGen().
|
inlineinherited |
A default implementation for detailed output.
This routine simply calls T::writeTextShort() and appends a final newline.
out | the output stream to which to write. |