Regina Calculation Engine
|
Data type that deals with all the detailed homological information in a manifold. More...
#include <triangulation/nhomologicaldata.h>
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... | |
Input and Output | |
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... | |
Data type that deals with all the detailed homological information in a manifold.
This information includes:
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.
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.
|
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.
input | the triangulation to use. |
|
inline |
Copy constructor.
h | the homological data to clone. |
|
inlinevirtual |
Destructor.
|
inherited |
Returns the output from writeTextLong() as a string.
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).
true
iff the torsion linking form is hyperbolic.
|
inline |
Returns true iff the torsion linking form is split.
true
iff the linking form is split.
|
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.
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.
q | the dimension of the homology group: can be 0, 1 or 2. |
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.
q | the dimension of the map: can be 0, 1 or 2. |
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.
q | the dimension of the homology group: can be 0, 1, 2 or 3. |
|
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.
|
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).
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.
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.
q | the dimension of the homology group: can be 0, 1, 2 or 3. |
|
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().
dimension | the dimension of the cells in question; this must be 0, 1 or 2. |
|
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().
dimension | the dimension of the cells in question; this must be 0, 1, 2 or 3. |
|
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.
dimension | the dimension of the cells in question; this must be 0, 1, 2 or 3. |
|
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.
|
inline |
Same as getTorsionLegendreSymbolVector() but returns as a human-readable string.
|
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.
|
inline |
Same as getTorsionRankVector() but returns as a human-readable string.
|
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.
|
inline |
Same as getTorsionSigmaVector() but returns as a human-readable string.
This is an orientation-sensitive invariant.
|
inherited |
Returns the output from writeTextShort() as a string.
__str__()
function.
|
inlineinherited |
A deprecated alias for str(), which returns the output from writeTextShort() as a string.
|
inlineinherited |
A deprecated alias for detail(), which returns the output from writeTextLong() as a string.
|
inlinevirtualinherited |
Writes this object in long text format to the given output stream.
The output should provide the user with all the information they could want. The output should be human-readable, should not contain extremely long lines (so users can read the output in a terminal), and should end with a final newline.
The default implementation of this routine merely calls writeTextShort() and adds a newline.
out | the output stream to which to write. |
Reimplemented in regina::NSnapPeaTriangulation, regina::NGroupPresentation, regina::NHomMarkedAbelianGroup, regina::NNormalSurfaceList, regina::NTetrahedron, regina::NSatRegion, regina::NVertex, regina::NEdge, regina::Dim2Triangle, regina::NTriangle, regina::NLayeredSolidTorus, regina::NHomGroupPresentation, regina::NGenericIsomorphism< dim >, regina::NGenericIsomorphism< 2 >, regina::NGenericIsomorphism< 3 >, regina::NTriangulation, regina::NComponent, regina::NTxICore, regina::NTriSolidTorus, regina::NAngleStructureList, regina::Dim2Edge, regina::NBoundaryComponent, regina::NLayeredChain, regina::Dim2Vertex, regina::Dim2Component, regina::NScript, regina::NAugTriSolidTorus, regina::NSpiralSolidTorus, regina::NSurfaceFilterProperties, regina::NLayeredTorusBundle, regina::NManifold, regina::NPlugTriSolidTorus, regina::NMatrixInt, regina::NBlockedSFSTriple, regina::NPluggedTorusBundle, regina::Dim2Triangulation, regina::NSurfaceSubset, regina::NLayeredLensSpace, regina::NLayeredLoop, regina::NFileInfo, regina::NBlockedSFSLoop, regina::NSnappedBall, regina::NBlockedSFSPair, regina::Dim2BoundaryComponent, regina::NTrivialTri, regina::NL31Pillow, regina::NLayeredChainPair, regina::NText, regina::NSurfaceFilterCombination, and regina::NBlockedSFS.
|
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.
out | the stream to write to. |
Implements regina::ShareableObject.