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:
libsemigroups is partly based on Algorithms for computing finite semigroups, Expository Slides, and Semigroupe 2.01 by Jean-Eric Pin.
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 and in Julia via the package Semigroups.jl. The development version of libsemigroups is 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::FroidurePin, libsemigroups::Konieczny, libsemigroups::ToddCoxeter, libsemigroups::Kambites, libsemigroups::KnuthBendix, libsemigroups::SchreierSims, libsemigroups::Sims1, libsemigroups::Sims2, or libsemigroups::Stephen.
libsemigroups is a modern open source C++ library designed to be:
See the documentation https://libsemigroups.github.io/libsemigroups/.
See the installation page for more info.
If you find any problems with libsemigroups, or have any suggestions for features that you'd like to see, please use the issue tracker.
libsemigroups uses:
We'd like to thank the authors and contributors to these excellent projects!
We thank: