> < ^ Date: Fri, 13 Jan 1995 17:30:00 +0100
> < ^ From: Tim Boykett <tim@bruckner.stoch.uni-linz.ac.at >
< ^ Subject: Re: lists and words

You mentioned free monoids in GaP:

One of the students here has implemented a semigroup package
for Gap, doing some decent stuff: It was his thesis project
here, it should be okay. It includes Knuth Bendix stuff,

It should be in the GaP incoming directory, on samson. If not,
get in touch.

There should be a semigroup.doc and a semigroup.g

Cheers

Tim

here is the DOC file

```*******************************************************************************

***   SEMIGROUP FUNCTIONS FOR GAP ***  V 1.30 12.12.1994 (c) Widi Marcel Oliver

*******************************************************************************
```
```Semigroup( l1, l2 );
```

defines a semigroup;
SYNTAX 1
arguments : l1 ... set of abstract generators
l2 ... set of defining relations (list of lists)
SYNTAX 2
arguments : l1 ... the semigroup table
l2 ... the elements of the semigroup

Example for SYNTAX 1 :

```z2m :=Semigroup([a,b],[[a*b,b*a],[a*b,a],[b^2,b],[a^2,a]]);
-l1--  ------------- l2 -------------------
generators     defining relations
```

Example for SYNTAX 2 :

```z4m := Semigroup([[a,a,a,a],[a,b,c,d],[a,c,a,c],[a,d,c,b]],[a,b,c,d]);
--------------- l1 --------------------   -- l2 ---
operation table                  elements
```

IsSemigroup( g );

checks if g is defined as a semigroup

DefSgCommutative( g );

define a semigroup presentation as commutative

DefAsNeutral( g, x );

define the abstract generator x to be the neutral element of g

```SgTable( g {,"V"} {,order} );
```

computes the table of the semigroup g using some improved
Knuth-Bendix algorithm
"v" (optional) ... display progress of computation
order (optional) ... length-lexicographic order : 1
lexicographic order : 2
power-lexicographic order : 3

```MinGens( g {,order} {,"V"}); *IMPROVED*
```

try al permutations of ordering generators to find a minimal
subset of generators for the semigroup
optional parameters : see SgTable

```RedGens( g {,order} {,"V"}); *NEW*
```

'Greedy Algorithm' for finding a minimal set of generators for a
semigroup in very short time
optional parameters : see SgTable

```Size( g );
```

computes the number of elements of g

```Elements( g );
```

computes the elements of g

```SgP( g, x, y );
```

computes the product of x and y in the semigroup g

IsSgMonoid( g );

checks if the semigroup g is a monoid

```IsSgGroup( g );
```

checks if the semigroup g is a group

```SgNeutral( g );
```

computes neutral element if g is a monoid; returns false otherwise

IsSgCommutative( g );

checks if the semigroup g is commutative

SgIdempotents( g );

computes the idempotent elements of g

IsGroupInvertible( g, x );

checks, if the element x of g is (group-)invertible

SgGroupKernel( g );

computes the group kernel of a semigroup

SgCentralizer( g, s );

computes centralizer of the subset s of the semigroup g

```SgCenter( g );
```

computes the center of the semigroup g

IsSgIdempotent( g );

checks if the semigroup g is idempotent

SgRegulars( g );

computes the regular elements of g

IsSgRegular( g );

checks if the semigroup g is regular

SgCompletelyRegulars( g );

computes the completely regular elements of g

IsSgCompletelyRegular( g );

checks if the semigroup g is completely regular

IsSgInverse( g );

checks if the semigroup g is inverse

IsCliffordSg( g );

checks if the semigroup g is a Clifford semigroup

SubSemigroup( g, s );

computes the subsemigroup of g generated by the subset s of g

IsSubSemigroup( g, s );

checks if s is a subsemigroup of g

SubSemigroups( g );

computes all subsemigroups of g

```SgOrder( g, a );
```

computes the order of the element a in the semigroup g

```SgDistance( g1, g2 );
```

computes the distance between semigroups g1 and g2 where
there must be standard-epimorphism between g1 and g2

```SgD( g1, g2 );
```

computes the distance between semigroups g1 and g2 where
g1 and g2 only must have same set of generators

```SgGCD( g1, g2 );
```

computes the greatest common divisor of semigroups g1,g2

SgLeftIdeal( g, s );

computes left ideal generated by s in semigroup g

SgRightIdeal( g, s );

computes right ideal generated by s in semigroup g

```SgIdeal( g, s );
```

computes ideal generated by s in semigroup g

IsSgLeftIdeal( g, s );

checks if s is a left ideal in g

SgRightIdeal( g, s );

checks if s is a right ideal in g

```IsSgIdeal( g, s );
```

checks if s is an ideal in g

```SgEpi( g, h );
```

computes all epimorphisms from g in h

```SgMono( g, h );
```

computes all monomorphisms from g in h

```SgIso( g, h );
```

computes all isomorphisms from g in h

```SgHomo( g, h );
```

computes all homomorphisms from g in h

```SgEndo( g );
```

computes all endomorphism on g

```SgAuto( g );
```

computes all automorphisms on g

IsSgEmbeddable( g1, g2 );

checks, if the semigroup g1 is embeddable in the semigroup g2

```Ver();
```

tells you which version of the semigroup functions you are using

```******************************************************************************
watch this board for news !

NEW since V 1.27 :
```

* The function RedGens() has been added
* The function MinGens() has been modified : Interrupting after the first
step will most likely yield the correct result
* the warning messages on some machines should not occur any more

```******************************************************************************
```

> < [top]