libsemigroups - Version 2.5.1¶
C++ library for semigroups and monoids¶
libsemigroups is a C++14 library containing implementations of several
algorithms for computing finite, and finitely presented, semigroups and
the Knuth-Bendix algorithm for finitely presented semigroups and monoids;
the Schreier-Sims algorithm for permutation groups;
an implementation of the algorithm for solving the word problem for small overlap monoids, and for computing normal forms in such monoids; see Kambites [Kam09b], Kambites [Kam09a], and Mitchell-Tsalakou [MT21];
a version of Sims low index subgroup algorithm for computing one-sided congruences of a semigroup or monoid;
a version of Stephen’s procedure for finitely presented semigroups and monoids (for a given word \(w\) this procedure is for determining words equivalent to \(w\) or that are left divisors of \(w\)).
libsemigroups is used in the Semigroups package for GAP, and it is
possible to use
libsemigroups directly in Python 3 via the package
libsemigroups_pybind11. The development version of
available on github, and some related projects are here.
The main classes in
libsemigroups are named after the algorithms they
implement; see, for example,
libsemigroups uses: HPCombi which uses the SSE and AVX instruction sets
for very fast manipulation of transformations, partial permutations,
permutations, and boolean matrices of small size; catch for tests;
fmt for reporting; and eigen for some linear algebra computations.