  
  [1X8 [33X[0;0YStandard constructions[133X[101X
  
  [33X[0;0YIn  this  chapter  we describe some standard ways of constructing semigroups
  and  monoids  from  other  semigroups  that  are available in the [5XSemigroups[105X
  package.[133X
  
  
  [1X8.1 [33X[0;0YProducts of semigroups[133X[101X
  
  [33X[0;0YIn this section, we describe the functions in [5XSemigroups[105X that can be used to
  create various products of semigroups.[133X
  
  [1X8.1-1 DirectProduct[101X
  
  [33X[1;0Y[29X[2XDirectProduct[102X( [3XS[103X[, [3XT[103X, [3X...[103X] ) [32X function[133X
  [33X[1;0Y[29X[2XDirectProductOp[102X( [3Xlist[103X, [3XS[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10YA transformation semigroup.[133X
  
  [33X[0;0YThe  function  [10XDirectProduct[110X  takes  an  arbitrary positive number of finite
  semigroups,  and  returns  a  semigroup  that  is isomorphic to their direct
  product.[133X
  
  [33X[0;0YIf  these finite semigroups are all partial perm semigroups, all bipartition
  semigroups, or all PBR semigroups, then [10XDirectProduct[110X returns a semigroup of
  the same type. Otherwise, [10XDirectProduct[110X returns a transformation semigroup.[133X
  
  [33X[0;0YThe  operation  [10XDirectProductOp[110X  is  included  for  consistency with the [5XGAP[105X
  library (see [2XDirectProductOp[102X ([14XReference: DirectProductOp[114X)). It takes exactly
  two  arguments,  namely a non-empty list [3Xlist[103X of semigroups and one of these
  semigroups,  [3XS[103X,  and  returns the same result as [10XCallFuncList(DirectProduct,
  [3Xlist[103X[10X)[110X.[133X
  
  [33X[0;0YIf  [10XD[110X is the direct product of a collection of semigroups, then an embedding
  of  the  [10Xi[110Xth factor into [10XD[110X can be accessed with the command [10XEmbedding(D, i)[110X,
  and  a  projection of [10XD[110X onto its [10Xi[110Xth factor can be accessed with the command
  [10XProjection(D,  i)[110X;  see  [2XEmbedding[102X  ([14XReference:  Embedding[114X)  and  [2XProjection[102X
  ([14XReference: Projection[114X) for more information.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XS := InverseMonoid([PartialPerm([2, 1])]);;[127X[104X
    [4X[25Xgap>[125X [27XT := InverseMonoid([PartialPerm([1, 2, 3])]);;[127X[104X
    [4X[25Xgap>[125X [27XD := DirectProduct(S, T);[127X[104X
    [4X[28X<commutative inverse partial perm monoid of rank 5 with 1 generator>[128X[104X
    [4X[25Xgap>[125X [27XElements(D);[127X[104X
    [4X[28X[ <identity partial perm on [ 1, 2, 3, 4, 5 ]>, (1,2)(3)(4)(5) ][128X[104X
    [4X[25Xgap>[125X [27XS := PartitionMonoid(2);;[127X[104X
    [4X[25Xgap>[125X [27XD := DirectProduct(S, S, S);; IsRegularSemigroup(D);; D;[127X[104X
    [4X[28X<regular bipartition monoid of size 3375, degree 6 with 9 generators>[128X[104X
    [4X[25Xgap>[125X [27XS := Semigroup([PartialPerm([2, 5, 0, 1, 3]),[127X[104X
    [4X[25X>[125X [27X                   PartialPerm([5, 2, 4, 3])]);;[127X[104X
    [4X[25Xgap>[125X [27XT := Semigroup([Bipartition([[1, -2], [2], [3, -1, -3]])]);;[127X[104X
    [4X[25Xgap>[125X [27XD := DirectProduct(S, T);[127X[104X
    [4X[28X<transformation semigroup of size 122, degree 9 with 63 generators>[128X[104X
    [4X[25Xgap>[125X [27XSize(D) = Size(S) * Size(T);[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  [1X8.1-2 WreathProduct[101X
  
  [33X[1;0Y[29X[2XWreathProduct[102X( [3XM[103X, [3XS[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10YA transformation semigroup.[133X
  
  [33X[0;0YIf  [3XM[103X is a transformation monoid (or a permutation group) of degree [10Xm[110X, and [3XS[103X
  is  a  transformation  semigroup  (or  permutation  group)  of degree [10Xs[110X, the
  operation  [10XWreathProduct([3XM[103X[10X,  [3XS[103X[10X)[110X  returns  the  wreath product of [3XM[103X and [3XS[103X, in
  terms of an embedding in the full transformation monoid of degree [10Xm * s[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XT := FullTransformationMonoid(3);;[127X[104X
    [4X[25Xgap>[125X [27XC := Group((1, 3));;[127X[104X
    [4X[25Xgap>[125X [27XW := WreathProduct(T, C);;[127X[104X
    [4X[25Xgap>[125X [27XSize(W);[127X[104X
    [4X[28X39366[128X[104X
    [4X[25Xgap>[125X [27XWW := WreathProduct(C, T);;[127X[104X
    [4X[25Xgap>[125X [27XSize(WW);[127X[104X
    [4X[28X216[128X[104X
  [4X[32X[104X
  
  
  [1X8.2 [33X[0;0YDual semigroups[133X[101X
  
  [33X[0;0YThe  [13Xdual  semigroup[113X  of  a  semigroup  [10XS[110X  is  the  semigroup  with the same
  underlying  set  of  elements  but  with  reversed  multiplication;  this is
  anti-isomorphic to [10XS[110X. In [5XSemigroups[105X a semigroup and its dual are represented
  with disjoint sets of elements.[133X
  
  [1X8.2-1 DualSemigroup[101X
  
  [33X[1;0Y[29X[2XDualSemigroup[102X( [3XS[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10YThe dual semigroup of the given semigroup.[133X
  
  [33X[0;0YThe  dual  semigroup  of  a  semigroup  [3XS[103X  is  the  semigroup  with the same
  underlying   set   as   [3XS[103X,   but   with  multiplication  reversed;  this  is
  anti-isomorphic  to  [3XS[103X. This attribute returns a semigroup isomorphic to the
  dual semigroup of [3XS[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XS := Semigroup([Transformation([1, 4, 3, 2, 2]),[127X[104X
    [4X[25X>[125X [27XTransformation([5, 4, 4, 1, 2])]);;[127X[104X
    [4X[25Xgap>[125X [27XD := DualSemigroup(S);[127X[104X
    [4X[28X<dual semigroup of <transformation semigroup of degree 5 with 2 [128X[104X
    [4X[28X generators>>[128X[104X
    [4X[25Xgap>[125X [27XSize(S) = Size(D);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XNrDClasses(S) = NrDClasses(D);[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  [1X8.2-2 IsDualSemigroupRep[101X
  
  [33X[1;0Y[29X[2XIsDualSemigroupRep[102X( [3Xsgrp[103X ) [32X Category[133X
  [6XReturns:[106X  [33X[0;10YReturns [9Xtrue[109X if [3Xsgrp[103X is represented as a dual semigroup.[133X
  
  [33X[0;0YSemigroups   created   using   [2XDualSemigroup[102X   ([14X8.2-1[114X)  normally  have  this
  representation. The exception is semigroups which are the dual of semigroups
  already  lying in this category. That is, a semigroup has the representation
  [2XIsDualSemigroupRep[102X if and only if the corresponding dual semigroup does not.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XS := Semigroup([Transformation([3, 5, 1, 1, 2]),[127X[104X
    [4X[25X>[125X [27XTransformation([1, 2, 4, 4, 3])]);[127X[104X
    [4X[28X<transformation semigroup of degree 5 with 2 generators>[128X[104X
    [4X[25Xgap>[125X [27XD := DualSemigroup(S);[127X[104X
    [4X[28X<dual semigroup of <transformation semigroup of degree 5 with 2 [128X[104X
    [4X[28X generators>>[128X[104X
    [4X[25Xgap>[125X [27XIsDualSemigroupRep(D);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XR := DualSemigroup(D);[127X[104X
    [4X[28X<transformation semigroup of degree 5 with 2 generators>[128X[104X
    [4X[25Xgap>[125X [27XIsDualSemigroupRep(R);[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XR = S;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XT := Range(IsomorphismTransformationSemigroup(D));[127X[104X
    [4X[28X<transformation semigroup of size 16, degree 17 with 2 generators>[128X[104X
    [4X[25Xgap>[125X [27XIsDualSemigroupRep(T);[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27Xx := Representative(D);[127X[104X
    [4X[28X<Transformation( [ 3, 5, 1, 1, 2 ] ) in the dual semigroup>[128X[104X
    [4X[25Xgap>[125X [27XV := Semigroup(x);[127X[104X
    [4X[28X<dual semigroup of <commutative transformation semigroup of degree 5 [128X[104X
    [4X[28X with 1 generator>>[128X[104X
    [4X[25Xgap>[125X [27XIsDualSemigroupRep(V);[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  [1X8.2-3 IsDualSemigroupElement[101X
  
  [33X[1;0Y[29X[2XIsDualSemigroupElement[102X( [3Xelt[103X ) [32X Category[133X
  [6XReturns:[106X  [33X[0;10YReturns  [9Xtrue[109X  if  [3Xelt[103X  has the representation of a dual semigroup
            element.[133X
  
  [33X[0;0YElements  of  a  dual  semigroup obtained using [2XAntiIsomorphismDualSemigroup[102X
  ([14X8.2-4[114X) normally lie in this category. The exception is elements obtained by
  applying the map [2XAntiIsomorphismDualSemigroup[102X ([14X8.2-4[114X) to elements already in
  this  category.  That  is,  the  elements of a semigroup lie in the category
  [2XIsDualSemigroupElement[102X if and only if the elements of the corresponding dual
  semigroup do not.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XS := SingularPartitionMonoid(4);;[127X[104X
    [4X[25Xgap>[125X [27XD := DualSemigroup(S);;[127X[104X
    [4X[25Xgap>[125X [27Xs := GeneratorsOfSemigroup(S)[1];;[127X[104X
    [4X[25Xgap>[125X [27Xmap := AntiIsomorphismDualSemigroup(S);;[127X[104X
    [4X[25Xgap>[125X [27Xt := s ^ map;[127X[104X
    [4X[28X<<block bijection: [ 1, 2, -1, -2 ], [ 3, -3 ], [ 4, -4 ]>[128X[104X
    [4X[28X  in the dual semigroup>[128X[104X
    [4X[25Xgap>[125X [27XIsDualSemigroupElement(t);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xinv := InverseGeneralMapping(map);;[127X[104X
    [4X[25Xgap>[125X [27Xx := t ^ inv;[127X[104X
    [4X[28X<block bijection: [ 1, 2, -1, -2 ], [ 3, -3 ], [ 4, -4 ]>[128X[104X
    [4X[25Xgap>[125X [27XIsDualSemigroupElement(x);[127X[104X
    [4X[28Xfalse[128X[104X
  [4X[32X[104X
  
  [1X8.2-4 AntiIsomorphismDualSemigroup[101X
  
  [33X[1;0Y[29X[2XAntiIsomorphismDualSemigroup[102X( [3XS[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10YAn anti-isomorphism from [3XS[103X to the corresponding dual semigroup.[133X
  
  [33X[0;0YThe dual semigroup of [3XS[103X mathematically has the same underlying set as [3XS[103X, but
  is represented with a different set of elements in [5XSemigroups[105X. This function
  returns a mapping which is an anti-isomorphism from [3XS[103X to its dual.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XS := PartitionMonoid(3);[127X[104X
    [4X[28X<regular bipartition *-monoid of size 203, degree 3 with 4 generators>[128X[104X
    [4X[25Xgap>[125X [27Xmap := AntiIsomorphismDualSemigroup(S);[127X[104X
    [4X[28XMappingByFunction( <regular bipartition *-monoid of size 203, [128X[104X
    [4X[28X degree 3 with 4 generators>, <dual semigroup of [128X[104X
    [4X[28X<regular bipartition *-monoid of size 203, degree 3 with 4 generators>[128X[104X
    [4X[28X >, function( x ) ... end, function( x ) ... end )[128X[104X
    [4X[25Xgap>[125X [27Xinv := InverseGeneralMapping(map);;[127X[104X
    [4X[25Xgap>[125X [27Xx := Bipartition([[1, -2], [2, -3], [3, -1]]);[127X[104X
    [4X[28X<block bijection: [ 1, -2 ], [ 2, -3 ], [ 3, -1 ]>[128X[104X
    [4X[25Xgap>[125X [27Xy := Bipartition([[1], [2, -2], [3, -3], [-1]]);[127X[104X
    [4X[28X<bipartition: [ 1 ], [ 2, -2 ], [ 3, -3 ], [ -1 ]>[128X[104X
    [4X[25Xgap>[125X [27X(x ^ map) * (y ^ map) = (y * x) ^ map;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xx ^ map;[127X[104X
    [4X[28X<<block bijection: [ 1, -2 ], [ 2, -3 ], [ 3, -1 ]>[128X[104X
    [4X[28X  in the dual semigroup>[128X[104X
  [4X[32X[104X
  
  
  [1X8.3 [33X[0;0YStrong semilattices of semigroups[133X[101X
  
  [33X[0;0YIn  this  section,  we  describe  how  [5XSemigroups[105X  can be used to create and
  manipulate  strong semilattices of semigroups (SSSs). Strong semilattices of
  semigroups  are  described,  for  example,  in  Section 4.1 of [How95]. They
  consist  of  a  meet-semilattice [22XY[122X along with a collection of semigroups [22XS_a[122X
  for each [22Xa[122X in [22XY[122X, and a collection of homomorphisms [22Xf_ab : S_a → S_b[122X for each
  [22Xa[122X and [22Xb[122X in [22XY[122X such that [22Xa ≥ b[122X.[133X
  
  [33X[0;0YThe  product  of  two  elements  [22Xx  ∈  S_a, y ∈ S_b[122X is defined to lie in the
  semigroup [22XS_c[122X, corresponding to the meet [22Xc[122X of [22Xa, b ∈ Y[122X. The exact element of
  [22XS_c[122X  equal to the product is obtained using the homomorphisms of the SSS: [22Xxy
  = (x f_ac) (y f_bc)[122X.[133X
  
  [1X8.3-1 StrongSemilatticeOfSemigroups[101X
  
  [33X[1;0Y[29X[2XStrongSemilatticeOfSemigroups[102X( [3XD[103X, [3XL[103X, [3XH[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10YA strong semilattice of semigroups.[133X
  
  [33X[0;0YIf  [3XD[103X  is  a digraph, [3XL[103X is a list of semigroups, and [3XH[103X is a list of lists of
  maps,      then      this      function      returns     a     corresponding
  [10XIsStrongSemilatticeOfSemigroups[110X  object.  The format of the arguments is not
  required   to  be  exactly  analogous  to  Howie's  description  above,  but
  consistency amongst the arguments is required:[133X
  
  [30X    [33X[0;6Y[3XD[103X must be a digraph whose [2XDigraphReflexiveTransitiveClosure[102X ([14XDigraphs:
        DigraphReflexiveTransitiveClosure[114X) is a meet-semilattice. For example,
        [10XDigraph([2,  3],  [4],  [4],  []])[110X is valid and produces a semilattice
        where  the  meet  of  [10X2[110X  and  [10X3[110X  is  [10X1[110X.  See  [2XIsMeetSemilatticeDigraph[102X
        ([14XDigraphs: IsMeetSemilatticeDigraph[114X).[133X
  
  [30X    [33X[0;6Y[3XL[103X must contain as many semigroups as there are vertices in [3XD[103X.[133X
  
  [30X    [33X[0;6Y[3XH[103X  must  be  a  list with as many elements as there are vertices in [3XD[103X.
        Each  element of [3XH[103X must itself be a (possibly empty) list with as many
        entries as the corresponding vertex of [3XD[103X has out-edges. The entries of
        each  sublist must be the corresponding homomorphisms: for example, if
        [3XD[103X  is  entered  as  above, then [10XH[1][2][110X must be the homomorphism [22Xf_31[122X,
        i.e. [10XH[1][2][110X is an [10XIsMapping[110X object whose domain is a superset of [10XL[3][110X
        and whose range is a subset of [10XL[1][110X.[133X
  
  [33X[0;0YNote that in the example above, the edge [22X1 → 4[122X is not entered as part of the
  argument  [3XD[103X,  but it is still an edge in the reflexive transitive closure of
  [3XD[103X.  When creating the object, [5XGAP[105X creates the homomorphism [22Xf_41[122X by composing
  the  mappings  along  paths that lead from 4 to 1, and checks that composing
  along all possible paths produces the same result.[133X
  
  [1X8.3-2 SSSE[101X
  
  [33X[1;0Y[29X[2XSSSE[102X( [3XSSS[103X, [3Xn[103X, [3Xx[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10YAn element of a strong semilattice of semigroups.[133X
  
  [33X[0;0YIf  [3Xn[103X is a vertex of the underlying semilattice of the strong semilattice of
  semigroups  [3XSSS[103X,  and  if  [3Xx[103X is an element of the [3Xn[103Xth semigroup of [3XSSS[103X, then
  this  function  returns  the element of [3XSSS[103X which lies in semigroup number [3Xn[103X
  and which corresponds to the element [3Xx[103X in that semigroup.[133X
  
  [33X[0;0YThis  function  returns an [2XIsSSSE[102X ([14X8.3-3[114X) object. SSSEs from the same strong
  semilattice of semigroups can be compared and multiplied.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XD := Digraph([[2, 3], [4], [4], []]);;[127X[104X
    [4X[25Xgap>[125X [27XS4 := FullTransformationMonoid(2);;[127X[104X
    [4X[25Xgap>[125X [27XS3 := FullTransformationMonoid(3);;[127X[104X
    [4X[25Xgap>[125X [27Xpairs := [[Transformation([1, 2]), Transformation([2, 1])]];;[127X[104X
    [4X[25Xgap>[125X [27Xcong := SemigroupCongruence(S4, pairs);;[127X[104X
    [4X[25Xgap>[125X [27XS2 := S4 / cong;;[127X[104X
    [4X[25Xgap>[125X [27XS1 := TrivialSemigroup();;[127X[104X
    [4X[25Xgap>[125X [27XL := [S1, S2, S3, S4];;[127X[104X
    [4X[25Xgap>[125X [27Xidfn := t -> IdentityTransformation;;[127X[104X
    [4X[25Xgap>[125X [27Xf21 := SemigroupHomomorphismByFunction(S2, S1, idfn);;[127X[104X
    [4X[25Xgap>[125X [27Xf31 := SemigroupHomomorphismByFunction(S3, S1, idfn);;[127X[104X
    [4X[25Xgap>[125X [27Xf42 := HomomorphismQuotientSemigroup(cong);;[127X[104X
    [4X[25Xgap>[125X [27Xf43 := SemigroupHomomorphismByFunction(S4, S3, IdFunc);;[127X[104X
    [4X[25Xgap>[125X [27XH := [[f21, f31], [f42], [f43], []];;[127X[104X
    [4X[25Xgap>[125X [27XSSS := StrongSemilatticeOfSemigroups(D, L, H);[127X[104X
    [4X[28X<strong semilattice of 4 semigroups>[128X[104X
    [4X[25Xgap>[125X [27XSize(SSS);[127X[104X
    [4X[28X34[128X[104X
    [4X[25Xgap>[125X [27Xx := SSSE(SSS, 3, Elements(S3)[10]);[127X[104X
    [4X[28XSSSE(3, Transformation( [ 2, 1, 1 ] ))[128X[104X
    [4X[25Xgap>[125X [27Xy := SSSE(SSS, 4, Elements(S4)[1]);[127X[104X
    [4X[28XSSSE(4, Transformation( [ 1, 1 ] ))[128X[104X
    [4X[25Xgap>[125X [27Xx * y;[127X[104X
    [4X[28XSSSE(3, Transformation( [ 1, 1, 1 ] ))[128X[104X
  [4X[32X[104X
  
  [1X8.3-3 IsSSSE[101X
  
  [33X[1;0Y[29X[2XIsSSSE[102X( [3Xobj[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X.[133X
  
  [33X[0;0YAll  elements  of  an  SSS  belong  in  the  category  [10XIsSSSE[110X  (for  "Strong
  Semilattice of Semigroups Element").[133X
  
  [1X8.3-4 IsStrongSemilatticeOfSemigroups[101X
  
  [33X[1;0Y[29X[2XIsStrongSemilatticeOfSemigroups[102X( [3Xobj[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X.[133X
  
  [33X[0;0YEvery  Strong  Semilattice  of  Semigroups  in  [5XGAP[105X  belongs to the category
  [10XIsStrongSemilatticeOfSemigroups[110X. Basic operations in this category allow the
  user   to   recover   the   three  essential  elements  of  an  SSS  object:
  [2XSemilatticeOfStrongSemilatticeOfSemigroups[102X                          ([14X8.3-5[114X),
  [2XSemigroupsOfStrongSemilatticeOfSemigroups[102X            ([14X8.3-6[114X),            and
  [2XHomomorphismsOfStrongSemilatticeOfSemigroups[102X ([14X8.3-7[114X).[133X
  
  [1X8.3-5 SemilatticeOfStrongSemilatticeOfSemigroups[101X
  
  [33X[1;0Y[29X[2XSemilatticeOfStrongSemilatticeOfSemigroups[102X( [3XSSS[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10YA meet-semilattice digraph.[133X
  
  [33X[0;0YIf  [3XSSS[103X  is  a  strong  semilattice of semigroups, this function returns the
  underlying  semilattice  structure  as  a digraph. Note that this may not be
  equal to the digraph passed as input when [3XSSS[103X was created: rather, it is the
  reflexive transitive closure of the input digraph.[133X
  
  [1X8.3-6 SemigroupsOfStrongSemilatticeOfSemigroups[101X
  
  [33X[1;0Y[29X[2XSemigroupsOfStrongSemilatticeOfSemigroups[102X( [3XSSS[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10YA list of semigroups.[133X
  
  [33X[0;0YIf [3XSSS[103X is a strong semilattice of semigroups, this function returns the list
  of  semigroups  that  make  up  [3XSSS[103X. The position of a semigroup in the list
  corresponds to the node of the semilattice where that semigroup lies.[133X
  
  [1X8.3-7 HomomorphismsOfStrongSemilatticeOfSemigroups[101X
  
  [33X[1;0Y[29X[2XHomomorphismsOfStrongSemilatticeOfSemigroups[102X( [3XSSS[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10YA list of lists of mappings.[133X
  
  [33X[0;0YIf [3XSSS[103X is a strong semilattice of [22Xn[122X semigroups, this function returns an [22Xn ×
  n[122X  list  where  the  [22X(i,  j)[122Xth  entry  of the list is the homomorphism [22Xf_ji[122X,
  provided  [22Xi ≤ j[122X in the semilattice. If this last condition is not true, then
  the entry is [9Xfail[109X.[133X
  
  
  [1X8.4 [33X[0;0YMcAlister triple semigroups[133X[101X
  
  [33X[0;0YIn this section, we describe the functions in [5XGAP[105X for creating and computing
  with   McAlister   triple   semigroups   and   their   subsemigroups.   This
  implementation  is  based on the section in Chapter 5 of [How95] but differs
  from  the  treatment  in  Howie by using right actions instead of left. Some
  definitions found in the documentation are changed for this reason.[133X
  
  [33X[0;0YThe importance of the McAlister triple semigroups lies in the fact that they
  are  exactly  the E-unitary inverse semigroups, which are an important class
  in the study of inverse semigroups.[133X
  
  [33X[0;0YFirst  we  define E-unitary inverse semigroups. It is standard to denote the
  subsemigroup  of a semigroup consisting of its idempotents by [10XE[110X. A semigroup
  [10XS[110X is said to be [13XE-unitary[113X if for all [10Xe[110X in [10XE[110X and for all [10Xs[110X in [10XS[110X:[133X
  
  [30X    [33X[0;6Y[10Xes[110X [22X∈[122X [10XE[110X implies [10Xs[110X [22X∈[122X [10XE[110X,[133X
  
  [30X    [33X[0;6Y[10Xse[110X [22X∈[122X [10XE[110X implies [10Xs[110X [22X∈[122X [10XE[110X.[133X
  
  [33X[0;0YFor  inverse  semigroups  these  two  conditions are equivalent. We are only
  interested in [13XE-unitary inverse semigroups[113X. Before defining McAlister triple
  semigroups  we  define  a  McAlister  triple. A [13XMcAlister triple[113X is a triple
  [10X(G,X,Y)[110X which consists of:[133X
  
  [30X    [33X[0;6Ya partial order [10XX[110X,[133X
  
  [30X    [33X[0;6Ya subset [10XY[110X of [10XX[110X,[133X
  
  [30X    [33X[0;6Ya  group [10XG[110X which acts on [10XX[110X, on the right, by order automorphisms. That
        means for all [10XA,B[110X [22X∈[122X [10XX[110X and for all [10Xg[110X [22X∈[122X [10XG[110X: [10XA[110X [22X≤[122X [10XB[110X if and only if [10XAg[110X [22X≤[122X [10XBg[110X.[133X
  
  [33X[0;0YFurthermore,  [10X(G,X,Y)[110X  must  satisfy  the  following four properties to be a
  McAlister triple:[133X
  
  [8X M1 [108X
        [33X[0;6Y[10XY[110X  is  a  subset  of  [10XX[110X  which is a join-semilattice together with the
        restriction of the order relation of [10XX[110X to [10XY[110X.[133X
  
  [8X M2 [108X
        [33X[0;6Y[10XY[110X  is an order ideal of [10XX[110X. That is to say, for all [10XA[110X [22X∈[122X [10XX[110X and for all [10XB[110X
        [22X∈[122X [10XY[110X: if [10XA[110X [22X≤[122X [10XB[110X, then [10XA[110X [22X∈[122X [10XY[110X.[133X
  
  [8X M3 [108X
        [33X[0;6YEvery  element  of  [10XX[110X  is  the  image of some element in [10XY[110X moved by an
        element of [10XG[110X. That is to say, for every [10XA[110X [22X∈[122X [10XX[110X, there exists some [10XB[110X [22X∈[122X [10XY[110X
        and there exists [10Xg[110X [22X∈[122X [10XG[110X such that [10XA[110X = [10XBg[110X.[133X
  
  [8X M4 [108X
        [33X[0;6YFinally,  for  all  [10Xg[110X  [22X∈[122X  [10XG[110X,  the  intersection  [10X{yg  :  y [110X[22X∈[122X[10X Y}[110X [22X∩[122X [10XY[110X is
        non-empty.[133X
  
  [33X[0;0YWe may define an E-unitary inverse semigroup using a McAlister triple. Given
  [10X(G,X,Y)[110X  let  [10XM(G,X,Y)[110X  be  the  set of all pairs [10X(A,g)[110X in [10XY x G[110X such that [10XA[110X
  acted on by the inverse of [10Xg[110X is in [10XY[110X together with multiplication defined by[133X
  
  [33X[0;0Y[10X(A,g)*(B,h) = (Join(A,Bg^-1),hg)[110X[133X
  
  [33X[0;0Ywhere  [10XJoin[110X  is the natural join operation of the semilattice and [10XBg^-1[110X is [10XB[110X
  acted  on  by the inverse of [10Xg[110X. With this operation, [10XM(G,X,Y)[110X is a semigroup
  which  we  call  a  [13XMcAlister  triple  semigroup[113X over [10X(G,X,Y)[110X. In fact every
  McAlister  triple  semigroup  is  an  E-unitary  inverse semigroup and every
  E-unitary   inverse   semigroup  is  isomorphic  to  some  McAlister  triple
  semigroup.  Note  that there need not be a unqiue McAlister triple semigroup
  for  a particular McAlister triple because in general there is more than one
  way for a group to act on a partial order.[133X
  
  [1X8.4-1 IsMcAlisterTripleSemigroup[101X
  
  [33X[1;0Y[29X[2XIsMcAlisterTripleSemigroup[102X( [3XS[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X.[133X
  
  [33X[0;0YThis function returns [9Xtrue[109X if [3XS[103X is a McAlister triple semigroup. A [13XMcAlister
  triple  semigroup[113X  is  a  special  representation  of  an  E-unitary inverse
  semigroup      [2XIsEUnitaryInverseSemigroup[102X      ([14X12.2-3[114X)      created      by
  [2XMcAlisterTripleSemigroup[102X ([14X8.4-2[114X).[133X
  
  [1X8.4-2 McAlisterTripleSemigroup[101X
  
  [33X[1;0Y[29X[2XMcAlisterTripleSemigroup[102X( [3XG[103X, [3XX[103X, [3XY[103X[, [3Xact[103X] ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10YA McAlister triple semigroup.[133X
  
  [33X[0;0YThe  following  documentation  covers  the  technical  information needed to
  create McAlister triple semigroups in GAP, the underlying theory can be read
  in the introduction to Chapter [14X8.4[114X.[133X
  
  [33X[0;0YIn  this  implementation  the  partial  order  [10XX[110X  of  a  McAlister triple is
  represented   by  a  [2XDigraph[102X  ([14XDigraphs:  Digraph[114X)  object  [3XX[103X.  The  digraph
  represents  a  partial  order in the sense that vertices are the elements of
  the  partial order and the order relation is defined by [10XA[110X [22X≤[122X [10XB[110X if and only if
  there  is  an  edge  from  [10XB[110X to [10XA[110X. The semilattice [10XY[110X of the McAlister triple
  should  be  an  induced  subdigraph  [3XY[103X  of  [3XX[103X  and  the  [2XDigraphVertexLabels[102X
  ([14XDigraphs:  DigraphVertexLabels[114X)  must  correspond  to  the vertices of [3XX[103X on
  which [3XY[103X is induced. That means that the following:[133X
  
  [33X[0;0Y[10X[3XY[103X[10X = InducedSubdigraph([3XX[103X[10X, DigraphVertexLabels([3XY[103X[10X)) [110X[133X
  
  [33X[0;0Ymust  return  [9Xtrue[109X.  Herein if we say that a vertex [10XA[110X of [3XX[103X is 'in' [3XY[103X then we
  mean  there  is a vertex of [3XY[103X whose label is [10XA[110X. Alerternatively the user may
  choose to give the argument [3XY[103X as the vertices of [3XX[103X on which [3XY[103X is the induced
  subdigraph.[133X
  
  [33X[0;0YA  McAlister  triple  semigroup  is  created from a quadruple [10X([3XG[103X[10X, [3XX[103X[10X, [3XY[103X[10X, [3Xact[103X[10X)[110X
  where:[133X
  
  [30X    [33X[0;6Y[3XG[103X is a finite group.[133X
  
  [30X    [33X[0;6Y[3XX[103X   is   a   digraph   satisfying   [2XIsPartialOrderDigraph[102X   ([14XDigraphs:
        IsPartialOrderDigraph[114X).[133X
  
  [30X    [33X[0;6Y[3XY[103X   is   a   digraph  satisfying  [2XIsJoinSemilatticeDigraph[102X  ([14XDigraphs:
        IsJoinSemilatticeDigraph[114X)   which   is  an  induced  subdigraph  of  [3XX[103X
        satisfying  the  aforementioned  labeling  criteria.  Furthermore  the
        [2XOutNeighbours[102X  ([14XDigraphs:  OutNeighbours[114X) of each vertex of [3XX[103X which is
        in [3XY[103X must contain only vertices which are in [3XY[103X.[133X
  
  [30X    [33X[0;6Y[3Xact[103X  is  a  function which takes as its first argument a vertex of the
        digraph  [3XX[103X, its second argument should be an element of [3XG[103X, and it must
        return  a  vertex  of  [3XX[103X.  [3Xact[103X  must  be  a right action, meaning that
        [3Xact[103X[10X(A,gh)=[3Xact[103X[10X([3Xact[103X[10X(A,g),h)[110X   holds  for  all  [10XA[110X  in  [3XX[103X  and  [10Xg,h[110X  [22X∈[122X  [3XG[103X.
        Furthermore  the  permutation  represenation  of this action must be a
        subgroup  of  the  automorphism  group of [3XX[103X. That means we require the
        following to return [9Xtrue[109X:[133X
  
        [33X[0;6Y[10XIsSubgroup(AutomorphismGroup([110X[3XX[103X[10X),           Image(ActionHomomorphism([110X[3XG[103X[10X,
        DigraphVertices([110X[3XX[103X[10X), [110X[3Xact[103X[10X));[110X[133X
  
        [33X[0;6YFurthermore every vertex of [3XX[103X must be in the orbit of some vertex of [3XX[103X
        which  is  in  [3XY[103X.  Finally,  [3Xact[103X must fix the vertex of [3XX[103X which is the
        minimal  vertex  of  [3XY[103X,  i.e.  the  unique  vertex  of  [3XY[103X  whose  only
        out-neighbour is itself.[133X
  
  [33X[0;0YFor     user     convienience,    there    are    multiple    versions    of
  [10XMcAlisterTripleSemigroup[110X. When the argument [3Xact[103X is ommitted it is assumed to
  be  [2XOnPoints[102X ([14XReference: OnPoints[114X). Additionally, the semilattice argument [3XY[103X
  may be replaced by a homogeneous list [3Xsub_ver[103X of vertices of [3XX[103X. When [3Xsub_ver[103X
  is   provided,   [10XMcAlisterTripleSemigroup[110X   is   called   with  [3XY[103X  equalling
  [10XInducedSubdigraph([3XX[103X[10X, [3Xsub_ver[103X[10X)[110X with the appropriate labels.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xx := Digraph([[1], [1, 2], [1, 2, 3], [1, 4], [1, 4, 5]]);[127X[104X
    [4X[28X<immutable digraph with 5 vertices, 11 edges>[128X[104X
    [4X[25Xgap>[125X [27Xy := InducedSubdigraph(x, [1, 4, 5]);[127X[104X
    [4X[28X<immutable digraph with 3 vertices, 6 edges>[128X[104X
    [4X[25Xgap>[125X [27XDigraphVertexLabels(y);[127X[104X
    [4X[28X[ 1, 4, 5 ][128X[104X
    [4X[25Xgap>[125X [27XA := AutomorphismGroup(x);[127X[104X
    [4X[28XGroup([ (2,4)(3,5) ])[128X[104X
    [4X[25Xgap>[125X [27XS := McAlisterTripleSemigroup(A, x, y, OnPoints);[127X[104X
    [4X[28X<McAlister triple semigroup over Group([ (2,4)(3,5) ])>[128X[104X
    [4X[25Xgap>[125X [27XT := McAlisterTripleSemigroup(A, x, y);[127X[104X
    [4X[28X<McAlister triple semigroup over Group([ (2,4)(3,5) ])>[128X[104X
    [4X[25Xgap>[125X [27XS = T;[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XIsIsomorphicSemigroup(S, T);[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  [1X8.4-3 McAlisterTripleSemigroupGroup[101X
  
  [33X[1;0Y[29X[2XMcAlisterTripleSemigroupGroup[102X( [3XS[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10YA group.[133X
  
  [33X[0;0YReturns  the  group  used  to  create  the  McAlister triple semigroup [3XS[103X via
  [2XMcAlisterTripleSemigroup[102X ([14X8.4-2[114X).[133X
  
  [1X8.4-4 McAlisterTripleSemigroupPartialOrder[101X
  
  [33X[1;0Y[29X[2XMcAlisterTripleSemigroupPartialOrder[102X( [3XS[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10YA partial order digraph.[133X
  
  [33X[0;0YReturns  the [2XIsPartialOrderDigraph[102X ([14XDigraphs: IsPartialOrderDigraph[114X) used to
  create   the  McAlister  triple  semigroup  [3XS[103X  via  [2XMcAlisterTripleSemigroup[102X
  ([14X8.4-2[114X).[133X
  
  [1X8.4-5 McAlisterTripleSemigroupSemilattice[101X
  
  [33X[1;0Y[29X[2XMcAlisterTripleSemigroupSemilattice[102X( [3XS[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10YA join-semilattice digraph.[133X
  
  [33X[0;0YReturns  the  [2XIsJoinSemilatticeDigraph[102X  ([14XDigraphs: IsJoinSemilatticeDigraph[114X)
  used to create the McAlister triple semigroup [3XS[103X via [2XMcAlisterTripleSemigroup[102X
  ([14X8.4-2[114X).[133X
  
  [1X8.4-6 McAlisterTripleSemigroupAction[101X
  
  [33X[1;0Y[29X[2XMcAlisterTripleSemigroupAction[102X( [3XS[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10YA function.[133X
  
  [33X[0;0YReturns  the  action  used  to  create  the McAlister triple semigroup [3XS[103X via
  [2XMcAlisterTripleSemigroup[102X ([14X8.4-2[114X).[133X
  
  [1X8.4-7 IsMcAlisterTripleSemigroupElement[101X
  
  [33X[1;0Y[29X[2XIsMcAlisterTripleSemigroupElement[102X( [3Xx[103X ) [32X filter[133X
  [33X[1;0Y[29X[2XIsMTSE[102X( [3Xx[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X.[133X
  
  [33X[0;0YReturns  [9Xtrue[109X  if  [3Xx[103X  is  an  element  of  a  McAlister triple semigroup; in
  particular,    this    returns    [9Xtrue[109X    if   [3Xx[103X   has   been   created   by
  [2XMcAlisterTripleSemigroupElement[102X    ([14X8.4-8[114X).   The   functions   [10XIsMTSE[110X   and
  [10XIsMcAlisterTripleSemigroupElement[110X are synonyms. The mathematical description
  of these objects can be found in the introduction to Chapter [14X8.4[114X.[133X
  
  [1X8.4-8 McAlisterTripleSemigroupElement[101X
  
  [33X[1;0Y[29X[2XMcAlisterTripleSemigroupElement[102X( [3XS[103X, [3XA[103X, [3Xg[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XMTSE[102X( [3XS[103X, [3XA[103X, [3Xg[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10YA McAlister triple semigroup element.[133X
  
  [33X[0;0YReturns  the  [13XMcAlister  triple  semigroup  element[113X  of the McAlister triple
  semigroup   [3XS[103X  which  corresponds  to  a  label  [3XA[103X  of  a  vertex  from  the
  [2XMcAlisterTripleSemigroupSemilattice[102X  ([14X8.4-5[114X)  of  [3XS[103X and a group element [3Xg[103X of
  the   [2XMcAlisterTripleSemigroupGroup[102X  ([14X8.4-3[114X)  of  [3XS[103X.  The  pair  [3X(A,g)[103X  only
  represents an element of [3XS[103X if the following holds: [3XA[103X acted on by the inverse
  of  [3Xg[103X  (via  [2XMcAlisterTripleSemigroupAction[102X  ([14X8.4-6[114X))  is  a  vertex  of the
  join-semilattice of [3XS[103X.[133X
  
  [33X[0;0YThe functions [10XMTSE[110X and [10XMcAlisterTripleSemigroupElement[110X are synonyms.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xx := Digraph([[1], [1, 2], [1, 2, 3], [1, 4], [1, 4, 5]]);[127X[104X
    [4X[28X<immutable digraph with 5 vertices, 11 edges>[128X[104X
    [4X[25Xgap>[125X [27Xy := InducedSubdigraph(x, [1, 2, 3]);[127X[104X
    [4X[28X<immutable digraph with 3 vertices, 6 edges>[128X[104X
    [4X[25Xgap>[125X [27XA := AutomorphismGroup(x);[127X[104X
    [4X[28XGroup([ (2,4)(3,5) ])[128X[104X
    [4X[25Xgap>[125X [27XS := McAlisterTripleSemigroup(A, x, y, OnPoints);[127X[104X
    [4X[28X<McAlister triple semigroup over Group([ (2,4)(3,5) ])>[128X[104X
    [4X[25Xgap>[125X [27XT := McAlisterTripleSemigroup(A, x, y);[127X[104X
    [4X[28X<McAlister triple semigroup over Group([ (2,4)(3,5) ])>[128X[104X
    [4X[25Xgap>[125X [27XS = T;[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XIsIsomorphicSemigroup(S, T);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xa := MTSE(S, 1, (2, 4)(3, 5));[127X[104X
    [4X[28X(1, (2,4)(3,5))[128X[104X
    [4X[25Xgap>[125X [27Xb := MTSE(S, 2, ());[127X[104X
    [4X[28X(2, ())[128X[104X
    [4X[25Xgap>[125X [27Xa * a;[127X[104X
    [4X[28X(1, ())[128X[104X
    [4X[25Xgap>[125X [27XIsMTSE(a * a);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xa = MTSE(T, 1, (2, 4)(3, 5));[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27Xa * b;[127X[104X
    [4X[28X(1, (2,4)(3,5))[128X[104X
  [4X[32X[104X
  
