Regina Calculation Engine
Public Member Functions | Friends | List of all members
regina::MarkedAbelianGroup Class Reference

Represents a finitely generated abelian group given by a chain complex. More...

#include <algebra/markedabeliangroup.h>

Inheritance diagram for regina::MarkedAbelianGroup:
regina::ShortOutput< MarkedAbelianGroup, true > regina::Output< MarkedAbelianGroup, supportsUtf8 >

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 &degree) 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 IntegerinvariantFactor (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< IntegerfreeRep (unsigned long index) const
 Returns the requested free generator in the original chain complex defining the group. More...
 
std::vector< IntegertorsionRep (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< IntegerccRep (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< IntegerccRep (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< IntegercycleProjection (const std::vector< Integer > &ccelt) const
 Projects an element of the chain complex to the subspace of cycles. More...
 
std::vector< IntegercycleProjection (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< IntegerboundaryMap (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< IntegerwriteAsBoundary (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< IntegersnfRep (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< IntegercycleGen (unsigned long i) const
 Returns the ith generator of the cycles, i.e., the kernel of M in the chain complex. More...
 
const MatrixIntM () const
 Returns the ‘right’ matrix used in defining the chain complex. More...
 
const MatrixIntN () const
 Returns the ‘left’ matrix used in defining the chain complex. More...
 
const Integercoefficients () const
 Returns the coefficients used for the computation of homology. More...
 
std::unique_ptr< MarkedAbelianGrouptorsionSubgroup () const
 Returns a MarkedAbelianGroup representing the torsion subgroup of this group. More...
 
std::unique_ptr< HomMarkedAbelianGrouptorsionInclusion () const
 Returns a HomMarkedAbelianGroup representing the inclusion of the torsion subgroup into this group. More...
 
MarkedAbelianGroupoperator= (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
 

Detailed Description

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.

Author
Ryan Budney
Todo:
Optimise (long-term): Look at using sparse matrices for storage of SNF and the like.
Todo:
Testsuite additions: isBoundary(), boundaryMap(), writeAsBdry(), cycleGen().

Member Function Documentation

◆ detail()

std::string regina::Output< MarkedAbelianGroup , supportsUtf8 >::detail
inherited

Returns a detailed text representation of this object.

This text may span many lines, and should provide the user with all the information they could want. It should be human-readable, should not contain extremely long lines (which cause problems for users reading the output in a terminal), and should end with a final newline. There are no restrictions on the underlying character set.

Returns
a detailed text representation of this object.

◆ str()

std::string regina::Output< MarkedAbelianGroup , supportsUtf8 >::str
inherited

Returns a short text representation of this object.

This text should be human-readable, should fit on a single line, and should not end with a newline. Where possible, it should use plain ASCII characters.

Python:\n In addition to str(), this is also used as the
Python "stringification" function str().
Returns
a short text representation of this object.

◆ utf8()

std::string regina::Output< MarkedAbelianGroup , supportsUtf8 >::utf8
inherited

Returns a short text representation of this object using unicode characters.

Like str(), this text should be human-readable, should fit on a single line, and should not end with a newline. In addition, it may use unicode characters to make the output more pleasant to read. This string will be encoded in UTF-8.

Returns
a short text representation of this object.

◆ writeTextLong()

void regina::ShortOutput< MarkedAbelianGroup , supportsUtf8 >::writeTextLong ( std::ostream &  out) const
inlineinherited

A default implementation for detailed output.

This routine simply calls T::writeTextShort() and appends a final newline.

Python:\n Not present.
Parameters
outthe output stream to which to write.

The documentation for this class was generated from the following file:

Copyright © 1999-2020, The Regina development team
This software is released under the GNU General Public License, with some additional permissions; see the source code for details.
For further information, or to submit a bug or other problem, please contact Ben Burton (bab@maths.uq.edu.au).