regina::NHomologicalData Class Reference
Algebraic Structures

Data type that deals with all the detailed homological information in a manifold. More...

`#include <triangulation/nhomologicaldata.h>`

Inheritance diagram for regina::NHomologicalData:

## Public Member Functions

| NHomologicalData (const NTriangulation &input)
| Takes as input a triangulation. More...
| NHomologicalData (const NHomologicalData &h)
| Copy constructor. More...
virtual | ~NHomologicalData ()
| Destructor. More...
virtual void | writeTextShort (std::ostream &out) const
| Short text representation as required by SharableObject. More...
const NMarkedAbelianGroup & | getHomology (unsigned q)
| This routine gives access to the manifold's homology computed with the regular CW-decomposition. More...
const NMarkedAbelianGroup & | getBdryHomology (unsigned q)
| This routine gives access to the homology of the boundary of the manifold, computed with the regular CW-decomposition. More...
const NHomMarkedAbelianGroup & | getBdryHomologyMap (unsigned q)
| This routine gives access to the homomorphism from the homology of the boundary to the homology of the manifold. More...
const NMarkedAbelianGroup & | getDualHomology (unsigned q)
| This routine gives access to the manifold's homology computed with the dual CW-decomposition. More...
const NHomMarkedAbelianGroup & | getH1CellAp ()
| Returns the isomorphism from getDualHomology(1) to getHomology(1) given by a cellular approximation to the identity map on the manifold. More...
unsigned long | getNumStandardCells (unsigned dimension)
| Returns the number of cells of the given dimension in the standard genuine CW-decomposition of the manifold. More...
unsigned long | getNumDualCells (unsigned dimension)
| Returns the number of cells of the given dimension in the dual CW-decomposition of the manifold. More...
unsigned long | getNumBdryCells (unsigned dimension)
| Returns the number of cells of the given dimension in the standard CW-decomposition of the boundary of the manifold. More...
long | getEulerChar ()
| The proper Euler characteristic of the manifold, computed from the dual CW-decomposition. More...
const std::vector< std::pair < NLargeInteger, std::vector < unsigned long > > > & | getTorsionRankVector ()
| Returns the torsion form rank vector. More...
const std::string & | getTorsionRankVectorString ()
| Same as getTorsionRankVector() but returns as a human-readable string. More...
const std::vector < NLargeInteger > & | getTorsionSigmaVector ()
| Returns the 2-torsion sigma vector. More...
const std::string & | getTorsionSigmaVectorString ()
| Same as getTorsionSigmaVector() but returns as a human-readable string. More...
const std::vector< std::pair < NLargeInteger, std::vector < int > > > & | getTorsionLegendreSymbolVector ()
| Returns the odd p-torsion Legendre symbol vector. More...
const std::string & | getTorsionLegendreSymbolVectorString ()
| Same as getTorsionLegendreSymbolVector() but returns as a human-readable string. More...
bool | formIsHyperbolic ()
| Returns true iff torsion linking form is `hyperbolic' in the linking-form sense of the word. More...
bool | formIsSplit ()
| Returns true iff the torsion linking form is split. More...
bool | formSatKK ()
| Returns true iff the torsion linking form satisfies the Kawauchi-Kojima 2-torsion condition. More...
const std::string & | getEmbeddabilityComment ()
| Returns a comment on whether the manifold might embed in a homology 3-sphere or 4-sphere. More...
Public Member Functions inherited from regina::ShareableObject
| ShareableObject ()
| Default constructor that does nothing. More...
virtual | ~ShareableObject ()
| Default destructor that does nothing. More...
virtual void | writeTextLong (std::ostream &out) const
| Writes this object in long text format to the given output stream. More...
std::string | str () const
| Returns the output from writeTextShort() as a string. More...
std::string | toString () const
| A deprecated alias for str(), which returns the output from writeTextShort() as a string. More...
std::string | detail () const
| Returns the output from writeTextLong() as a string. More...
std::string | toStringLong () const
| A deprecated alias for detail(), which returns the output from writeTextLong() as a string. More...

## Additional Inherited Members

Protected Member Functions inherited from regina::boost::noncopyable
| noncopyable ()
| A constructor which does nothing. More...
| ~noncopyable ()
| A destructor which does nothing. More...

## Detailed Description

Data type that deals with all the detailed homological information in a manifold.

This information includes:

- the manifold's homology;
- the boundary's homology;
- the map from boundary -> manifold;
- the dual cellular homology;
- the isomorphism on H1 from the dual cellular homology to the regular cellular homology;
- the H1 torsion form;
- the Kawauchi-Kojima invariants of torsion linking forms.

This class takes a "least effort" approach to all computations. It only computes what is neccessary for your requests. It also keeps a record of all previous computations you've made. If a computation can be sped up by not recomputing some data, it takes that short-cut.

All these algorithms use two transverse CW decompositions of the manifold. They correspond to the (possibly ideal) triangulation native to Regina, and the dual polyhedral (CW) decomposition which appears in Seifert and Threlfall's textbook.

In the following lists we describe the canonical ordering of both the cells and the dual cells of the given triangulation.

First we list the cell orderings for the standard CW decomposition, which most closely resembles the ideal triangulation.

- 0-cells: The non-ideal vertices given in the order vertices.begin() to vertices.end(), followed by the ideal endpoints of the edges edges.begin() to edges.end() with endpoints for each edge taken in the order 0,1.
- 1-cells: edges.begin() to edges.end(), followed by the ideal edges of faces.begin() to faces.end() in order 0,1,2.
- 2-cells: faces.begin() to faces.end(), followed by the ideal faces of tetrahedra.begin() through tetrahedra.end() in order 0,1,2,3.
- 3-cells: tetrahedra.begin() through tetrahedra.end().

Next we list the cell orderings for the dual CW decomposition: if the standard CW decomposition came from a morse function f, this would be the one for -f.

- 0-cells: tetrahedra.begin() through tetrahedra.end().
- 1-cells: the non-boundary faces.begin() through faces.end().
- 2-cells: the non-boundary edges.begin() through edges.end().
- 3-cells: the non-boundary, non-ideal vertices.begin() through vertices.end().

Deprecated:
  This class will be removed in Regina 5.0. A new and more flexible class called NCellularData will take its place.

Test:
  Included in the test suite.

Author
  Ryan Budney

## Constructor & Destructor Documentation

regina::NHomologicalData::NHomologicalData | ( | const NTriangulation & | input | ) |

inline

Takes as input a triangulation.

This class takes its own copy of the input triangulation. This means that the input triangulation can change or even be destroyed, and this homological data will happily continue to work with the original triangulation as it was first passed to the constructor.

Parameters

  input | the triangulation to use.

regina::NHomologicalData::NHomologicalData | ( | const NHomologicalData & | h | ) |

inline

Copy constructor.

Parameters

  h | the homological data to clone.

regina::NHomologicalData::~NHomologicalData | ( |  | ) |

inline virtual

Destructor.

## Member Function Documentation

bool regina::NHomologicalData::formIsHyperbolic | ( |  | ) |

Returns true iff torsion linking form is `hyperbolic' in the linking-form sense of the word.

