Skip to content

alex-a-levine/libsemigroups

 
 

Repository files navigation

libsemigroups - C++ library for semigroups and monoids - Version 0.3.0

by J. D. Mitchell with contributions by J. Jonusas, N. Thiery, and M. Torpey

The current version of libsemigroups is 0.3.0. libsemigroups requires a C++ compiler supporting the c++11 standard.

libsemigroups is a C++ library for semigroups and monoids; it is partly based on Algorithms for computing finite semigroups, Expository Slides, and Semigroupe 2.01 by Jean-Eric Pin.

The libsemigroups library is used in the Semigroups package for GAP. The development version is available on Github.

Some of the features of Semigroupe 2.01 are not yet implemented in libsemigroups, this is a work in progress. Missing features include those for:

  • Green's relations, or classes
  • finding a zero
  • minimal ideal, principal left/right ideals, or indeed any ideals
  • inverses
  • local submonoids
  • the kernel
  • variety tests.

These will be included in a future version.

libsemigroups performs roughly the same as Semigroupe 2.01 when there is a known upper bound on the size of the semigroup being enumerated, and this is used to initialise the data structures for the semigroup; see libsemigroups::Semigroup::reserve for more details. Note that in Semigroupe 2.01 it is always necessary to provide such an upper bound, but in libsemigroups it is not.

libsemigroups also has some advantages over Semigroupe 2.01:

  • there is a (hopefully) convenient C++ API, which makes it relatively easy to create, and manipulate semigroups and monoids
  • there are some multithreaded methods for semigroups and their congruences
  • you do not have to know/guess the size of a semigroup or monoid before you begin
  • libsemigroups supports more types of elements than Semigroupe 2.01
  • it is relatively straightforward to add support for further types of elements and semigroups
  • it is possible to enumerate a certain number of elements of a semigroup or monoid (say if you are looking for an element with a particular property), to stop, and then start the enumeration again at a later point
  • you can instantiate as many semigroups and monoids as you can fit in memory
  • it is possible to add more generators after a semigroup or monoid has been constructed, without losing or having to recompute any information that was previously known
  • libsemigroups contains a rudimentary implementations of the Todd-Coxeter and Knuth-Bendix algorithms for finitely presented semigroups, which can also be used to compute congruence of a (not necessarily finitely presented) semigroup or monoid.

Issues

If you find any problems with libsemigroups or have any suggestions for features that you'd like to see please use the issue tracker.

Documentation

The documentation is generated using doxygen and is available here. This documentation can be compiled by running ./autogen.sh ; ./configure ; make doc in the libsemigroups directory, and the tests can be run by doing make check in the libsemigroups directory.

Acknowledgements

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 scholarship of M. Torpey when he worked on this project (EP/M506631/1).

About

A C/C++ library for semigroups

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • C++ 98.9%
  • Other 1.1%