Smallsemi

A &GAP; package

Version &VERSION;
Andreas Distler

    	 Institut Computational Mathematics

    	 Rebenring 31 (A14)

    	 38106 Braunschweig

             Germany

a.distler@tu-bs.de
J. D. Mitchell

    	 Mathematical Institute

    	 North Haugh

    	 St Andrews, Fife

             KY16 9SS

             Scotland, UK

jdm3@st-and.ac.uk http://www-groups.mcs.st-and.ac.uk/~jamesm
©right; 2008-15 A. Distler & J. D. Mitchell.

Smallsemi is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the license, or (at your option) any later version.

Smallsemi is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

A copy of the GNU General Public License is available in the file 'GPLv3'; for the latest version see`http://www.gnu.org/licenses/.

This file is part of Smallsemi, though as documentation it is released under the GNU Free Documentation License (see http://www.gnu.org/licenses/licenses.html#FDL).
If you use Smallsemi, please tell us by sending an email to a.distler@tu-bs.de or jdm3@st-and.ac.uk.

If you find any bugs or have any suggestions or comments, we would very much appreciate it if you would let us know. Also, we would like to hear about applications of this software.
We would like to thank Tom Kelsey for making this library possible by running all the initial computations in Minion .
The first author acknowledges financial support of the University of St Andrews. The second author acknowledges support of EPSRC grant number GR/S/56085/01.
<#Include SYSTEM "intro.xml"> <#Include SYSTEM "data.xml"> <#Include SYSTEM "examples.xml">
Functionality
Individual Semigroups The semigroups of sizes 1 to 8 are available up to isomorphism and anti-isomorphism in Smallsemi. Every semigroup in the library is identified by its size m and a number n lying between 1 and the number of semigroups of size m (see Table ). We call the pair (m,n) the ID of the semigroup.

In this section we give details about the functions relating to individual semigroups in Smallsemi. This includes how to access semigroups in the library and how to identify the semigroup in the library equivalent to an arbitrary semigroup (of size 1 to 8).

If you are interested in the properties of a semigroup in the library or would like to find all the semigroups satisfying a given set of properties please see Section or Section respectively.

<#Include Label="SmallSemigroup"> <#Include Label="IsSmallSemigroup"> <#Include Label="IsSmallSemigroupElt"> <#Include Label="RecoverMultiplicationTable"> <#Include Label="SemigroupByMultiplicationTableNC"> <#Include Label="IdSmallSemigroup"> <#Include Label="EquivalenceSmallSemigroup"> <#Include Label="InfoSmallsemi"> <#Include Label="UnloadSmallsemiData">
Properties of Semigroups In this section we detail the &GAP; functions that can be used to determine whether a small semigroup satisfies a certain property. Let S be a semigroup. Then S is a left zero semigroup if xy=x for all x,y in S. S is a right zero semigroup if xy=y for all x,y in S. S is commutative if xy=yx for all x,y in S. S is simple if it has no proper two-sided ideals. S is zero simple if the only 2-sided ideals are {0} and S. S is regular if for all x in S there exists y in S such that xyx=x. S is completely regular if every element of S lies in a subgroup. S is an inverse semigroup if every element x in S has a unique semigroup inverse, that is, a unique element y such that xyx=x and yxy=y. S is a Clifford semigroup if it is a regular semigroup whose idempotents are central, that is, for all e,x in S where e^2=e we have that ex=xe. S is a band if every element is an idempotent, that is, x^2=x for all x in S. S is a Brandt semigroup if it is inverse and zero simple. S is a rectangular band if for all x,y,z in S we have that x^2=x and xyz=xz. S is a semiband if it is generated by its idempotent elements, that is, elements satisfying x^2=x. S is an orthodox semigroup if it is regular and its idempotents (elements satisfying x^2=x) form a subsemigroup. S is a zero semigroup if there exists an element 0 in S such that xy=0 for all x,y in S. S is a zero group if there exists an element 0 in S such that S without 0 is a group and for all x in S we have that x0=0x=0. The MONOID package was used to determined which semigroups in the library satisfy the properties above. All of the resulting information is stored in the library. <#Include Label="Annihilators"> <#Include Label="DiagonalOfMultiplicationTable"> <#Include Label="DisplaySmallSemigroup"> <#Include Label="IndexPeriod"> <#Include Label="IsBand"> <#Include Label="IsBrandtSemigroup"> <#Include Label="IsCliffordSemigroup"> <#Include Label="IsCommutativeSemigroup"> <#Include Label="IsCompletelyRegularSemigroup"> <#Include Label="IsFullTransformationSemigroupCopy"> <#Include Label="IsGroupAsSemigroup"> <#Include Label="IsIdempotentGenerated"> <#Include Label="IsInverseSemigroup"> <#Include Label="IsLeftZeroSemigroup"> <#Include Label="IsMonogenicSemigroup"> <#Include Label="IsMonoidAsSemigroup"> <#Include Label="IsMultSemigroupOfNearRing"> <#Include Label="IsNGeneratedSemigroup"> <#Include Label="IsNIdempotentSemigroup"> <#Include Label="IsNilpotentSemigroup"> <#Include Label="IsOrthodoxSemigroup"> <#Include Label="IsRectangularBand"> <#Include Label="IsRegularSemigroup"> <#Include Label="IsRightZeroSemigroup"> <#Include Label="IsSelfDualSemigroup"> <#Include Label="IsSemigroupWithClosedIdempotents"> <#Include Label="IsSemigroupWithZero"> <#Include Label="IsSimpleSemigroup"> <#Include Label="IsSingularSemigroupCopy"> <#Include Label="IsZeroGroup"> <#Include Label="IsZeroSemigroup"> <#Include Label="IsZeroSimpleSemigroup"> <#Include Label="MinimalGeneratingSet"> <#Include Label="NilpotencyDegree">
Nilpotent semigroups by coclass A useful parameter in the classification of nilpotent semigroups is their coclass. For a finite nilpotent semigroup of order n and nilpotency degree d the coclass is defined as n-d. In lists up to (anti-)isomorphism are provided for nilpotent semigroups of coclass 0, 1, and 2. The semigroups in the lists are given by finite presentations. In this section we describe a function that allows to access such lists in &GAP;.

A further invariant of a nilpotent semigroup S is the size of its unique minimal generating set S\backslash S^2. The possible sizes for a particular coclass are restricted. Monogenic nilpotent semigroups are precisely those of coclass 0. For coclass d \geq 1 the size of the minimal generating set is at least 2 and at most d+1. <#Include Label="NilpotentSemigroupsByCoclass">
Starred Green's relations In this section functionality around the starred Green's relations is described. The five starred Green's relations are R^*, L^*, J^*, H^*, and D^*; two elements a, b from a semigroup S are R^*-related if for all x, y \in S^1: xa=ya if and only if xb = yb; and a and b are L^*-related if for all x, y \in S^1: ax=ay if and only if bx = by. In parallel to the classical Green's relations H^*=R^* \wedge L^* and D^*= R^* \vee L^* (but R^* \circ L^* = L^* \circ R^* does not hold in general). To describe J^* is a bit more technical. For a,b \in S one can show that b lies in J^*(a), the principal *-ideal of a, if and only if there exist c_0,c_1\ldots,c_n\in S and x_1,\ldots,x_n,y_1,\ldots, y_n\in S^1 such that a=c_0, b=c_n and c_iD^*x_ic_{i-1}y_i for 1\leq i\leq n. Then aJ^*b if and only if both a\in J^*(b) and b\in J^*(a)

Note that even for finite semigroups J^* does not always equal D^* (in contrast to the situation for classical Green's relations). Using Smallsemi it was shown that there exist semigroups of order 8 with J^*\neq D^* . <#Include Label="IsStarRelation"> <#Include Label="RStarRelation"> <#Include Label="RStarClassOperation"> <#Include Label="RStarClassAttribute"> <#Include Label="IsStarClass"> <#Include Label="RStarClasses">
Families of Semigroups In this section we describe how to find semigroups in the library satisfying a given set of parameters.

The following functions have the same usage but may return different values: , , , , , , , , .

The number of arguments should be odd: the first argument arg[1] should be a positive integer, a list of positive integers, or an enumerator or iterator of small semigroups satisfying or the even arguments arg[2i], if present, should be a function the odd arguments arg[2i+1] argument should be a possible value that can be returned by the function arg[2i]. In the case that the function is and arg[1] is a positive integer, then the returned value is a list of all semigroups S with arg[1] elements such that arg[2i](S)=arg[2i+1].

For example, to obtain all the commutative semigroups with 3 idempotents of sizes 2 to 5 use one of , , , with argument [2..5], IsCommutative, true, Is3IdempotentGenerated, true returns a list of all such semigroups, , , and return an enumerator and an iterator of all such semigroups, respectively. For more information on enumerators and iterators see , , or . The following are rules of thumb regarding the different situations when these functions should be used in order of slowest to fastest and greatest memory use to least: should be used if the number of semigroups is not too large and you want to keep the created semigroups in a list. or should be used when the functions in even indexed positions are those stored in the library (see ) or you want repeatedly search the same set of semigroups and there are too many to store in a list. Note that the enumerator stores the id numbers of its elements but not the semigroups themselves. Hence every time an element of the enumerator is required it must be recreated from the multiplication table data. should be used if the functions in even indexed positions are not stored in the library (see ) or if you just want to run through all the semigroups satisfying the specified parameters once only. Note that each new call of requires &GAP; to recompute its elements which may be slow if the functions are user-defined or not stored in the library. Further information on the relative virtues of these different commands can be found in Chapter .

As a further example, if we want to obtain a single non-simple semigroup with 7 elements and trivial automorphism group, then we would use one of the functions or with argument

7, IsSimpleSemigroup, false, x-> IsTrivial(AutomorphismGroup(x)), true should return an answer more quickly than . Also note that will always return the same semigroup, i.e. the first semigroup in the library with the given parameters. <#Include Label="AllSmallSemigroups"> <#Include Label="EnumeratorOfSmallSemigroups"> <#Include Label="EnumeratorOfSmallSemigroupsByIds"> <#Include Label="EnumeratorSortedOfSmallSemigroups"> <#Include Label="FuncsOfSmallSemisInEnum"> <#Include Label="FuncsOfSmallSemisInIter"> <#Include Label="IdsOfSmallSemigroups"> <#Include Label="IsEnumeratorOfSmallSemigroups"> <#Include Label="IsIdSmallSemigroup"> <#Include Label="IsIteratorOfSmallSemigroups"> <#Include Label="IteratorOfSmallSemigroups"> <#Include Label="NamesFuncsSmallSemisInEnum"> <#Include Label="NamesFuncsSmallSemisInIter"> <#Include Label="Nr3NilpotentSemigroups"> <#Include Label="NrSmallSemigroups"> <#Include Label="OneSmallSemigroup"> <#Include Label="PositionsOfSmallSemigroups"> <#Include Label="PositionsOfSmallSemisInEnum"> <#Include Label="PrecomputedSmallSemisInfo"> <#Include Label="RandomSmallSemigroup"> <#Include Label="SizesOfSmallSemisInEnum"> <#Include Label="SizesOfSmallSemisInIter"> <#Include Label="UpToIsomorphism">