Congruences¶
libsemigroups implements serveral algorithms for computing a congruence of
a semigroup or monoid. The main algorithms implemented are Todd-Coxeter,
Knuth-Bendix, and brute-force enumeration; see the links below for further
details. As a convenience, libsemigroups also has a class
libsemigroups::Congruence that runs some predetermined variants of
Todd-Coxeter, Knuth-Bendix, and the brute-force enumeration in parallel. This
class is, at present, not very customisable, and lacks some of the fine grained
control offered by the classes implementing individual algorithms, such as
congruence::ToddCoxeter and congruence::KnuthBendix.
All of the classes for congruences in libsemigroups can be used
“interactively”, in the sense that they can be run for a particular amount of
time, or until some condition is met; for further details see, for example,
libsemigroups::Runner::run_for() and
libsemigroups::Runner::run_until().
The “handedness” of a congruence is determined by:
-
enum
libsemigroups::congruence_type¶ The values in this enum can be used to indicate that a congruence should be 2-sided, left, or right.
Values:
-
enumerator
left¶
-
enumerator
right¶
-
enumerator
twosided¶
-
enumerator
The classes in libsemigroups for congruences are: