What is libsemigroups_?
Before explaining what libsemigroups_pybind11 is, it is first necessary to
explain `libsemigroups`_. `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 (such as transformations, partial permutations, permutations, bipartitions, and matrices over a semiring);
- Kambites' algorithm for solving the word problem in small overlap monoids from Small overlap monoids I: The word problem, and the algorithm from An explicit algorithm for normal forms in small overlap monoids;
- 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 from Computing finite index congruences of finitely presented semigroups and monoids in the classes;
- a generalized version of the algorithms described in Green's equivalences in finite semigroups of binary relations by Konieczny, and On the determination of Green's relations in finite transformation semigroups by Lallement and Mcfadden for computing finite semigroups and monoids admitting a pair of actions with particular properties;
- the algorithm from Efficient Testing of Equivalence of Words in a Free Idempotent Semigroup by Radoszewski and Rytter;
- a non-random version of the Schreier-Sims algorithm for permutation groups;
- a version of Stephen's procedure from
Applications of automata theory to presentations of monoids and inverse monoids
for finitely presented inverse semigroups and monoids (for a given word
wthis procedure is for determining words equivalent towor that are left divisors ofw); - the Todd-Coxeter algorithm for finitely presented semigroups and monoids; see also The Todd-Coxeter algorithm for semigroups and monoids.
`libsemigroups`_ is partly based on Algorithms for computing finite semigroups, Expository Slides, and Semigroupe 2.01 by Jean-Eric Pin.
libsemigroups_pybind11 is a package for Python 3.9+ exposing much
(but not all) of the functionality of libsemigroups_. It is built with the help
of the excellent library pybind11_, for which we are very grateful. A more
detailed description of the structure of this package, along with some
associated quirks, is described on the
:doc:`exceptions page<libsemigroups-error>`.
The development version of libsemigroups_pybind11 is available on github,
and some related projects are here.
To see the different ways libsemigroups_pybind11 can be installed, see the
:doc:`installation page<install>`.
If you find any problems with libsemigroups_pybind11, or have any
suggestions for features that you'd like to see, please use the
`issue tracker`_.
In addition to `libsemigroups`_, there are several excellent projects that are
utilised in the development of libsemigroups_pybind11, specifically:
- codespell, cpplint, Pylint and Ruff for code quality;
- `Graphviz`_ for graph visualisation;
- pybind11_ for assistance in the binding of `libsemigroups`_;
- pytest for testing; and
- Sphinx for the documentation.
We would like to thank the authors and contributors of these projects!
.. toctree::
:caption: Package Info
:maxdepth: 1
:hidden:
authors
biblio
changelog-v1
changelog-v0
libsemigroups-error
install
.. toctree::
:caption: Data Structures
:hidden:
data-structures/adapters/index
data-structures/constants/index
data-structures/elements/index
data-structures/enums/index
data-structures/hpcombi/index
data-structures/order/index
data-structures/presentations/index
data-structures/suffix-trees/index
data-structures/to-function
data-structures/tries/index
data-structures/visualisation/index
data-structures/word-graph/index
data-structures/words/index
.. toctree::
:caption: Main Algorithms
:hidden:
main-algorithms/action/index
main-algorithms/congruence/index
main-algorithms/core-classes/index
main-algorithms/froidure-pin/index
main-algorithms/kambites/index
main-algorithms/knuth-bendix/index
main-algorithms/konieczny/index
main-algorithms/low-index/index
main-algorithms/radoszewski-rytter/index
main-algorithms/schreier-sims/index
main-algorithms/stephen/index
main-algorithms/todd-coxeter/index