Semigroups

A package for semigroups and monoids

Version 5.4.0
Released 2024-10-19

This project is maintained by James Mitchell

CHANGELOG – Semigroups package for GAP

Copyright © 2011-21 James D. Mitchell et al.

Licensing information can be found in the LICENSE file.

Version 3.4.2 (released 07/02/2021)

This is a minor release resolving some issues in v3.4.1 James D. Mitchell, and with a number of improvements by Wilf A. Wilson.

Version 3.4.1 (released 28/01/2021)

This is a minor release including some bugfixes and improvements. The required minimum version of libsemigroups is increased from v1.1.0 to v1.3.2. The required version of Digraphs is increased to v1.2.0. The datastructures package was implicitly required (via Digraphs), and now at least version v0.2.5 is required explicitly. The version of GAP required was implicitly at least v4.10.0, but was explicity v4.9.0, it is now explicitly v4.10.0.

Version 3.4.0 (released 28/08/2020)

This is a minor release with the following new features added to the package:

The following bugs/issues were resolved:

The required minimum version of libsemigroups is now v1.1.0,

Version 3.3.2 (released 28/06/2020)

This is a very minor release fixing the following issues.

Version 3.3.1 (released 28/05/2020)

This is a minor release fixing some issues in the build system Max Horn related to compatibility with future versions of GAP, and some other minor fixes by James D. Mitchell and Wilf A. Wilson.

Version 3.3.0 (released 28/04/2020)

This is a minor release fixing some issues in the build system Chris Jefferson, some improvements to the isomorphism capabilities of the package James D. Mitchell, and the introduction of a rudimentary function to compute the automorphism group of an arbitrary semigroup. From v3.3.0, the Semigroups package requires the images package version 1.3.0 or higher.

Version 3.2.5 (released 28/03/2020)

This is a minor release to fixing some build issues for windows Chris Jefferson and fixing an issue in IsRowTrimBooleanMat, IsColTrimBooleanMat, and IsTrimBooleanMat Finn Smith see Issue #654 for more details.

Version 3.2.4 (released 28/02/2020)

This is a minor release to fix a memory leak and some other issues in the kernel module.

Version 3.2.3 (released 07/02/2020)

This is a minor release to make some changes for compatibility with the Digraphs package v1.1.1 and GAP, and to fix a memory leak in the kernel module.

Version 3.2.2 (released 17/01/2020)

This is a minor release to update the version of libsemigroups to v1.0.5, to include some changes for compatibility with GAP, and to fix the following issues

The changes in this release were made by Max Horn and James D. Mitchell.

Version 3.2.1 (released 04/12/2019)

This is a minor release to update the version of libsemigroups to v1.0.2, and to include some changes for compatibility with GAP. The changes in this release were made by James D. Mitchell and Wilf A. Wilson.

Version 3.2.0 (released 04/10/2019)

This is a minor release including several cleanups, changes for compatibility with GAP, and to update the required version of the Digraphs package to v1.0.0. The changes in this release were made by James D. Mitchell and Wilf A. Wilson.

Version 3.1.5 (released 19/09/2019)

This is a minor release including several cleanups, changes for compatibility with GAP, and to add the possibility to pass a RandomSource as a first argument to some methods. All the changes in this release were made by Max Horn.

Version 3.1.4 (released 30/08/2019)

This is a minor release fixing some minor issues, mostly related to compatibility with GAP 4.11.

Version 3.1.3 (released 07/06/2019)

This is a minor release of the Semigroups package, including some improvements to SmallestIdempotentPower and RepresentativeOfMinimalIdeal by Wilf A. Wilson and some other minor modifications. Semigroups now requires version 4.8.2 of the orb package, or newer.

Version 3.1.2 (released 15/03/2019)

This is a minor release of the Semigroups package, including some changes to the build system (by D. V. Pasechnik), one issue was fixed (Issue 581 by Chris Russell and James D. Mitchell), and the version of libsemigroups required was increased to 0.6.7.

