Finitely presented semigroups

libsemigroups implements several algorithms for computing finitely presented semigroups and monoids. 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::FpSemigroup 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 libsemigroups::fpsemigroup::ToddCoxeter and libsemigroups::fpsemigroup::KnuthBendix.

All of the classes for finitely presented semigroups and monoids 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 classes in libsemigroups for finitely presented semigroups and monoids are: