This page documents the constructors and initialisers for the KnuthBendix class.
Every constructor (except the move + copy constructors, and the move and copy assignment operators) has a matching init
function with the same signature that can be used to re-initialize a KnuthBendix instance as if it had just been constructed; but without necessarily releasing any previous allocated memory.
◆ KnuthBendix() [1/4]
template<typename Word, typename Rewriter = detail::RewriteTrie, typename ReductionOrder = ShortLexCompare>
This function default constructs an uninitialised KnuthBendix instance.
◆ KnuthBendix() [2/4]
template<typename Word, typename Rewriter = detail::RewriteTrie, typename ReductionOrder = ShortLexCompare>
This function constructs a KnuthBendix instance representing a congruence of kind knd
over the semigroup or monoid defined by the presentation p
.
- Parameters
-
knd | the kind (onesided or twosided) of the congruence. |
p | the presentation. |
- Exceptions
-
- Warning
- At present it is only possible to create KnuthBendix objects from presentations with alphabets containing at most:
- 128 letters if
char
is a signed integer;
- 256 letters if
char
is an unsigned integer.
◆ KnuthBendix() [3/4]
template<typename Word, typename Rewriter = detail::RewriteTrie, typename ReductionOrder = ShortLexCompare>
KnuthBendix |
( |
KnuthBendix< Word, Rewriter, ReductionOrder > && | | ) |
|
◆ KnuthBendix() [4/4]
template<typename Word, typename Rewriter = detail::RewriteTrie, typename ReductionOrder = ShortLexCompare>
KnuthBendix |
( |
KnuthBendix< Word, Rewriter, ReductionOrder > const & | that | ) |
|
Copy constructor.
- Parameters
-
- Complexity
- \(O(n)\) where \(n\) is the sum of the lengths of the words in rules of
that
.
◆ init() [1/2]
template<typename Word, typename Rewriter = detail::RewriteTrie, typename ReductionOrder = ShortLexCompare>
This function clears the rewriter, presentation, settings and stats from the KnuthBendix object, putting it back into the state it would be in if it was newly default constructed.
- Returns
- A reference to
this
.
◆ init() [2/2]
template<typename Word, typename Rewriter = detail::RewriteTrie, typename ReductionOrder = ShortLexCompare>
This function puts a KnuthBendix instance back into the state that it would have been in if it had just been newly constructed from knd
and p
.
- Parameters
-
knd | the kind (onesided or twosided) of the congruence. |
p | the presentation. |
- Returns
- A reference to
*this
.
- Exceptions
-
- Warning
- At present it is only possible to create KnuthBendix objects from presentations with alphabets containing at most:
- 128 letters if
char
a signed integer;
- 256 letters if
char
is an unsigned integer.
◆ operator=() [1/2]
template<typename Word, typename Rewriter = detail::RewriteTrie, typename ReductionOrder = ShortLexCompare>
Move assignment operator.
◆ operator=() [2/2]
template<typename Word, typename Rewriter = detail::RewriteTrie, typename ReductionOrder = ShortLexCompare>
Copy assignment operator.
◆ throw_if_letter_not_in_alphabet()
template<typename Word, typename Rewriter = detail::RewriteTrie, typename ReductionOrder = ShortLexCompare>
template<typename Iterator1, typename Iterator2>
void throw_if_letter_not_in_alphabet |
( |
Iterator1 | first, |
|
|
Iterator2 | last ) const |
This function throws a LibsemigroupsException if any value pointed at by an iterator in the range first
to last
is out of bounds (i.e. does not belong to the alphabet of the presentation used to construct the KnuthBendix instance, see the warning below).
- Template Parameters
-
Iterator1 | the type of first argument first . |
Iterator2 | the type of second argument last . |
- Parameters
-
first | iterator pointing at the first letter of the word. |
last | iterator pointing one beyond the last letter of the word. |
- Exceptions
-
- Warning
- If a KnuthBendix instance represents a 1-sided congruence (kind) and there are any generating pairs (number_of_generating_pairs
> 0
), then the alphabet of the presentation will contain one more letter than the original input alphabet. This extra letter cannot be used in the input of any function, and is required for the algorithm to work in this case, and is present in the output of, for example, active_rules.