libsemigroups
is a C++14 library containing implementations of several
algorithms for computing finite and finitely presented semigroups. Namely:
- the Froidure-Pin algorithm for computing finite semigroups;
- the Todd-Coxeter algorithm for finitely presented semigroups and monoids;
- the Knuth-Bendix algorithm for finitely presented semigroups and monoids;
- the Schreier-Sims algorithm for permutation groups;
- the Konieczny and Lallement-McFadden algorithm for computing finite semigroups which act on sets.
libsemigroups
is partly based on Algorithms for computing finite
semigroups, Expository Slides, and Semigroupe 2.01 by Jean-Eric Pin.
The main classes in libsemigroups
are named after the algorithms they
implement; for example, libsemigroups::FroidurePin
,
libsemigroups::congruence::ToddCoxeter
,
libsemigroups::fpsemigroup::KnuthBendix
, and
libsemigroups::SchreierSims
.
The implementations in libsemigroups::FroidurePin
and
libsemigroups::SchreierSims
are generic and easily adapted to
user-defined types.
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.
See the documentation https://libsemigroups.readthedocs.io/en/latest/
Installation instructions are here https://libsemigroups.readthedocs.io/en/latest/install.html
If you find any problems with libsemigroups
, or have any suggestions for
features that you'd like to see, please use the issue tracker.
- R. Cirpons contributed to
IsObviouslyInfinite
and to integratingeigen
. - F. Hivert contributed many helpful ideas to
libsemigroups
, an allocator implementation (to be included in a future version), andHPCombi
. - J. James contributed some bugfixes.
- J. Jonušas contributed to the implementation of the Froidure-Pin algorithm.
- D. V. Pasechnik contributed to the build system.
- F. Smith contributed the implementation of the Konieczny and Lallement-McFadden algorithm, to the Todd-Coxeter implementation, and to BMat8s.
- N. Thiery contributed to the build system, packaging
libsemigroups
via conda, the python bindings and many helpful conversations and suggestions. - M. Torpey contributed to the congruences code in the v0.0.1 to v0.6.7.
- M. Tsalakou contributed to the Knuth-Bendix implementation, and related algorithms for the class ActionDigraph.
We acknowledge financial support from the OpenDreamKit Horizon 2020 European Research Infrastructures project (#676541) (primarily for the python bindings).
We thank the Carnegie Trust for the Universities of Scotland for funding the PhD scholarship of J. Jonušas when he worked on this project.
We thank the Engineering and Physical Sciences Research Council (EPSRC) for funding the PhD scholarships of M. Torpey and F. Smith when they worked on this project (EP/M506631/1, EP/N509759/1).