AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
C++ library for semigroups and monoids.
Developer toolsC++ · PythonGitHub @libsemigroupsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
C++ library for semigroups and monoids
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
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:Read the full README ↗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::FroidurePin class template;libsemigroups::Kambites;libsemigroups::KnuthBendix;libsemigroups::Sims1 and libsemigroups::Sims2;libsemigroups::Konieczny;libsemigroups::freeband_equal_to;libsemigroups::SchreierSims;w this
procedure is for determining words equivalent to w or that are
left divisors of w) in the class template libsemigroups::Stephen;libsemigroups::ToddCoxeter; 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 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:
libsemigroups originate from the authors and contributors; and the
other algorithms are adapted from the literature (see above for details);libsemigroups::FroidurePin, libsemigroups::Konieczny, and
libsemigroups::SchreierSims are generic and can be adapted to user-defined
types;libsemigroups
can be fine-tuned via many settings, and used interactively via the functions
libsemigroups::Runner::run_for and libsemigroups::Runner::run_until;libsemigroups
objects (see the to function) is easy; there are many
helper functions to streamline common tasks; high quality exception messages
are implemented throughout the code base (although you don't have to use these
if you don't want to); long running algorithms can provide detailed feedback on
their progress (see libsemigroups::ReportGuard); many data structures can be
visualised using graphviz (see libsemigroups::Dot and
Visualisation);
and there are hundreds of examples in the directory.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:
libsemigroups is designed with performance in mind; several
classes implement parallel algorithms (libsemigroups::Sims1,
libsemigroups::Sims2, libsemigroups::Congruence);
we provide some "winner takes all" mechanisms for running algorithms
concurrently (see libsemigroups::Congruence); there are
_no_checks versions of most functions if performance is critical.