libsemigroups is a C++17 library containing implementations of several algorithms for computing finite, and finitely presented, semigroups and monoids. The main algorithms implemented in libsemigroups are:
- the Froidure-Pin algorithm for computing semigroups and monoids defined by a generating set consisting of elements whose multiplication and equality is decidable;
- Kambites’ algorithm for solving the word problem in small overlap monoids, and the algorithm for computing normal forms for small overlap monoids by the authors of libsemigroups;
- the Knuth-Bendix algorithm for finitely presented semigroups and monoids;
- a version of Sims’ low index subgroup algorithm for computing congruences of a semigroup or monoid;
- a generalized version of Konieczny’s and Lallement and Mcfadden’s algorithms;
- Radoszewski and Rytter’s algorithm from testing equality of words in free bands;
- a non-random version of the Schreier-Sims algorithm;
- a version of Stephen’s procedure from for finitely presented inverse semigroups and monoids;
- the Todd-Coxeter algorithm for finitely presented semigroups and monoids.