Regina Calculation Engine
|
Represents a homomorphism of finitely generated abelian groups. More...
#include <algebra/nmarkedabeliangroup.h>
Public Member Functions | |
NHomMarkedAbelianGroup (const NMarkedAbelianGroup &dom, const NMarkedAbelianGroup &ran, const NMatrixInt &mat) | |
Constructs a homomorphism from two marked abelian groups and a matrix that indicates where the generators are sent. More... | |
NHomMarkedAbelianGroup (const NHomMarkedAbelianGroup &h) | |
Copy constructor. More... | |
~NHomMarkedAbelianGroup () | |
Destructor. More... | |
bool | isChainMap (const NHomMarkedAbelianGroup &other) const |
Determines whether this and the given homomorphism together form a chain map. More... | |
bool | isCycleMap () const |
Is this at least a cycle map? If not, pretty much any further computations you try with this class will be give you nothing more than carefully-crafted garbage. More... | |
bool | isEpic () const |
Is this an epic homomorphism? More... | |
bool | isMonic () const |
Is this a monic homomorphism? More... | |
bool | isIso () const |
A deprecated alternative to isIsomorphism(). More... | |
bool | isIsomorphism () const |
Is this an isomorphism? More... | |
bool | isZero () const |
Is this the zero map? More... | |
bool | isIdentity () const |
Is this the identity automorphism? More... | |
const NMarkedAbelianGroup & | getKernel () const |
Returns the kernel of this homomorphism. More... | |
const NMarkedAbelianGroup & | getCokernel () const |
Returns the cokernel of this homomorphism. More... | |
const NMarkedAbelianGroup & | getImage () const |
Returns the image of this homomorphism. More... | |
void | writeTextShort (std::ostream &out) const |
Short text representation. More... | |
void | writeTextLong (std::ostream &out) const |
A more detailed text representation of the homomorphism. More... | |
const NMarkedAbelianGroup & | getDomain () const |
Returns the domain of this homomorphism. More... | |
const NMarkedAbelianGroup & | getRange () const |
Returns the range of this homomorphism. More... | |
const NMatrixInt & | getDefiningMatrix () const |
Returns the defining matrix for the homomorphism. More... | |
const NMatrixInt & | getReducedMatrix () const |
Returns the internal reduced matrix representing the homomorphism. More... | |
std::vector< NLargeInteger > | evalCC (const std::vector< NLargeInteger > &input) const |
Evaluate the image of a vector under this homomorphism, using the original chain complexes' coordinates. More... | |
std::vector< NLargeInteger > | evalSNF (const std::vector< NLargeInteger > &input) const |
Evaluate the image of a vector under this homomorphism, using the Smith normal form coordinates. More... | |
std::auto_ptr < NHomMarkedAbelianGroup > | inverseHom () const |
Returns the inverse to an NHomMarkedAbelianGroup. More... | |
std::auto_ptr < NHomMarkedAbelianGroup > | operator* (const NHomMarkedAbelianGroup &X) const |
Returns the composition of two homomorphisms. More... | |
std::auto_ptr < NHomMarkedAbelianGroup > | torsionSubgroup () const |
Returns an NHomMarkedAbelianGroup representing the induced map on the torsion subgroups. More... | |
void | writeReducedMatrix (std::ostream &out) const |
Writes a human-readable version of the reduced matrix to the given output stream. More... | |
Input and Output | |
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... | |
Represents a homomorphism of finitely generated abelian groups.
One initializes such a homomorphism by providing:
So for example, if the domain was initialized by the chain complex Z^a –A–> Z^b –B–> Z^c
with mod p coefficients, and the range was initialized by Z^d –D–> Z^e –E–> Z^f
with mod q coefficients, then the matrix needs to be an e-by-b matrix. Furthermore, you only obtain a well-defined homomorphism if this matrix extends to a cycle map, which this class assumes but which the user can confirm with isCycleMap(). Moreover, q should divide p: this allows for q > 0 and p = 0, which means the domain has Z coefficients and the range has mod q coefficients.
|
inline |
Constructs a homomorphism from two marked abelian groups and a matrix that indicates where the generators are sent.
The roles of the two groups and the matrix are described in detail in the NHomMarkedAbelianGroup class overview.
The matrix must be given in the chain-complex coordinates. Specifically, if the domain was defined via the chain complex Z^a –N1–> Z^b –M1–> Z^c
and the range was defined via Z^d –N2–> Z^e –M2–> Z^f
, then mat is an e-by-b matrix that describes a homomorphism from Z^b to Z^e.
In order for this to make sense as a homomorphism of the groups represented by the domain and range respectively, one requires img(mat*N1) to be a subset of img(N2). Similarly, ker(M1) must be sent into ker(M2). These facts are not checked, but are assumed as preconditions of this constructor.
dom | the domain group. |
ran | the range group. |
mat | the matrix that describes the homomorphism from dom to ran. |
regina::NHomMarkedAbelianGroup::NHomMarkedAbelianGroup | ( | const NHomMarkedAbelianGroup & | h | ) |
Copy constructor.
h | the homomorphism to clone. |
|
inline |
Destructor.
|
inherited |
Returns the output from writeTextLong() as a string.
std::vector<NLargeInteger> regina::NHomMarkedAbelianGroup::evalCC | ( | const std::vector< NLargeInteger > & | input | ) | const |
Evaluate the image of a vector under this homomorphism, using the original chain complexes' coordinates.
This involves multiplication by the defining matrix.
input | an input vector in the domain chain complex's coordinates, of length getDomain().getM().columns(). |
std::vector<NLargeInteger> regina::NHomMarkedAbelianGroup::evalSNF | ( | const std::vector< NLargeInteger > & | input | ) | const |
Evaluate the image of a vector under this homomorphism, using the Smith normal form coordinates.
This is just multiplication by the reduced matrix, returning the empty vector if the input vector has the wrong dimensions.
input | an input vector in the domain SNF coordinates, of length getDomain().minNumberOfGenerators(). |
|
inline |
Returns the cokernel of this homomorphism.
|
inline |
Returns the defining matrix for the homomorphism.
|
inline |
Returns the domain of this homomorphism.
|
inline |
Returns the image of this homomorphism.
|
inline |
Returns the kernel of this homomorphism.
|
inline |
Returns the range of this homomorphism.
|
inline |
Returns the internal reduced matrix representing the homomorphism.
This is where the rows/columns of the matrix represent first the free generators, then the torsion summands in the order of the invariant factors:
Z^d + Z_{d0} + ... + Z_{dk}
where:
std::auto_ptr<NHomMarkedAbelianGroup> regina::NHomMarkedAbelianGroup::inverseHom | ( | ) | const |
Returns the inverse to an NHomMarkedAbelianGroup.
If this homomorphism is not invertible, this routine returns the zero homomorphism.
If you are computing with mod-p coefficients, this routine will further require that this invertible map preserves the UCT splitting of the group, i.e., it gives an isomorphism of the tensor product parts and the TOR parts. At present this suffices since we're only using this to construct maps between homology groups in different coordinate systems.
bool regina::NHomMarkedAbelianGroup::isChainMap | ( | const NHomMarkedAbelianGroup & | other | ) | const |
Determines whether this and the given homomorphism together form a chain map.
Given two NHomMarkedAbelianGroups, you have two diagrams:
Z^a --N1--> Z^b --M1--> Z^c Z^g --N3--> Z^h --M3--> Z^i ^ ^ |this.matrix |other.matrix Z^d --N2--> Z^e --M2--> Z^f Z^j --N4--> Z^k --M4--> Z^l
If c=g and f=j and M1=N3 and M2=N4, you can ask if these maps commute, i.e., whether you have a map of chain complexes.
other | the other homomorphism to analyse in conjunction with this. |
bool regina::NHomMarkedAbelianGroup::isCycleMap | ( | ) | const |
Is this at least a cycle map? If not, pretty much any further computations you try with this class will be give you nothing more than carefully-crafted garbage.
Technically, this routine only checks that cycles are sent to cycles, since it only has access to three of the four maps you need to verify you have a cycle map.
true
if and only if this is a chain map.
|
inline |
Is this an epic homomorphism?
bool regina::NHomMarkedAbelianGroup::isIdentity | ( | ) | const |
Is this the identity automorphism?
|
inline |
A deprecated alternative to isIsomorphism().
|
inline |
Is this an isomorphism?
|
inline |
Is this a monic homomorphism?
|
inline |
Is this the zero map?
std::auto_ptr<NHomMarkedAbelianGroup> regina::NHomMarkedAbelianGroup::operator* | ( | const NHomMarkedAbelianGroup & | X | ) | const |
Returns the composition of two homomorphisms.
X | the homomorphism to compose this with. |
|
inherited |
Returns the output from writeTextShort() as a string.
__str__()
function.std::auto_ptr<NHomMarkedAbelianGroup> regina::NHomMarkedAbelianGroup::torsionSubgroup | ( | ) | const |
Returns an NHomMarkedAbelianGroup representing the induced map on the torsion subgroups.
|
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.
void regina::NHomMarkedAbelianGroup::writeReducedMatrix | ( | std::ostream & | out | ) | const |
Writes a human-readable version of the reduced matrix to the given output stream.
This is a description of the homomorphism in some specific coordinates at present only meant to be internal to NHomMarkedAbelianGroup. At present, these coordinates have the torsion factors of the group appearing first, followed by the free factors.
out | the output stream. |
|
virtual |
A more detailed text representation of the homomorphism.
out | the stream to write to. |
Reimplemented from regina::ShareableObject.
|
virtual |
Short text representation.
This will state some basic properties of the homomorphism, such as:
out | the stream to write to. |
Implements regina::ShareableObject.