regina::HomGroupPresentation Class Reference
Algebraic Structures

Represents a homomorphism between groups which are described via finite presentations. More...

`#include <algebra/homgrouppresentation.h>`

Inheritance diagram for regina::HomGroupPresentation:

## Public Member Functions

| HomGroupPresentation (const GroupPresentation &domain, const GroupPresentation &range, const std::vector< GroupExpression > &map)
| Creates a new homomorphism from the given data. More...
| HomGroupPresentation (const GroupPresentation &domain, const GroupPresentation &range, const std::vector< GroupExpression > &map, const std::vector< GroupExpression > &inv)
| Creates a declared isomorphism from the given data. More...
| HomGroupPresentation (const GroupPresentation &groupForIdentity)
| Creates a new identity homomorphism for the given group. More...
| HomGroupPresentation (const HomGroupPresentation &cloneMe)
| Creates a clone of the given group presentation. More...
| ~HomGroupPresentation ()
| Destroys the group homomorphism. More...
const GroupPresentation & | domain () const
| The domain of the map. More...
const GroupPresentation & | range () const
| The range of the map. More...
bool | knowsInverse () const
| Returns whether or not this is a declared isomorphism. More...
GroupExpression | evaluate (const GroupExpression &arg) const
| Evaluate the homomorphism at an element of the domain. More...
GroupExpression | evaluate (unsigned long i) const
| Evaluate the homomorphism at a generator of the domain. More...
GroupExpression | invEvaluate (const GroupExpression &arg) const
| Evaluate the isomorphisms's inverse at an element of the range. More...
GroupExpression | invEvaluate (unsigned long i) const
| Evaluate the isomorphism at a generator of the range. More...
bool | intelligentSimplify ()
| Simultaneously simplifies: More...
bool | intelligentNielsen ()
| Simplifies the domain and range using only Nielsen moves, keeping track of the resulting map in the progress. More...
bool | smallCancellation ()
| Simplifies the domain and range using only small cancellation theory. More...
std::unique_ptr< HomGroupPresentation > | composeWith (const HomGroupPresentation &input) const
| Composes this homomorphism with the given input homomorphism. More...
bool | invert ()
| Inverts the homomorphism. More...
bool | verify () const
| Verifies the map is a valid homomorphism. More...
bool | verifyIsomorphism () const
| Attempts to verify that a declared isomorphism is, indeed, an isomorphism. More...
std::unique_ptr< HomMarkedAbelianGroup > | markedAbelianisation () const
| Computes the induced map on the abelianizations of the domain and range. More...
void | writeTextShort (std::ostream &out) const
| Writes a short text representation of this object to the given output stream. More...
void | writeTextLong (std::ostream &out) const
| Writes a detailed text representation of this object to the given output stream. 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...

## Detailed Description

Represents a homomorphism between groups which are described via finite presentations.

Some homomorphisms may be declared isomorphisms. This means that the user (or some other function in Regina) has proven that this is an isomorphism and has explicitly provided the inverse map. To provide the inverse map, you should call the four-argument constructor HomGroupPresentation(const GroupPresentation&, const GroupPresentation&, const std::vector<GroupExpression>&, const std::vector<GroupExpression>&).

You can test for a declared isomorphism by calling knowsInverse(). Even if a homomorphism is not a declared isomorphism, it might still be an isomorphism; this just means that no inverse map was explicitly provided.

Warning
  The API for this class has not yet been finalised. This means that the class interface may change in new versions of Regina, without maintaining backward compatibility. If you use this class directly in your own code, please watch the detailed changelogs upon new releases to see if you need to make changes to your code.

Todo:
  Add a routine to attempt to verify validity of homomorphism.

## Member Function Documentation

## detail()

std::string regina::Output< HomGroupPresentation , false >::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< HomGroupPresentation , false >::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< HomGroupPresentation , false >::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.

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

- algebra/homgrouppresentation.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).