Version 3.1.1 (released 15/02/2019)

This is a minor release of the Semigroups package, including some minor changes in the kernel module (by Max Horn) and the bibliography section of the manual has been fixed and updated (by Murray Whyte).

Version 3.1.0 (released 14/01/2019)

This is a major release of the Semigroups package, including several changes to existing behaviour, new functionality, and bugfixes.

Changed functionality in this release

New functionality in this release

Issues resolved by this release

There have also been many technical changes to the package and its kernel module, including many by Max Horn, such as those in PRs #490, #491, #493, #501, #553, and #562.

Semigroups now requires version 4.8.1 of the orb package, or newer.

Version 3.0.20 (released 01/10/2018)

This version contains some minor changes related to compatibility issues with GAP, was updated to use libsemigroups 0.6.4, and contains bugfixes for the following issues:

Version 3.0.19 (released 18/09/2018)

This version contains some minor changes related to compatibility issues with GAP, and to resolve some incorrectly delegating methods for print/view/display. (Wilf A. Wilson)

Version 3.0.18 (released 11/09/2018)

This version contains some minor changes related to compatibility issues with GAP.

Version 3.0.17 (released 23/08/2018)

This version contains some minor improvements and bugfixes.

Version 3.0.16 (released 29/05/2018)

This version contains some minor improvements and bugfixes.

Version 3.0.15 (released 24/03/2018)

This version contains some bugfixes, and some improved functionality:

Version 3.0.14 (released 15/02/2018)

This version contains a fix for the following issue, this was resolved by updating the version of libsemigroups to 0.6.3:

Version 3.0.13 (released 08/02/2018)

This version contains some minor updates for compatibility with GAP 4.9, and some fixes for some minor issues.

Version 3.0.12 (released 17/01/2018)

This version contains some minor updates for compatibility with GAP 4.9, to fix some bugs, to update the build system, and to update the kernel module for libsemigroups version 0.6.2.

The following improvements have been made:

The following issues are resolved:

Version 3.0.11 (released 18/12/2017)

This version contains some minor updates for compatibility with GAP 4.9, the build system has been modified slightly, the kernel module has been updated for libsemigroups version 0.6.1.

Version 3.0.10 (released 04/12/2017)

This version contains some minor updates for compatibility with GAP 4.9.

Version 3.0.9 (released 24/11/2017)

This version contains some minor bugfixes, and updates for compatibility with GAP 4.9, io 4.5.0, and Digraphs 0.11.0.

Version 3.0.8 (released 10/11/2017)

This version contains some minor bugfixes, and updates for compatibility with GAP 4.9 and orb 4.8.0.

Version 3.0.7 (released 02/10/2017)

This version contains some minor bugfixes, fixes some issues where some tests in the main GAP repo returned different output when Semigroups was loaded than when it was not, and updates the kernel module for version 0.5.2 of libsemigroups. The configuration option --enable-debug was added.

The following issues are resolved:

Version 3.0.6 (released 27/09/2017)

This version contains some minor bugfixes, improves the compatibility of Semigroups with other GAP packages, and updates the kernel module for version 0.5.0 of libsemigroups

The following issues are resolved:

Version 3.0.5 (released 23/08/2017)

This version contains some minor tweaks and the following issue is resolved:

Version 3.0.4 (released 16/07/2017)

Some minor issues are fixed in this release:

Some documentation and tests were added by Michael Torpey.

Version 3.0.3 (released 21/06/2017)

Some minor issues are fixed in this release:

Version 3.0.2 (released 16/06/2017)

This is an minor release fixing some minor issues in the last release.

The following issues were resolved:

There are improvements to the following:

Version 3.0.1 (released 03/06/2017)

This is an extremely minor release fixing some minor issues in the last release.

Version 3.0.0 (released 02/06/2017)

This is a major release that dramatically expands the scope of the package. The package now features a compiled C/C++ module which interfaces with the libsemigroups C++ library to allow high-speed computations for congruences and certain categories of semigroup. There are also several new types of semigroup and a variety of new methods which can be used with them.

