Finding all small monoids with the help of GAP

120 Views Asked by At

In GAP there is the command AllSmallGroups(n) to construct all finite groups of order $n$ up to isomorphism.

Question: Is there a similar method (or package) in GAP that produces all finite monoids (or even semigroups) of order $n$ up to isomorphism?

This is probably a much harder problem than for groups but already a program which works till $n=10$ might be helpful.

2

There are 2 best solutions below

1
On BEST ANSWER

The Smallsemi package (https://gap-packages.github.io/smallsemi/), as its description says, "is a data library of semigroups of small size. It provides all semigroups with at most 8 elements as well as various information about these objects". For example:

gap> LoadPackage("smallsemi");
-----------------------------------------------------------------------------
Smallsemi -   A library of small semigroups
by Andreas Distler & James Mitchell
For contents, type: ?Smallsemi:
Loading Smallsemi 0.6.12 ...
-----------------------------------------------------------------------------
true
gap> NrSmallSemigroups(6);
15973
gap> NrSmallSemigroups(3);
18
gap> AllSmallSemigroups(3,IsMonoidAsSemigroup,true);
#I  Smallsemi: loading data for semigroup properties. Please be patient.
[ <small semigroup of size 3>, <small semigroup of size 3>, 
  <small semigroup of size 3>, <small semigroup of size 3>, 
  <small semigroup of size 3>, <small semigroup of size 3> ]

Please see the documentation at https://gap-packages.github.io/smallsemi/doc/chap0.html. In particular, note functions like EnumeratorOfSmallSemigroups and IteratorOfSmallSemigroups which should help to deal with large collections of semigroups.

Remark: The number of semigroups and monoids of small orders is given in OEIS A001423 and A058133 respectively.

0
On

I have not seen such a construction package, and I think it is unlikely that such a package exists:

From experience in constructing groups (or combinatorial structures) the enumeration process relies on two parts: An extension process of smaller objects (cohomology in the case of groups), as well as an effective isomorphism test.

I have seen neither for monoids (though one could try to implement brute-force versions) -- indeed https://mathoverflow.net/questions/308245/how-to-show-two-semigroups-are-isomorphic indicates that the isomorphism test for semigroups would be harder than one for groups.