The algorithm implemented in the class
is based on Algorithms for computing finite
by Jean-Eric Pin.
Some of the features of Semigroupe
are not yet implemented in
FroidurePin, 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
These may be included in a future version.
libsemigroups performs roughly the same as Semigroupe
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
libsemigroups::FroidurePin::reserve for more details. Note
that in Semigroupe
it is always necessary to provide such an upper bound, but in
libsemigroups it is not.
FroidurePin class has some advantages over Semigroupe
there is a (hopefully) convenient C++ API, which makes it relatively easy to create and manipulate semigroups and monoids
more types of elements are supported
it is relatively straightforward to add support for further types of elements
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 to start the enumeration again at a later point
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