Goto Chapter: Top 1 2 3 4 Bib Ind

### 3 Drawings of semigroups

There are some pictures that may give a lot of information about a semigroup. This is the case of the egg-box picture of the D-classes, the right Cayley graph of a finite monoid and the Schützenberger graphs of a finite inverse monoid.

#### 3.1 Drawing the D-class of an element of a semigroup

##### 3.1-1 DrawDClassOfElement
 ‣ DrawDClassOfElement( arg ) ( function )

This function uses DotForDrawingDClassOfElement (3.1-2) to compute the dot code to produce the image that is then displayed. It takes as arguments a semigroup followed by a transformation which is the element whose D-class will be drawn. Optionally we can then specify n lists of elements and the elements of each list will be drawn in different colours. Finally, if the last argument is the integer 1 then the elements will appear as transformations, otherwise they will appear as words. The idempotents will be marked with a * before them.

This last optional argument may also be the integer 2 and in this case the elements will appear as integers, where i represents the element Elements(S)[i].

gap> DrawDClassOfElement(poi3, Transformation([1,4,3,4]));
gap> DrawDClassOfElement(poi3, Transformation([1,4,3,4]),1);
gap> DrawDClassOfElement(poi3, Transformation([1,4,3,4]),
[Transformation( [ 2, 3, 4, 4 ] )],1);
gap> DrawDClassOfElement(poi3, Transformation([1,4,3,4]),
[Transformation( [ 2, 3, 4, 4 ] ), Transformation( [ 2, 4, 3, 4 ] )],
[Transformation( [ 2, 4, 3, 4 ] )],1);
gap> DrawDClassOfElement(poi3, Transformation([1,4,3,4]),
[Transformation( [ 2, 4, 3, 4 ] )],"Dclass",1);


This is the image produced by the first command in the previous example:

This is the image produced by the fourth command in the previous example:

This is the image produced by the last command in the previous example:

##### 3.1-2 DotForDrawingDClassOfElement
 ‣ DotForDrawingDClassOfElement( arg ) ( function )

This function computes the dot code that can be used to produce a drawing for the D-class of an element of a semigroup. This can be done by using the function DrawDClassOfElement (3.1-1) (if the system is properly configured) or by the user in some independent way. The arguments and options are the same than those of DrawDClassOfElement (3.1-1).

      gap> DotForDrawingDClassOfElement(poi3,Transformation([1,4,3,4]));
"digraph  DClassOfElement {\ngraph [center=yes,ordering=out];\nnode [shape=pla\
><TD BORDER=\"0\"><TABLE CELLSPACING=\"0\"><TR><TD BGCOLOR=\"white\" BORDER=\"\
0\">*abc</TD></TR>\n</TABLE></TD><TD BORDER=\"0\"><TABLE CELLSPACING=\"0\"><TR\
><TD BGCOLOR=\"white\" BORDER=\"0\">a</TD></TR>\n</TABLE></TD><TD BORDER=\"0\"\
><TABLE CELLSPACING=\"0\"><TR><TD BGCOLOR=\"white\" BORDER=\"0\">ab</TD></TR>\
\n</TABLE></TD></TR>\n<TR><TD BORDER=\"0\"><TABLE CELLSPACING=\"0\"><TR><TD BG\
COLOR=\"white\" BORDER=\"0\">bc</TD></TR>\n</TABLE></TD><TD BORDER=\"0\"><TABL\
E CELLSPACING=\"0\"><TR><TD BGCOLOR=\"white\" BORDER=\"0\">*bca</TD></TR>\n</T\
ABLE></TD><TD BORDER=\"0\"><TABLE CELLSPACING=\"0\"><TR><TD BGCOLOR=\"white\" \
BORDER=\"0\">b</TD></TR>\n</TABLE></TD></TR>\n<TR><TD BORDER=\"0\"><TABLE CELL\
SPACING=\"0\"><TR><TD BGCOLOR=\"white\" BORDER=\"0\">c</TD></TR>\n</TABLE></TD\
><TD BORDER=\"0\"><TABLE CELLSPACING=\"0\"><TR><TD BGCOLOR=\"white\" BORDER=\"\
0\">ca</TD></TR>\n</TABLE></TD><TD BORDER=\"0\"><TABLE CELLSPACING=\"0\"><TR><\
TD BGCOLOR=\"white\" BORDER=\"0\">*cab</TD></TR>\n</TABLE></TD></TR>\n</TABLE>\
>];\n}\n"