Version 2.8.2 (released 15/01/2018)

This is a minor release to correct the required version of GAP in PackageInfo.g (from GAP 4.9.0 to GAP 4.8.9).

Version 2.8.1 (released 22/12/2017)

This is a minor release to update the output in some test file and manual examples due to some changes in the GAP library code.

Version 2.8.0 (released 26/05/2016)

In this release there are some new features and some bug fixes. In this version, we welcome Nick Ham to the contributors to the package.

New Features in Version 2.8.0

The new features in this release are contributed by Nick Ham:

Issues Resolved in Version 2.8.0

Version 2.7.6 (released 19/04/2016)

This is a very minor release changing the name of the README (to README.md) in the PackageInfo.g file.

Version 2.7.5 (released 19/04/2016)

This is a minor release to fix Issue 151, and to make some changes for future compatibility with GAP. In Issue 151 when the method IsomorphismPermGroup was applied to a semigroups of non-permutation transformations the returned mapping was not an isomorphism.

Version 2.7.4 (released 02/03/2016)

This is a minor release to fix Issue 150, and to correct the required version of GAP (from 4.8.2 to 4.8.3). In Issue 150 the function IsZeroSimpleSemigroup entered an infinite loop for some examples of semigroups of partial permutations.

Version 2.7.3 (released 15/02/2016)

This is a minor release to fix some manual examples, to correct the package URL in the PackageInfo.g file, and to fix some issues with semigroups of bipartitions. It was formerly possible to create semigroups of bipartitions where the generators had different degrees, but the created semigroups were invalid; this is fixed in version 2.7.3.

Version 2.7.2 (released 28/01/2016)

This is a minor release to fix to remove ErrorMayQuit which was renamed ErrorNoReturn in GAP 4.8.2. This change was made by Max Horn.

Version 2.7.1 (released 19/12/2015)

This is a minor release to fix Issue 144. This issue resulted in IsInverseSemigroup sometimes returning true for semigroups which were not inverse. This occurred when the \(\mathscr{D}\)-classes of the semigroup were computed before the method for IsInverseSemigroup was first run.

Version 2.7 (released 27/11/2015)

This is a minor release including some changes for compatibility with GAP 4.8, and some bug fixes.

New Features in Version 2.7

Changes for GAP 4.8

Issues Resolved in Version 2.7

Version 2.6 (released 22/09/2015)

This release includes some bugfixes, some minor new features, and one major new feature (efficient methods for semigroups of matrices over a finite field).

New Features in Version 2.6

Issues Resolved in Version 2.6

Version 2.5 (released 01/06/2015)

This is a minor release including several bugfixes, lots of minor improvements in the documentation, some improvements in performance, and some new features.

New Features in Version 2.5

Issues Resolved in Version 2.5

Issue numbers refer to those on the Bitbucket issue tracker.

Version 2.4.1 (released 15/05/2015)

This is a extremely minor release to change 1 character in the PackageInfo.g file (wrong package archive URL).

Version 2.4 (released 02/04/2015)

This is a minor release including several bugfixes, and improvements in performance, and some new features.

New Features in Version 2.4

Issues Resolved in Version 2.4

Issue numbers refer to those on the Bitbucket issue tracker.

Version 2.3 (released 16/03/2015)

This is a minor release including some internal refactoring, and subsequent bugfixes, and stability improvements.

Version 2.2 (released 20/01/2015)

This is a minor release including some bug fixes, performance improvements, and additional functionality.

New Features in Version 2.2

Issues Resolved in Version 2.2

Version 2.1.1 (released 09/09/2014)

This is a very minor release to fix an issue caused by only loading the packages needed (but not required) by Semigroups.

Version 2.1 (released 04/09/2014)

This is a minor release including some bug fixes and performance improvements.

New Features in Version 2.1

Issues Resolved in Version 2.1

Issue numbers refer to those on the Bitbucket issue tracker.