To be a little more precise, Poincare-duality in a compact orientable boundaryless manifold gives an isomorphism between the torsion subgroup of H_1(M) denoted tH_1(M) and Hom(tH_1(M),Q/Z), where Q is the rationals and Z the integers. The associated bilinear form (with values in Q/Z) is said to be `hyperbolic' if tH_1(M) splits as a direct sum A+B such that Poincare duality sends A to Hom(B,Q/Z) and B to Hom(A,Q/Z).

Precondition
  The triangulation is of a connected orientable 3-manifold.

Returns
  `true` iff the torsion linking form is hyperbolic.

bool regina::NHomologicalData::formIsSplit | ( |  | ) |

inline

Returns true iff the torsion linking form is split.

Precondition
  The triangulation is of a connected orientable 3-manifold.

Returns
  `true` iff the linking form is split.

bool regina::NHomologicalData::formSatKK | ( |  | ) |

inline

Returns true iff the torsion linking form satisfies the Kawauchi-Kojima 2-torsion condition.

This condition states that on all elements x of order 2^k, 2^{k-1}form(x,x) = 0.

This is a neccessary condition for an orientable 3-manifold perhaps with boundary to embed in a homology 4-sphere.

Precondition
  The triangulation is of a connected orientable 3-manifold.

Returns
  `true` iff the form satisfies the 2-torsion condition of Kawauchi-Kojima.

const NMarkedAbelianGroup& regina::NHomologicalData::getBdryHomology | ( | unsigned | q | ) |

This routine gives access to the homology of the boundary of the manifold, computed with the regular CW-decomposition.

Parameters

  q | the dimension of the homology group: can be 0, 1 or 2.

Returns
  the q-th boundary homology group, in standard cellular homology coordinates

const NHomMarkedAbelianGroup& regina::NHomologicalData::getBdryHomologyMap | ( | unsigned | q | ) |

This routine gives access to the homomorphism from the homology of the boundary to the homology of the manifold.

Parameters

  q | the dimension of the map: can be 0, 1 or 2.

Returns
  the map from H_q of the boundary to H_q of the manifold, computed in standard coordinates.

const NMarkedAbelianGroup& regina::NHomologicalData::getDualHomology | ( | unsigned | q | ) |

This routine gives access to the manifold's homology computed with the dual CW-decomposition.

This routine is typically faster than getHomology() since the dual CW-decomposition generally has far fewer cells.

Note that the groups returned by getHomology() and getDualHomology() are isomorphic, though they are generally described by different presentations.

Parameters

  q | the dimension of the homology group: can be 0, 1, 2 or 3.

Returns
  the q-th homology group, computed in the dual CW-decomposition.

const std::string & regina::NHomologicalData::getEmbeddabilityComment | ( |  | ) |

inline

Returns a comment on whether the manifold might embed in a homology 3-sphere or 4-sphere.

Basically, this routine runs through all the Kawauchi-Kojima conditions, plus a few other `elementary' conditions.

