regina::MarkedAbelianGroup Class Reference
Algebraic Structures

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

`#include <algebra/markedabeliangroup.h>`

Inheritance diagram for regina::MarkedAbelianGroup:

## 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 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...
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...
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.

  Testsuite additions: isBoundary(), boundaryMap(), writeAsBdry(), cycleGen().

## Member Function Documentation

## detail()

std::string regina::Output< MarkedAbelianGroup , supportsUtf8 >::detail | ( |  | ) | const

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 | ( |  | ) | const

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 | ( |  | ) | const

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

inline inherited

A default implementation for detailed output.

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

Python:\n Not present.

Parameters

  out | the output stream to which to write.

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

- algebra/markedabeliangroup.h

Copyright © 1999-2016, 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).