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 semigroupExample for SYNTAX 1 :
z2m :=Semigroup([a,b],[[a*b,b*a],[a*b,a],[b^2,b],[a^2,a]]); -l1-- ------------- l2 ------------------- generators defining relationsExample 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
******************************************************************************