By using Print (or PrinTo, if one wants to print to a file) the string is displayed as follows:

gap> Print(last);
digraph  DClassOfElement {
graph [center=yes,ordering=out];
node [shape=plaintext];
1 [label=<
<TABLE BORDER="0" CELLBORDER="0" CELLPADDING="0" CELLSPACING="0" PORT="1">
<TR><TD BORDER="0"><TABLE CELLSPACING="0"><TR><TD BGCOLOR="white" BORDER="0">*\
abc</TD></TR>
</TABLE></TD><TD BORDER="0"><TABLE CELLSPACING="0"><TR><TD BGCOLOR="white" BOR\
DER="0">a</TD></TR>
</TABLE></TD><TD BORDER="0"><TABLE CELLSPACING="0"><TR><TD BGCOLOR="white" BOR\
DER="0">ab</TD></TR>
</TABLE></TD></TR>
<TR><TD BORDER="0"><TABLE CELLSPACING="0"><TR><TD BGCOLOR="white" BORDER="0">b\
c</TD></TR>
</TABLE></TD><TD BORDER="0"><TABLE CELLSPACING="0"><TR><TD BGCOLOR="white" BOR\
DER="0">*bca</TD></TR>
</TABLE></TD><TD BORDER="0"><TABLE CELLSPACING="0"><TR><TD BGCOLOR="white" BOR\
DER="0">b</TD></TR>
</TABLE></TD></TR>
<TR><TD BORDER="0"><TABLE CELLSPACING="0"><TR><TD BGCOLOR="white" BORDER="0">c\
</TD></TR>
</TABLE></TD><TD BORDER="0"><TABLE CELLSPACING="0"><TR><TD BGCOLOR="white" BOR\
DER="0">ca</TD></TR>
</TABLE></TD><TD BORDER="0"><TABLE CELLSPACING="0"><TR><TD BGCOLOR="white" BOR\
DER="0">*cab</TD></TR>
</TABLE></TD></TR>
</TABLE>>];
}


#### 3.2 Drawing the D-classes of a semigroup

##### 3.2-1 DrawDClasses
 ‣ DrawDClasses( arg ) ( function )

This function is similar to the previous one, except that this one draws all the D-classes of the semigroup given as the first argument. It then takes optionally n lists of elements and the elements of each list will be drawn in different colours. It also accepts, as an optional argument, the integer 1, to specify whether the elements will appear as words or as transformations as in the previous function. The idempotents will be marked with a * before them.

The dot code is computed by DotForDrawingDClasses (3.2-2).

This last optional argument may also be the integer 2 and in this case the elements will appear as integers, where i represents the element Elements(S)[i].

gap> DrawDClasses(poi3);
gap> DrawDClasses(poi3, [Transformation( [ 2, 3, 4, 4 ] ),
Transformation( [ 2, 4, 3, 4 ] )],
[Transformation( [ 2, 4, 3, 4 ] )],1);


This is the image produced by the first command in the previous example:

This is the image produced by the second command in the previous example:

##### 3.2-2 DotForDrawingDClasses
 ‣ DotForDrawingDClasses( arg ) ( function )

This function computes the dot code that can be used to produce a drawing for the D-class of an element of a semigroup. This can be done by using the function DrawDClasses (3.2-1) (if the system is properly configured) or by the user in some independent way. The arguments and options are the same than those of DrawDClasses (3.2-1).

gap> Print(DotForDrawingDClasses(poi3));
digraph  DClasses {
graph [center=yes,ordering=out];
node [shape=plaintext];
## ... many more lines ...
</TABLE></TD></TR>
</TABLE>>];
4:4 -> 3:3;
3:3 -> 2:2;
2:2 -> 1:1;
}


