<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Book SYSTEM "gapdoc.dtd"> <!-- MakeGAPDocDoc("/Users/jdm/Maths/Computation/GAP/gapdev/pkg/monoid/doc/", "monoid.xml", [ "../gap/general.gd", "../gap/autos.gd", "../gap/transform.gd", "../gap/greens.gd", "../gap/orbits.gd", "../gap/properties.gd", "../gap/semigroups.gd", "../gap/semihomo.gd"], "manual");; --> <Book Name="MONOID"> <TitlePage> <Title>The <Package>MONOID</Package> Package</Title> <Version>Version 3.1.3</Version> <Author>J. D. Mitchell <Email>jdm3@st-and.ac.uk</Email> </Author> <Copyright>©right; 2008 J. D. Mitchell.<P/> </Copyright> <Colophon> If you use the <Package>MONOID</Package> package, I would really appreciate it if you would let me know by sending me an email to <Email>jdm3@st-and.ac.uk</Email>. If you notice that there are any features missing that you think are important or if you find a bug, please let me know. </Colophon> <Acknowledgements> The author would like to thank P. v. Bunau, A. Distler, S. Linton, J. Neubueser, V. Maltcev, M. Neuhoeffer, M. R. Quick, E. F. Robertson, and N. Ruskuc for their help and suggestions. Special thanks go to J. Araujo for his mathematical suggestions. <P/> I would also like to acknowledge the support of the Centre of Algebra at the University of Lisbon, and of EPSRC grant number GR/S/56085/01. <Br/><Br/> </Acknowledgements> </TitlePage> <TableOfContents/> <Body> <Chapter Label="Monoid"> <Heading>The <Package>MONOID</Package> package</Heading> <!-- ############### --> <Section><Heading>Introduction</Heading> This manual describes the <Package>MONOID</Package> package version 3.1.3 for computing with transformation semigroups. <Package>MONOID</Package> 3.1.3 is an updated version of the package with the same name for &GAP; 3; see <URL>http://schmidt.nuigalway.ie/monoid/index.html</URL> for more information about the original <Package>MONOID</Package> by Goetz Pfeiffer and Steve A. Linton, Edmund F. Robertson and Nik Ruskuc. <P/> <Package>MONOID</Package> 3.1.3 retains all the functionality of the original <Package>MONOID</Package> package. In particular, <Package>MONOID</Package> 3.1.3 contains more efficient methods than those available in the &GAP; library for computing orbits, calculating Green's classes, finding the size, the elements, and testing membership in transformation semigroups; see Chapters <Ref Chap="orbits"/> and <Ref Chap="greens"/>. After <Package>MONOID</Package> has been loaded many of these methods are automatically used in preference to those in the library and do not need to be called explicitly by the user. These methods are described in <Cite Key="pfeiffer1"/> and the algorithms themselves are described in <Cite Key="pfeiffer2"/>.<P/> In addition, there are new methods for testing if a semigroup satisfies a particular property, such as if it is regular, simple, inverse, or completely regular, see Chapter <Ref Chap="properties"/>; methods for computing the automorphism group of a transformation semigroup see Section <Ref Sect="autos"/>; methods for finding homomorphisms and isomorphism between some types of semigroups see Chapter <Ref Chap="homo"/>; and functions to create some well-known semigroups see Chapter <Ref Chap="special"/>. The property testing methods are described in <Cite Key="largest"/> and the method for computing the automorphism group of a semigroup is described in <Cite Key="computing"/>. <P/> The <Package>MONOID</Package> package is written in &GAP; code only but relies on the <Package>GRAPE</Package> package Version 4.2 or higher in the methods for computing the automorphism group of a semigroup. The following functions can only be used fully if <Package>GRAPE</Package> is fully installed (and loaded): <List> <Item> <Ref Attr="AutomorphismGroup"/> with argument satisfying <Ref Prop="IsTransformationSemigroup" BookName="ref"/> or <Ref Prop="IsReesZeroMatrixSemigroup" BookName="ref"/></Item> <Item> <Ref Oper="RightTransStabAutoGroup"/> with argument satisfying <Ref Prop="IsReesZeroMatrixSemigroup" BookName="ref"/></Item> <Item><Ref Func="RZMSGraph"/></Item> <Item><Ref Oper="RZMSInducedFunction"/></Item> <Item><Ref Oper="RZMStoRZMSInducedFunction"/></Item> <Item><Ref Oper="IsomorphismSemigroups"/> with both arguments satisfying <Ref Prop="IsReesZeroMatrixSemigroup" BookName="ref"/></Item> </List> Installation of <Package>GRAPE</Package> is described in the <C>README</C> file of the <Package>GRAPE</Package> distribution and in the section entitled `Installing the GRAPE Package' of the <Package>GRAPE</Package> manual; see <URL> http://www.maths.qmul.ac.uk/~leonard/grape/ </URL> or the main &GAP; webpages for more information. <P/> If you want to take advantage of the online help facilities in <Package>MONOID</Package>, then the <Package>gapdoc</Package> package Version 1.1 or higher is also required; see <URL> http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc/ </URL> for further details of how to obtain and install <Package>gapdoc</Package>. </Section> <!-- ############### --> <Section Label="install"><Heading>Installing <Package>MONOID</Package></Heading> In this section we give a brief description of how to start using <Package>MONOID</Package>. If you have any problems getting <Package>MONOID</Package> working, then please email me directly at <Email>jdm3@st-and.ac.uk</Email>. <P/> It is assumed that you have a working copy of &GAP; with version number 4.4.10 or higher. The most up-to-date version of &GAP; and instructions on how to install it can be obtained from the main &GAP; webpage <URL> http://www.gap-system.org </URL> Those functions in <Package>MONOID</Package> described in Chapter <Ref Chap="homo"/> relating to automorphism groups of semigroups require the <Package>GRAPE</Package> (for computing with graphs and groups) to be loaded. In particular, <Package>GRAPE</Package> must be installed in a UNIX operating system so that the automorphism group and isomorphism testing functions (for graphs) can be used.<P/> Please go to <URL> http://www.maths.qmul.ac.uk/~leonard/grape/ </URL> or the main &GAP; webpage for further details on how to obtain and install <Package>GRAPE</Package>. <P/> The following is a summary of the steps that should lead to a successful installation of <Package>MONOID</Package>. <List> <Item> download the package archive <C>monoid3r1p3.tar.gz</C> or <C>monoid3r1p3.tar.bz2</C> from <URL>http://www-history.mcs.st-and.ac.uk/~jamesm/monoid/index.html </URL> </Item> <Item> unzip & untar the file, this should create a directory called <C>MONOID</C>.</Item> <Item> move the directory <C>MONOID</C> into the <C>pkg</C> directory of your &GAP; directory (the one containing the directories <C>lib</C>, <C>doc</C>, <C>pkg</C>, and so on)</Item> <Item> start &GAP; in the usual way</Item> <Item> type <C>LoadPackage("monoid");</C></Item> </List> Below is an example of an installation of <Package>MONOID</Package> in UNIX where <C>GAPROOT</C> should be substituted with the main &GAP; directory (the one containing the folders `bin', `lib', and so on) in your installation of &GAP;.<P/> <Example> > gunzip monoid3r1p3.tar.gz > tar -xf monoid3r1p3.tar > mv MONOID GAPROOT/pkg > gap [ ... ] gap> LoadPackage("monoid"); Loading MONOID 3.1.3 by James Mitchell (www-groups.mcs.st-and.ac.uk/~jamesm) For help, type: ?the monoid package true gap> </Example> Presuming that the above steps can be completed successfully you will be running the <Package>MONOID</Package> package!<P/> If you want to check that the package is working correctly, please see Section <Ref Sect="testing"/>. <P/> <B>Please note:</B> before you can used <Package>MONOID</Package> fully you must install <Package>GRAPE</Package> as described above. </Section> <!-- ############### --> <Section Label="testing"><Heading>Testing <Package>MONOID</Package></Heading> In this section we describe how to test that <Package>MONOID</Package> is working as intended. To test that <Package>MONOID</Package> is installed correctly copy the following lines into &GAP;. <Log> LoadPackage( "monoid" );; dirs := DirectoriesPackageLibrary( "monoid", "tst" );; Read(Filename( dirs, "installtest.g" ) ); </Log> and press <C>return</C>. Please note that it will take a few moments before the tests are complete.<P/> If the output looks like the following, then it is probable that you have a fully working copy of <Package>MONOID</Package> 3.1.3.<P/> <Example> gap> LoadPackage( "monoid" );; gap> dirs := DirectoriesPackageLibrary( "monoid", "tst" );; gap> Read( Filename( dirs, "installtest.g" ) );; + install_no_grape.tst 3.1.3 + GAP4stones: 1 + install_with_grape.tst 3.1.3 + GAP4stones: 2 </Example> If you want to perform more extensive tests, then copy the following lines into &GAP;. <Log> LoadPackage( "monoid" );; dirs := DirectoriesPackageLibrary( "monoid", "tst" );; Read(Filename( dirs, "testall.g" ) ); </Log> Please note that these tests could take a long time to finish.<P/> If something goes wrong, then please review the instructions in Section <Ref Sect="install"/> and ensure that <Package>MONOID</Package> has been properly installed. If you continue having problems, please email me at <Email>jdm3@st-and.ac.uk</Email>. </Section> <!-- ############### --> <Section><Heading>Changes</Heading> <List> <Item>from 3.1.2 to 3.1.3: the method for <A>PreImagesRepresentative</A> for a semigroup homomorphism by function now tests whether the homomorphism is bijective and total before trying to find preimages. Some other minor corrections were made to the documentation and webpages.</Item> <Item>from 3.1.1 to 3.1.2: <List><Item>the following new functions have been introduced: <Ref Oper="TransformationActionNC"/>, <Ref Attr="SmallestIdempotentPower"/>, <Ref Func="IsKerImgOfTransformation"/>, <Ref Oper="TransformationByKernelAndImage"/>, <Ref Oper="AllTransformationsWithKerAndImgNC"/>, <Ref Oper="AsBooleanMatrix"/>, <Ref Func="KerImgOfTransformation"/>, <Ref Oper="RandomIdempotent"/>, <Ref Attr="InversesOfTransformation"/>, <Ref Oper="KiselmanSemigroup"/>, </Item> <Item>the following functions were renamed: <List> <Item> <C>PermRepTrans</C> was renamed <C>AsPermOfRange</C></Item> <Item> <C>ImagesTransformationMonoid</C> was renamed <C>ImagesOfTransSemigroup</C></Item> <Item> <C>GradedImagesTransformationMonoid</C> was renamed <C>GradedImagesOfTransSemigroup</C></Item> <Item> <C>KernelsTransformationMonoid</C> was renamed <C>KernelsOfTransSemigroup</C></Item> <Item> <C>GradedKernelsTransformationMonoid</C> was renamed <C>GradedKernelsOfTransSemigroup</C></Item> </List></Item> <Item>the following bugs were fixed: <List> <Item> a bug relating to the definition of the semigroup of order preserving functions was resolved</Item> </List></Item> </List></Item> <Item>from 3.1 to 3.1.1: fixed a bug that produced an error when loading MONOID with the GRAPE package present but not fully installed.</Item> <Item>from 2 to 3: <List> <Item> new methods for testing if a semigroup satisfies a particular property, such as if it is regular, simple, inverse, or completely regular, see Chapter <Ref Chap="properties"/>;</Item> <Item> implementations of new algorithms for computing the automorphism group of an arbitrary semigroup generated by transformations including an interactive function that allows the user to decide how the computation should proceed, see Chapter <Ref Chap="homo"/>; </Item> <Item> functions for finding automorphisms of Rees matrix semigroups and Rees <C>0</C>-matrix semigroups; see Section <Ref Sect="rees"/>.</Item> <Item> functions for defining homomorphisms and isomorphisms between some types of semigroups; see Chapter <Ref Chap="homo"/>.</Item> </List> </Item> </List> </Section> <!-- ############### --> <Section><Heading>Forthcoming Features</Heading> The features are currently under development and will be available in a future version of <Package>MONOID</Package>: <List> <Item> the number of special types of semigroups available in <Package>MONOID</Package> will be expanded to include all of the standard examples of transformation semigroups and some matrix semigroups. </Item> <Item> methods analogous to those used to find Green's relations and other structural properties of transformation semigroups in the current version of <Package>MONOID</Package> but for semigroups generated by partial transformations, binary relations, and matrix semigroups. </Item> <Item> a suite of functions for computing with inverse semigroups generated by partial bijections, including finding faithful representations of smaller degree and small generating sets. </Item> <Item> an algorithm for finding a small generating set of a semigroup. </Item> <!--<Item> an algorithm for determining the congruences of a completely simple or regular semigroup. </Item> <Item> methods to construct completely regular semigroups as a semilattice of simple semigroups and Clifford semigroups as strong semilattices of groups. </Item>--> </List> </Section> </Chapter> <!-- ############### --> <Chapter Label="general"><Heading>Transformations</Heading> The functions described in this section extend the functionality of &GAP; relating to transformations. <Section><Heading>Creating Transformations</Heading> <#Include Label="TransformationByKernelAndImage"> <#Include Label="AllTransformationsWithKerAndImg"> <#Include Label="Idempotent"> <#Include Label="RandomIdempotent"> <#Include Label="RandomTransformation"> <#Include Label="TransformationActionNC"> </Section> <Section><Heading>Properties & Attributes</Heading> <#Include Label="IsTransversal"> <#Include Label="IsKerImgOfTransformation"> <#Include Label="KerImgOfTransformation"> <#Include Label="IsRegularTransformation"> <#Include Label="IndexPeriodOfTransformation"> <#Include Label="SmallestIdempotentPower"> <#Include Label="InversesOfTransformation"> </Section> <Section><Heading>Changing Representation</Heading> <#Include Label="AsBooleanMatrix"> <#Include Label="AsPermOfRange"> </Section> </Chapter> <!-- ############### --> <Chapter Label="orbits"><Heading>Monoid Actions and Orbits </Heading> <Section><Heading>Introduction</Heading> The functions described in this section relate to how a transformation semigroup acts on its underlying set. <P/> Let <C>S</C> be a transformation semigroup of degree <C>n</C>. Then the <E>orbit</E> of <C>i</C> in <C>{1,...,n}</C> is the set of elements <C>j</C> in <C>{1,...,n}</C> such that there exists <C>f</C> in <C>S</C> where <C>(i)f=j</C>. Note that the essential difference between monoid orbits and group orbits is that monoid orbits do not describe an equivalence relation on <C>S</C>. In particular, the relation described by monoid orbits is not symmetric. <P/> The <E>strong orbit</E> of <C>i</C> in <C>{1,...,n}</C> is the set of elements <C>j</C> in <C>{1,...,n}</C> such that there exists <C>f, g</C> in <C>S</C> where <C>(i)f=j</C> and <C>(j)g=i</C>.<P/> Recall that a <E>grading</E> is a function <C>f</C> from a transformation semigroup <C>S</C> of degree <C>n</C> to the natural numbers such that if <C>s</C> in <C>S</C> and <C>X</C> is a subset of <C>{1,...,n}</C>, then <C>(Xs)f</C> is at most <C>(X)f</C>. </Section> <!-- ############### --> <Section><Heading>Actions</Heading> In addition to the actions define in the reference manual <Ref Sect="Basic Actions" BookName="ref"/> the following two actions are available in <Package>MONOID</Package>. <#Include Label="OnTuplesOfSetsAntiAction"> <#Include Label="OnKernelsAntiAction"> </Section> <!-- ############### --> <Section><Heading>General Orbits</Heading> The following functions allow the calculation of arbitrary orbits in transformation semigroups. Several more specific orbits that are often useful are given in Section <Ref Sect="specorbits"/>. <#Include Label="MonoidOrbit"> <#Include Label="MonoidOrbits"> <#Include Label="StrongOrbit"> <#Include Label="StrongOrbits"> <#Include Label="GradedOrbit"> <#Include Label="ShortOrbit"> <#Include Label="GradedStrongOrbit"> <#Include Label="ShortStrongOrbit"> </Section> <!-- ############### --> <Section Label="specorbits"><Heading>Some Specific Orbits</Heading> The following specific orbits are used in the computation of Green's relations and to test if an arbitrary transformation semigroup has a particular property; see Chapter <Ref Chap="greens"/> and Chapter <Ref Chap="properties"/>. <#Include Label="ImagesOfTransSemigroup"> <#Include Label="GradedImagesOfTransSemigroup"> <#Include Label="KernelsOfTransSemigroup"> <#Include Label="GradedKernelsOfTransSemigroup"> <#Include Label="StrongOrbitOfImage"> <#Include Label="StrongOrbitsOfImages"> </Section> <!-- ############### --> </Chapter> <!-- ############### --> <Chapter Label="greens"><Heading>Green's Relations</Heading> <Section><Heading>Introduction</Heading> This chapter contains instructions on how to use the functions for computing Green's relations and related notions for transformation semigroups and monoids that are implemented in <Package>MONOID</Package>. <P/> The theory behind these algorithms is developed in <Cite Key="pfeiffer1"/> and the algorithms themselves are described in <Cite Key="pfeiffer2"/>. Another reference is <Cite Key="lallement"/>.<P/> Green's relations can be calculated when <Package>MONOID</Package> is loaded using the same commands that you would used when <Package>MONOID</Package> is not loaded; see <Ref Chap="Semigroups" BookName="ref"/>. For example, in &GAP; with the <Package>MONOID</Package> package loaded: <Example> gap> a:=Transformation([2,1,1,2,1]);; gap> b:=Transformation([3,4,3,4,4]);; gap> c:=Transformation([3,4,3,4,3]);; gap> d:=Transformation([4,3,3,4,4]);; gap> S:=Semigroup(a,b,c,d); <semigroup with 4 generators> gap> GreensRClasses(S); [ {Transformation( [ 2, 1, 1, 2, 1 ] )}, {Transformation( [ 1, 2, 1, 2, 2 ] )} , {Transformation( [ 1, 2, 1, 2, 1 ] )}, {Transformation( [ 2, 1, 1, 2, 2 ] )} ] </Example> Without the <Package>MONOID</Package> package loaded: <Example> gap> a:=Transformation([2,1,1,2,1]);; gap> b:=Transformation([3,4,3,4,4]);; gap> c:=Transformation([3,4,3,4,3]);; gap> d:=Transformation([4,3,3,4,4]);; gap> S:=Semigroup(a,b,c,d); <semigroup with 4 generators> gap> GreensRClasses(S); [ {Transformation( [ 1, 2, 1, 2, 1 ] )}, {Transformation( [ 1, 2, 1, 2, 2 ] )} , {Transformation( [ 1, 2, 2, 1, 1 ] )}, {Transformation( [ 1, 2, 2, 1, 2 ] )} ] </Example> The only noticable differences are the representatives of the classes and the order the classes appear in the list. These differences are caused by the differences in the methods for <C>GreensRClasses</C> in <Package>MONOID </Package> and the &GAP; library. <P/> Most of the commands in this section relate to how Green's relations are calculated in <Package>MONOID</Package>. Although some of the commands might be used for other purposes, if all that is required is to calculate Green's classes, relations and so on, then this is done in the exactly the same way as described in the &GAP; manual; see <Ref Chap="Green's Relations" BookName="ref"/>.<P/> Due to inherent difficulties with computing Green's L- and D-classes, the methods used to compute with Green's R-classes are the most efficient in <Package>MONOID</Package>. Thus wherever possible it is advisable to use the commands relating to Green's R-classes rather than those relating to Green's L-classes, D-classes, or H-classes.<P/> For small examples of semigroups, say with fewer than 40 elements, it may be more efficient to use the methods from the library than those in <Package>MONOID</Package>. This stems from the fact that there are higher overheads in the methods used in <Package>MONOID</Package>. In either case, with such small examples computing Green's relations does not take much time. <P/> The methods in <Package>MONOID</Package> allow the computation of individual Green's classes without the need to compute all the elements of the underlying semigroup. It is also possible to compute all the R-classes, the number of elements and test membership in a transformation semigroup without computing all the elements. This may be useful if you want to study a very large semigroup where computing all the elements of the semigroup is infeasible. </Section> <!-- ############### --> <Section><Heading>Data Structures</Heading> <#Include Label="GreensData"> <#Include Label="GreensRClassData"> <#Include Label="GreensLClassData"> <#Include Label="GreensHClassData"> <#Include Label="GreensDClassData"> <#Include Label="IsGreensData"> <#Include Label="RClassData"> <#Include Label="IsGreensRClassDataRep"> <#Include Label="IsAssociatedSemigpTransSemigp"> <#Include Label="SchutzenbergerGroup"> <#Include Label="Idempotents"> <#Include Label="PartialOrderOfDClasses"> </Section> </Chapter> <!-- ############### --> <Chapter Label="properties"> <Heading>Properties of Semigroups</Heading> <Section><Heading>Introduction</Heading> In this section we give the theoretical results and the corresponding &GAP; functions that can be used to determine whether a set of transformations generates a semigroup of a given type. Let <C>S</C> be a semigroup. Then <List> <Item> <C>S</C> is a <E>left zero semigroup</E> if <C>xy=x</C> for all <C>x,y</C> in <C>S</C>.</Item> <Item> <C>S</C> is a <E>right zero semigroup</E> if <C>xy=y</C> for all <C>x,y</C> in <C>S</C>.</Item> <Item><C>S</C> is <E>commutative</E> if <C>xy=yx</C> for all <C>x,y</C> in <C>S</C>.</Item> <Item> <C>S</C> is <E>simple</E> if it has no proper two-sided ideals.</Item> <Item> <C>S</C> is <E>regular</E> if for all <C>x</C> in <C>S</C> there exists <C>y</C> in <C>S</C> such that <C>xyx=x</C>.</Item> <Item> <C>S</C> is <E>completely regular</E> if every element of <C>S</C> lies in a subgroup. </Item> <Item> <C>S</C> is an <E>inverse semigroup</E> if for all elements <C>x</C> in <C>S</C> there exists a unique semigroup inverse, that is, a unique element <C>y</C> such that <C>xyx=x</C> and <C>yxy=y</C>. </Item> <Item> <C>S</C> is a <E>Clifford semigroup</E> if it is a regular semigroup whose idempotents are central, that is, for all <C>e</C> in <C>S</C> with <C>e^2=e</C> and <C>x</C> in <C>S</C> we have that <C>ex=xe</C>. </Item> <Item> <C>S</C> is a <E>band</E> if every element is an idempotent, that is, <C>x^2=x</C> for all <C>x</C> in <C>S</C>.</Item> <Item> <C>S</C> is a <E>rectangular band</E> if for all <C>x,y,z</C> in <C>S</C> we have that <C>x^2=x</C> and <C>xyz=xz</C>.</Item> <Item> <C>S</C> is a <E>semiband</E> if it is generated by its idempotent elements, that is, elements satisfying <C>x^2=x</C>.</Item> <Item> <C>S</C> is an <E>orthodox semigroup</E> if its idempotents (elements satisfying <C>x^2=x</C>) form a subsemigroup.</Item> <Item><C>S</C> is a <E>zero semigroup</E> if there exists an element <C>0</C> in <C>S</C> such that <C>xy=0</C> for all <C>x,y</C> in <C>S</C>.</Item> <Item><C>S</C> is a <E>zero group</E> if there exists an element <C>0</C> in <C>S</C> such that <C>S</C> without <C>0</C> is a group and for all <C>x</C> in <C>S</C> we have that <C>x0=0x=0</C>.</Item> </List> The following results provide efficient methods to determine if an arbitrary transformation semigroup is a left zero, right zero, simple, completely regular, inverse or Clifford semigroup. Proofs of these results can be found in <Cite Key="largest"/>.<P/> Let <C>S</C> be a semigroup generated by a set of transformations <C>U</C> on a finite set. Then the following hold: <List> <Item> <C>S</C> is a left zero semigroup if and only if for all <C>f, g</C> in <C>U</C> the image of <C>f</C> equals the image of <C>g</C> and <C>f^2=f</C>.</Item> <Item> <C>S</C> is a right zero semigroup if and only if for all <C>f, g</C> in <C>U</C> the kernel of <C>f</C> equals the kernel of <C>g</C> and <C>f^2=f</C>.</Item> <Item> <C>S</C> is simple if and only if for all <C>f, g</C> in <C>U</C> every class of the kernel of <C>f</C> contains exactly <C>1</C> element of the image of <C>g</C>.</Item> <Item> <C>S</C> is completely regular if and only if for all <C>f</C> in <C>U</C> and <C>g</C> in <C>S</C>, every class of the kernel of <C>f</C> contains at most <C>1</C> element of the set found by applying <C>g</C> to the image of <C>f</C>.</Item> <Item> <C>S</C> is inverse if and only if it is regular and there is a bijection <C>\phi</C> from the set of kernels of elements of <C>S</C> to the set of images of elements of <C>S</C> such that every class of a kernel <C>K</C> contains exactly <C>1</C> element in <C>(K)\phi</C>.</Item> <Item> <C>S</C> is a Clifford semigroup if and only if for all <C>f, g</C> in <C>U</C> <List> <Item> <C>f</C> permutes its image</Item> <Item> <C>f</C> commutes with the power of <C>g</C> that acts as the identity on its image.</Item> </List></Item> </List> It is straightforward to verify that a transformation semigroup <C>S</C> generated by <C>U</C> is a group if and only if for all <C>f, g</C> in <C>U</C> <List> <Item> the kernel of <C>f</C> equals the kernel of <C>g</C>. </Item> <Item> the image of <C>f</C> equals the image of <C>g</C>. </Item> <Item> <C>f</C> permutes its image.</Item> </List><P/> At first glance it might not be obvious why these conditions are an improvement over the original definitions. The main point is that it can be easily determined whether a semigroup <C>S</C> generated by a set <C>U</C> of mappings satisfies these conditions by considering the generators <C>U</C> and their action on the underlying set only. </Section> <!-- ############### --> <Section><Heading>Property Tests</Heading> <#Include Label="IsCompletelyRegularSemigroup"> <#Include Label="IsCompletelySimpleSemigroup"> <#Include Label="IsGroupAsSemigroup"> <#Include Label="IsCommutativeSemigroup"> <#Include Label="IsRegularSemigroup"> <#Include Label="IsInverseSemigroup"> <#Include Label="IsCliffordSemigroup"> <#Include Label="IsBand"> <#Include Label="IsRectangularBand"> <#Include Label="IsSemiBand"> <#Include Label="IsOrthodoxSemigroup"> <#Include Label="IsRightZeroSemigroup"> <#Include Label="IsLeftZeroSemigroup"> <#Include Label="IsZeroSemigroup"> <#Include Label="IsZeroGroup"> <#Include Label="MultiplicativeZero"> </Section> </Chapter> <!-- ############### --> <Chapter Label="special"> <Heading>Special Classes of Semigroup</Heading> In this chapter functions for creating certain semigroups are given. <!--In Section <Ref Sect="trans"/> we give functions for creating the following standard transformation semigroups: <List> <Item> the semigroup of all <E>singular transformations</E> of the <C>n</C>-element set <C>{1,2,...,n}</C>. That is, the non-invertible mappings on this set. This semigroup is known to be regular, idempotent generated (satisfies <Ref Prop="IsSemiBand"/>), and has size <C>n^n-n!</C>.</Item> <Item> the semigroup of all <E>order preserving transformations</E> of the <C>n</C>-element set <C>{1,2,...,n}</C>. That is, the mappings <C>f</C> such that <C>i</C> is at most <C>j</C> implies <C>f(i)</C> is at most <C>f(j)</C> for all <C>i,j</C> in <C>{1,2,...,n}</C>. This semigroup is known to be regular, idempotent generated (satisfies <Ref Prop="IsSemiBand"/>), and has size <C>Binomial(2*n-1, n-1)</C>.</Item> </List> In Section <Ref Sect="zeros"/> we give functions for creating the following semigroups: <List> <Item> the <E>zero semigroup</E> <C>S</C> of order <C>n</C>. That is, the unique semigroup up to isomorphism of order <C>n</C> such that there exists an element <C>0</C> in <C>S</C> such that <C>xy=0</C> for all <C>x,y</C> in <C>S</C>.</Item> <Item> <E>zero groups</E> with underlying group <C>G</C>. That is, the monoid <C>S</C> obtained by adjoining a zero element <C>0</C> to a group <C>G</C> with <C>g0=0g=0</C> for all <C>g</C> in <C>S</C>.</Item> </List> In Section <Ref Sect="random"/> we give functions for randomly creating semigroups of different types. These functions are included so that the user has a ready supply of examples should they be required. </Section>--> <!-- ############### --> <Section Label="trans"><Heading>Some Classes of Semigroup</Heading> <#Include Label="SingularSemigroup"> <#Include Label="OrderPreservingSemigroup"> <#Include Label="KiselmanSemigroup"> </Section> <!-- ############### --> <Section Label="zeros"><Heading>Zero Groups and Zero Semigroups</Heading> <#Include Label="ZeroSemigroup"> <#Include Label="ZeroSemigroupElt"> <#Include Label="ZeroGroup"> <#Include Label="ZeroGroupElt"> <#Include Label="UnderlyingGroupOfZG"> <#Include Label="UnderlyingGroupEltOfZGElt"> </Section> <!-- ############### --> <Section Label="random"><Heading>Random Semigroups</Heading> <#Include Label="RandomMonoid"> <#Include Label="RandomSemigroup"> <#Include Label="RandomReesMatrixSemigroup"> <#Include Label="RandomReesZeroMatrixSemigroup"> </Section> </Chapter> <!-- ############### --> <Chapter Label="homo"> <Heading>Semigroup Homomorphisms</Heading> <Section><Heading>Introduction</Heading> In this chapter we give instructions on how to create semigroup homomorphisms using <Package>MONOID</Package> in several different ways. <P/> In Section <Ref Sect="create"/>, we give functions for creating arbitrary semigroup homomorphism specified by a function on the elements, the images of the generators, or the images of all the semigroup elements. These functions were written to support the functions for computing the automorphism group of an arbitrary transformation semigroup and to specify isomorphisms between different classes of semigroup, such as finitely presented semigroups and transformation semigroups.<P/> In Section <Ref Sect="inner"/>, we show how to specify and compute the inner automorphisms of a transformation semigroup. The functions that can be used to find the entire automorphism group of an arbitrary transformation semigroup are given in Section <Ref Sect="autos"/>. The <Ref Attr="AutomorphismGroup"/> has an interactive mode that allows the user to decide how the computation should proceed. This can be invoked by using the command <C>SetInfoLevel(InfoAutos, 4);</C> see <Ref InfoClass="InfoAutos"/>.<P/> In Section <Ref Sect="rees"/>, commands for creating automorphisms and finding all automorphisms of Rees matrix semigroups and Rees <C>0</C>-matrix semigroups are given. <P/> In Section <Ref Sect="zerogp"/>, functions for specifying the automorphisms of a zero group are given. <P/> In the final section (<Ref Sect="iso"/>), functions for finding isomorphisms between various kinds of semigroups are given. <P/> The methods behind the commands in this chapter are taken from <Cite Key="computing"/>.<P/> <B>Please note</B>: the following functions can only be used fully if <Package>GRAPE</Package> is fully installed (and loaded): <List> <Item> <Ref Attr="AutomorphismGroup"/> with argument satisfying <Ref Prop="IsTransformationSemigroup" BookName="ref"/> or <Ref Prop="IsReesZeroMatrixSemigroup" BookName="ref"/></Item> <Item> <Ref Oper="RightTransStabAutoGroup"/> with argument satisfying <Ref Prop="IsReesZeroMatrixSemigroup" BookName="ref"/></Item> <Item><Ref Func="RZMSGraph"/></Item> <Item><Ref Oper="RZMSInducedFunction"/></Item> <Item><Ref Oper="RZMStoRZMSInducedFunction"/></Item> <Item><Ref Oper="IsomorphismSemigroups"/> with both arguments satisfying <Ref Prop="IsReesZeroMatrixSemigroup" BookName="ref"/></Item> </List> Please see Chapter <Ref Sect="Monoid"/> for further details on how to obtain <Package>GRAPE</Package>. <#Include Label="InfoAutos"> </Section> <!-- ############### --> <Section Label="create"><Heading>Creating Homomorphisms</Heading> The principal functions for creating arbitrary semigroup homomorphisms are the following three. <!-- ############### --> <#Include Label="SemigroupHomomorphismByFunction"> <#Include Label="SemigroupHomomorphismByImagesOfGens"> <#Include Label="SemigroupHomomorphismByImages"> </Section> <!-- ############### --> <Section Label="inner"><Heading>Inner Automorphisms</Heading> <#Include Label="InnerAutomorphismOfSemigroup"> <#Include Label="ConjugatorOfInnerAutomorphismOfSemigroup"> <#Include Label="IsInnerAutomorphismOfSemigroup"> <#Include Label="InnerAutomorphismsOfSemigroup"> <#Include Label="InnerAutomorphismsOfSemigroupInGroup"> <#Include Label="InnerAutomorphismsAutomorphismGroup"> <#Include Label="IsInnerAutomorphismsOfSemigroup"> <#Include Label="IsInnerAutomorphismsOfZeroGroup"> </Section> <!-- ############### --> <Section Label="autos"><Heading>Automorphism Groups</Heading> <#Include Label="AutomorphismGroup"> <#Include Label="AutomorphismsSemigroupInGroup"> <#Include Label="IsAutomorphismGroupOfSemigroup"> <#Include Label="IsAutomorphismGroupOfSimpleSemigp"> <#Include Label="IsAutomorphismGroupOfZeroGroup"> <#Include Label="IsAutomorphismGroupOfZeroSemigroup"> <#Include Label="IsAutomorphismGroupOfRMS"> <#Include Label="IsAutomorphismGroupOfRZMS"> </Section> <!-- ############### --> <Section Label="rees"><Heading>Rees Matrix Semigroups</Heading> <#Include Label="RMSIsoByTriple"> <#Include Label="RZMSIsoByTriple"> <#Include Label="IsRMSIsoByTripleRep"> <#Include Label="IsRZMSIsoByTripleRep"> <#Include Label="RMSInducedFunction"> <#Include Label="RZMSInducedFunction"> <#Include Label="RZMStoRZMSInducedFunction"> <#Include Label="RZMSGraph"> <#Include Label="RightTransStabAutoGroup"> </Section> <!-- ############### --> <Section Label="zerogp"><Heading>Zero Groups</Heading> <#Include Label="ZeroGroupAutomorphism"> <#Include Label="IsZeroGroupAutomorphismRep"> <#Include Label="UnderlyingGroupAutoOfZeroGroupAuto"> </Section> <!-- ############### --> <Section Label="iso"><Heading>Isomorphisms</Heading> <#Include Label="IsomorphismAutomorphismGroupOfRMS"> <#Include Label="IsomorphismPermGroup"> <#Include Label="IsomorphismFpSemigroup"> <#Include Label="IsomorphismFpMonoid"> <#Include Label="IsomorphismSemigroups"> <#Include Label="IsomorphismReesMatrixSemigroupOfDClass"> <#Include Label="IsomorphismReesMatrixSemigroup"> </Section> </Chapter> </Body> <Bibliography Databases="MONOID" /> <TheIndex/> </Book>