- (finite) transformations,
- transformation monoids,
- finite binary relations, and
- actions of monoids on various sorts of sets.

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

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); 137MONOiD 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)); 63A

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.