MONOiD: an Overview. [MONOiD]

Overview.

MONOiD is a GAP share package for transformation monoids and related objects. It contains functions that deal with A transformation of degree n is a map from the set {1, ..., n} to itself. In MONOiD a transformation is represented by its image list.
   gap> a:= Transformation( [ 8, 6, 9, 6, 5, 4, 3, 1, 11, 3, 9 ] );
   Transformation( [ 8, 6, 9, 6, 5, 4, 3, 1, 11, 3, 9 ] )
   gap> 1^a;
   8
   gap> Image(a);
   [ 1, 3, 4, 5, 6, 8, 9, 11 ]
   gap> Rank(a);
   8
   gap> Degree(a);
   11
   gap> a^0;
   Transformation( [ 1 .. 11 ] )
Transformations act from the right on {1, ..., n}, their multiplication is defined accordingly.
   gap> b:= Transformation( [ 2, 1, 11, 5, 9, 9, 9, 2, 3, 10, 11 ] );;
   gap> a * b;
   Transformation( [ 2, 9, 3, 9, 9, 5, 11, 2, 11, 11, 3 ] )
A transformation monoid of degree n is a monoid generated by transformations of degree n.
   gap> M:= Monoid(a, b);
   Monoid( [ Transformation( [ 8, 6, 9, 6, 5, 4, 3, 1, 11, 3, 9 ] ), 
     Transformation( [ 2, 1, 11, 5, 9, 9, 9, 2, 3, 10, 11 ] ) ] )
   gap> Size(M);
   137
MONOiD provides functions that determine the size of a transformation monoid M, can list the elements of M or decide membership of any transformation of degree n in M. Moreover, the Green class structure of M can be determined.
   gap> Length(DClasses(M));
   63
A finite binary relation of degree n is a graph with vertex set {1, ..., n}. In MONOiD such a relation is represented by its list of successors.
   gap> d:= Relation( [ [ ], [ 1 ], [ 1, 2 ], [ 1, 2, 3 ] ] );
   Relation( [ [  ], [ 1 ], [ 1, 2 ], [ 1, 2, 3 ] ] )
Relations can be multiplied, checked for properties like reflexive, symmetric, transitive, and closures can be formed. Relations of degree n can be used to generate a monoid.

The action of a transformation monoid on {1, ..., n} induces actions on tuples, subsets, ... which can be used to build new transformation monoids from given ones.

   gap> orb:= StrongOrbit(M, [1,4,5], Size, OnSets);
   [ [ 1, 4, 5 ], [ 5, 6, 8 ] ]
   gap> act:= ActionWithZero(M, orb, OnSets);
   Monoid( [ Transformation( [ 2, 1, 3 ] ), Transformation( [ 3, 3, 3 ] ) ] )
   gap> Size(act);
   3
(For the precise meaning of the commands in the above example we refer to the MONOiD manual.) The concept of monoid actions can be used to turn a monoid of binary relations into a transformation monoid.
[MONOiD]