Each comment will be formatted as one or more English sentences (i.e., with capitalisation and punctuation). The comments themselves are subject to change between releases of Regina, since later releases may have more detailed tests at their disposal.

This routine is available for both orientable and non-orientable triangulations. In the non-orientable case it may return additional information regarding the orientable double cover.

Precondition
  The triangulation is of a connected 3-manifold.

Returns
  a string giving a one-line description of what is known about where this manifold embeds, based solely on the manifold's homological data.

long int regina::NHomologicalData::getEulerChar | ( |  | ) |

inline

The proper Euler characteristic of the manifold, computed from the dual CW-decomposition.

This routine calculates the Euler characteristic of the corresponding compact triangulated 3-manifold, with each ideal vertex treated as a surface boundary component.

This routine returns the same value as NTriangulation::getEulerCharManifold(), though it computes it in a different way.

On the other hand, this routine differs from NTriangulation::getEulerCharTri(), which handles ideal triangulations in a non-standard way (treating each ideal vertex as just a single vertex).

Returns
  the Euler characteristic of the corresponding compact triangulated 3-manifold.

const NHomMarkedAbelianGroup& regina::NHomologicalData::getH1CellAp | ( |  | ) |

Returns the isomorphism from getDualHomology(1) to getHomology(1) given by a cellular approximation to the identity map on the manifold.

Returns
  The isomorphism from getDualHomology(1) to getHomology(1) computed via a cellular approximation of the identity map from the first 1-skeleton to the second.

const NMarkedAbelianGroup& regina::NHomologicalData::getHomology | ( | unsigned | q | ) |

This routine gives access to the manifold's homology computed with the regular CW-decomposition.

This routine is typically slower than getDualHomology(), since getDualHomology() uses the dual CW-decomposition which typically has an order of magnitude fewer cells.

Note that the groups returned by getHomology() and getDualHomology() are isomorphic, though they are generally described by different presentations.

Parameters

  q | the dimension of the homology group: can be 0, 1, 2 or 3.

Returns
  the q-th homology group, computed in the standard CW-decomposition.

unsigned long regina::NHomologicalData::getNumBdryCells | ( | unsigned | dimension | ) |

inline

Returns the number of cells of the given dimension in the standard CW-decomposition of the boundary of the manifold.

This is a subcomplex of the complex used in getNumStandardCells().

Parameters

  dimension | the dimension of the cells in question; this must be 0, 1 or 2.

Returns
  the number of cells of the given dimension in the standard CW-decomposition of the boundary.

unsigned long regina::NHomologicalData::getNumDualCells | ( | unsigned | dimension | ) |

inline

Returns the number of cells of the given dimension in the dual CW-decomposition of the manifold.

This is typically much smaller than getNumStandardCells().

Parameters

  dimension | the dimension of the cells in question; this must be 0, 1, 2 or 3.