Version 2.0 (released 17/04/2014)

This is a major release including many new features and several bug fixes.

New Features in Version 2.0

Issues Resolved in Version 2.0

Issue numbers refer to those on the Bitbucket issue tracker.

Version 1.4 (released 28/10/13)

This is a minor release containing some bug fixes. Specifically: the functionality of ReadGenerators and WriteGenerators has been improved to allow the argument to be an io file object, and support is added to read and write directly to files compressed using xz. A minor bug relating to the creation of idempotents in transformation semigroups which was triggered by the identity transformation has been resolved. The functions IsomorphismReesMatrixSemigroup, InjectionPrincipalFactor, and IsZeroSimpleSemigroup have been revised. IsZeroSimpleSemigroup formerly returned true for the 2-element zero semigroup, which is not 0-simple. IsomorphismReesMatrixSemigroup could have returned an error if called for a semigroup which was not a semigroup of partial perms or transformations. The use of AsPermutation was changed to PermutationOfImage where appropriate following a change to the library methods for AsPermutation. The declarations of IsomorphismPermGroup and ClosureSemigroup were moved/changed to avoid warnings that their methods matched more than one declaration. These warnings were exposed by doing LoadAllPackages, but were not present when loading Semigroups by itself.

Version 1.3 (released 11/10/13)

Version 1.3 contains many bug fixes, extensions and improvements in the documentation, and several new methods and functions. Most notably are (in no particular order):

Version 1.2 (released 02/08/13)

This release includes several new methods for inverse semigroups of partial permutations and for free inverse semigroups. Most notably among the new methods for inverse semigroups of partial permutations are:

for changing the representation of an inverse semigroup of partial permutations. The changes in this release were the result of the University of St Andrews Research for Undergraduates Summer School in 2012, and were largely written by Wilf A. Wilson and Robert Hancock.

Free inverse semigroups, and their elements, are also introduced, this part of the package was written by Julius Jonusas (who wishes to acknowledge the support of the Carnegie Trust).

Version 1.1 (released 11/06/13)

A minor release to fix some technical issues in PackageInfo.g, the declarations of IsGreens.Class, and a minor change in the output in one test in everyfunction.tst which was consequence of the declarations of IsGreens.Class.

Version 1.0 (released 07/06/13)

The package has been renamed from Citrus to Semigroups. The package has been completely overhauled, the performance has been improved, and the code has been generalized so that in the future the same code can be used to compute with other types of semigroups.

Under the name Citrus:

Version 0.9999

This is the final release of Citrus (the package will be renamed Citrus in the next release since the scope of the package has expanded to include more types of semigroups than just those of transformations and partial permutations).

A minor release fixing several bugs relating to inverse semigroups of partial permutations pointed out by partcipants at the University of St Andrews Research for Undergraduates Summer School in July 2012. Most notably by Demi Allen, Casey Donoven, Rhiannon Dougall, Robert Hancock, and Wilf A. Wilson. More specifically, SymmetricInverseSemigroup(n) returned an incorrect answer when n=1 or n=2, \in for the empty mapping and an inverse semigroup of partial perms sometimes incorrectly returned false, some harmless compiler warnings were displayed when using more recent versions of gcc, NaturalLeqPP sometimes returned the incorrect value, there was no method for IsInverseSemigroup or IsInverseMonoid for a semigroup of partial perms.

Version 0.999

A minor release fixing several bugs relating to partial permutations and monoids thereof, pointed out by Jack Schmidt. More specifically, MultiplicativeZero sometimes incorrectly returned fail for an inverse semigroup of partial permutations, sometimes PartialPerm incorrectly returned fail when given a dense range as an argument, sometimes the size of an inverse monoid was 1 more than the correct value, and RestrictedPP sometimes failed when it should not have.

Version 0.99