#### 3.3 Cayley graphs

##### 3.3-1 DrawRightCayleyGraph
 ‣ DrawRightCayleyGraph( S ) ( function )

Draws the right Cayley graph of a finite monoid or semigroup S.

##### 3.3-2 DrawCayleyGraph
 ‣ DrawCayleyGraph( S ) ( function )

This function is a synonym of DrawRightCayleyGraph (3.3-1).

For example, the command DrawCayleyGraph(b21); would produce the following image (where state i represents the element Elements(S)[i], the neutral element is coloured in "light blue" and all other idempotents are coloured in "light coral"):

##### 3.3-3 DotForDrawingRightCayleyGraph
 ‣ DotForDrawingRightCayleyGraph( S ) ( function )

This function computes the dot code that is used by the previous function and can also be used by the reader in some independent way.

#### 3.4 Schützenberger graphs

##### 3.4-1 DrawSchutzenbergerGraphs
 ‣ DrawSchutzenbergerGraphs( S ) ( function )

Draws the Schützenberger graphs of the inverse semigroup S.

For example, DrawSchutzenbergerGraphs(poi3); would produce the following:

##### 3.4-2 DotForDrawingSchutzenbergerGraphs
 ‣ DotForDrawingSchutzenbergerGraphs( arg ) ( function )

This function computes the dot code that can be used to produce a drawing for the Schutzenberger Graphs of an inverse semigroup. This can be done by using the function DrawSchutzenbergerGraphs (3.4-1) (if the system is properly configured) or by the user in some independent way. The argument is an inverse semigroup.

gap> DotForDrawingSchutzenbergerGraphs(poi3);
"digraph  SchutzenbergerGraphs{\ncompound=true;\nsubgraph cluster4{\n1 [shape=\
circle];\n}\nsubgraph cluster3{\n2 -> 4 [label=\"a\",color=red];\n3 -> 2 [labe\
l=\"c\",color=green];\n4 -> 3 [label=\"b\",color=blue];\n2 [shape=circle];\n3 \
[shape=circle];\n4 [shape=circle];\n}\nsubgraph cluster2{\n5 -> 5 [label=\"b\"\
,color=blue];\n5 -> 6 [label=\"c\",color=green];\n6 -> 5 [label=\"a\",color=re\
d];\n6 -> 7 [label=\"c\",color=green];\n7 -> 7 [label=\"a\",color=red];\n7 -> \
6 [label=\"b\",color=blue];\n5 [shape=circle];\n6 [shape=circle];\n7 [shape=ci\
rcle];\n}\nsubgraph cluster1{\n8 -> 8 [label=\"a\",color=red];\n8 -> 8 [label=\
\"b\",color=blue];\n8 -> 8 [label=\"c\",color=green];\n8 [shape=circle];\n}\n1\
ter2,color=cornflowerblue];\n}\n"


By using Print (or PrinTo, if one wants to print to a file) the string is displayed as follows:

gap> Print(last);
digraph  SchutzenbergerGraphs{
compound=true;
subgraph cluster4{
1 [shape=circle];
}
subgraph cluster3{
2 -> 4 [label="a",color=red];
3 -> 2 [label="c",color=green];
4 -> 3 [label="b",color=blue];
2 [shape=circle];
3 [shape=circle];
4 [shape=circle];
}
subgraph cluster2{
5 -> 5 [label="b",color=blue];
5 -> 6 [label="c",color=green];
6 -> 5 [label="a",color=red];
6 -> 7 [label="c",color=green];
7 -> 7 [label="a",color=red];
7 -> 6 [label="b",color=blue];
5 [shape=circle];
6 [shape=circle];
7 [shape=circle];
}
subgraph cluster1{
8 -> 8 [label="a",color=red];
8 -> 8 [label="b",color=blue];
8 -> 8 [label="c",color=green];
8 [shape=circle];
}