Returns
  the number of cells of the given dimension in the dual CW-decomposition to the triangulation.

unsigned long regina::NHomologicalData::getNumStandardCells | ( | unsigned | dimension | ) |

inline

Returns the number of cells of the given dimension in the standard genuine CW-decomposition of the manifold.

In the case that the triangulation is a proper triangulation of a manifold (or delta-complex decomposition) it simply returns the same information as in the NTriangulation vertex, edge, face and tetrahedron lists.

In the case that this is an ideal triangulation, this algorithm returns the details of the corresponding compact manifold with boundary a union of closed surfaces.

Parameters

  dimension | the dimension of the cells in question; this must be 0, 1, 2 or 3.

Returns
  the number of cells of the given dimension in the standard CW-decomposition of the closed manifold.

const std::vector< std::pair< NLargeInteger, std::vector< int > > > & regina::NHomologicalData::getTorsionLegendreSymbolVector | ( |  | ) |

inline

Returns the odd p-torsion Legendre symbol vector.

This is the last of the three Kawauchi-Kojima invariants.

For details, see "Algebraic classification of linking pairings on 3-manifolds", Akio Kawauchi and Sadayoshi Kojima, Math. Ann. 253 (1980), 29–42.

Precondition
  The triangulation is of a connected orientable 3-manifold.

Python:
  Not available, though the string routine getTorsionLegendreSymbolVectorString() can still be used.

Returns
  the Legendre symbol vector associated to the torsion linking form.

const std::string & regina::NHomologicalData::getTorsionLegendreSymbolVectorString | ( |  | ) |

inline

Same as getTorsionLegendreSymbolVector() but returns as a human-readable string.

Precondition
  The triangulation is of a connected orientable 3-manifold.

Returns
  the Legendre symbol vector in human-readable form.

const std::vector< std::pair< NLargeInteger, std::vector< unsigned long > > > & regina::NHomologicalData::getTorsionRankVector | ( |  | ) |

inline

Returns the torsion form rank vector.

This is the first of the three Kawauchi-Kojima complete invariants of the torsion linking form.

This vector describes the rank of the torsion subgroup of H1, given in prime power form. It is a vector of pairs (p, x), where p is a prime and x is its exponent.

For details, see "Algebraic classification of linking pairings on 3-manifolds", Akio Kawauchi and Sadayoshi Kojima, Math. Ann. 253 (1980), 29–42.

Precondition
  The triangulation is of a connected orientable 3-manifold.

Python:
  Not available, though the string routine getTorsionRankVectorString() can still be used.

Returns
  the torsion form rank vector.

const std::string & regina::NHomologicalData::getTorsionRankVectorString | ( |  | ) |

inline

Same as getTorsionRankVector() but returns as a human-readable string.

Precondition
  The triangulation is of a connected orientable 3-manifold.

Returns
  human-readable prime power factorization of the order of the torsion subgroup of H1.

const std::vector< NLargeInteger > & regina::NHomologicalData::getTorsionSigmaVector | ( |  | ) |

inline

Returns the 2-torsion sigma vector.

This is the second of the three Kawauchi-Kojima invariants. It is orientation-sensitive.

For details, see "Algebraic classification of linking pairings on 3-manifolds", Akio Kawauchi and Sadayoshi Kojima, Math. Ann. 253 (1980), 29–42.

Precondition
  The triangulation is of a connected orientable 3-manifold.

Python:
  Not available, though the string routine getTorsionSigmaVectorString() can still be used.

Returns
  the Kawauchi-Kojima sigma-vector.

const std::string & regina::NHomologicalData::getTorsionSigmaVectorString | ( |  | ) |

inline

Same as getTorsionSigmaVector() but returns as a human-readable string.

This is an orientation-sensitive invariant.

Precondition
  The triangulation is of a connected orientable 3-manifold.

Returns
  the Kawauchi-Kojima sigma-vector in human readable form.

virtual void regina::NHomologicalData::writeTextShort | ( | std::ostream & | out | ) | const

virtual

Short text representation as required by SharableObject.

Note this only writes pre-computed data. Thus if you have not yet asked NHomologicalData to compute anything about this triangulation, writeTextShort may be empty.

Parameters

  out | the stream to write to.

Implements regina::ShareableObject.

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

- triangulation/nhomologicaldata.h

Copyright © 1999-2013, 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@debian.org).