another minor release. Specific changes were: removed the declaration of SmallGeneratingSet for IsSemigroup since it appears not to be used and caused a warning to be shown when the RCWA package was loaded after Citrus. Added a new abstract to the PackageInfo.g file, and the documentation, and updated the webpages, in particular so that the html version of the manual is linked to that on the GAP webpage and the links to other manuals work.

Version 0.9

renamed the function for creating the semigroup of order-preserving transformations on an n-chain from O to OrderEndomorphisms after it was pointed out that it is not sensible to have function names with one character. Also made some minor adjustments to the manual.

Version 0.8

minor changes due to incompatibility with Smallsemi version 0.6.4 which caused some test files to fail when Nilmat was loaded after Citrus. The clashes and the failed test were caused by various properties being declared for IsTransformationSemigroup rather than IsSemigroup.

Version 0.7

the most major change is the introduction of special methods for partial permutations and inverse semigroups. So that these methods are efficient, a GAP kernel component (in C) has also been introduced for various low-level computations with partial permutations. Essentially all functions previously available for transformation semigroups are now available for inverse semigroups of partial permutations. The manual has been expanded and reorganised, some standard examples have been included (semigroups of order preserving transformations or partial permutations, the symmetric inverse semigroup, the full matrix semigroup over a finite field), the endomorphism monoids of the non-abelian groups with at most 64 elements have been included in the catalogues of examples, the functions InjectionPrincipalFactor, IsomorphismReesMatrixSemigroup, and PrincipalFactor, and some specific properties and attributes of inverse semigroups have been introduced (such as IsFactorisableSemigroup and PrimitiveIdempotents).

Version 0.6

fixed a bug relating to the creation of transformation semigroups using MagmaByGenerators. Also added the global variable CitrusOptionsRec containing the default values of the options used by Citrus when creating a semigroup.

Version 0.5

major changes are: the documentation has been further revised, functions for creating semigroups and monoids with certain options have been introduced, several functions have had the word Greens removed from their names to reduce the length, the operation ClosureSemigroup has been introduced, the functions ReadCitrus and WriteCitrus for reading and writing transformations to a file have been introduced, several catalogues of examples of transformation semigroups are now included in the examples directory, methods for creating a Green’s class inside another Green’s class have been included (such as an \(\mathscr{R}\)-class of a \(\mathscr{D}\)-class or an \(\mathscr{H}\)-class of an \(\mathscr{L}\)-class), the hash functions used for transformations etc have been improved.

Some minor bugs have been fixed, and new methods or functions with the following names have also been introduced:

Version 0.4

major changes are: the documentation has been updated, some changes to core functions for \(\mathscr{R}\)-classes/image orbits have resulted in a performance improvement, there is a method for the operation Factorization allowing an arbitrary element of a transformation semigroup to be expressed as a product of the generators.

Some minor bugs have been fixed, and new methods or functions with the following names have also been introduced:

OrbSCC, OrbSCCLookup, OrbSCCTruthTable, ReverseSchreierTreeOfSCC, SchreierTreeOfSCC, IsomorphismTransformationSemigroup (for a perm. gp).

Version 0.3

fixed a critical (but rare) bug in AddToOrbitsOfKernels that caused computations relating to \(\mathscr{D}\)-classes, \(\mathscr{H}\)-classes, or \(\mathscr{L}\)-classes to return incorrect answers in some cases.

Version 0.2

updated the method for \^ for a transformation and perm so that it is more efficient than the library method, same for * for a perm and transformation. New method for StructureDescription of a Brandt semigroup, and IsSubset for a trans. semigroup and trans. coll.

fixed bugs in IndexPeriodOfTransformation (it returned incorrect results) and AsPermutation. Also reduce hash table lengths so that Citrus uses less memory. Fixed bug that triggered an infinite loop when trying to find elements of a trivial trans. semigroup.

added the functions CitrusDefaultMem, CitrusHiMem, CitrusLoMem, CitrusVeryLoMem, IsBrandtSemigroup, IsLeftSimple, IsMonogenicSemigroup, IsRightSimple, IsZeroRectangularBand, IsZeroSimpleSemigroup.