Regina Calculation Engine
Public Member Functions | List of all members
regina::HomGroupPresentation Class Reference

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

#include <algebra/homgrouppresentation.h>

Inheritance diagram for regina::HomGroupPresentation:
regina::Output< 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 GroupPresentationdomain () const
 The domain of the map. More...
 
const GroupPresentationrange () 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< HomGroupPresentationcomposeWith (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< HomMarkedAbelianGroupmarkedAbelianisation () 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...
 
HomGroupPresentationoperator= (const HomGroupPresentation &)=delete
 
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
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
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
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:

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