Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind
 Top of Book   Previous Chapter   Next Chapter 

7 Semigroup Homomorphisms
 7.1 Introduction
  7.1-1 InfoAutos
 7.2 Creating Homomorphisms
  7.2-1 SemigroupHomomorphismByFunction

  7.2-2 SemigroupHomomorphismByImagesOfGens

  7.2-3 SemigroupHomomorphismByImages
 7.3 Inner Automorphisms
  7.3-1 InnerAutomorphismOfSemigroup

  7.3-2 ConjugatorOfInnerAutomorphismOfSemigroup

  7.3-3 IsInnerAutomorphismOfSemigroup

  7.3-4 InnerAutomorphismsOfSemigroup

  7.3-5 InnerAutomorphismsOfSemigroupInGroup

  7.3-6 InnerAutomorphismsAutomorphismGroup

  7.3-7 IsInnerAutomorphismsOfSemigroup

  7.3-8 IsInnerAutomorphismsOfZeroGroup
 7.4 Automorphism Groups
  7.4-1 AutomorphismGroup

  7.4-2 AutomorphismsSemigroupInGroup

  7.4-3 IsAutomorphismGroupOfSemigroup

  7.4-4 IsAutomorphismGroupOfSimpleSemigp

  7.4-5 IsAutomorphismGroupOfZeroGroup

  7.4-6 IsAutomorphismGroupOfZeroSemigroup

  7.4-7 IsAutomorphismGroupOfRMS

  7.4-8 IsAutomorphismGroupOfRZMS
 7.5 Rees Matrix Semigroups
  7.5-1 RMSIsoByTriple

  7.5-2 RZMSIsoByTriple

  7.5-3 IsRMSIsoByTripleRep

  7.5-4 IsRZMSIsoByTripleRep

  7.5-5 RMSInducedFunction

  7.5-6 RZMSInducedFunction

  7.5-7 RZMStoRZMSInducedFunction

  7.5-8 RZMSGraph

  7.5-9 RightTransStabAutoGroup
 7.6 Zero Groups
  7.6-1 ZeroGroupAutomorphism

  7.6-2 IsZeroGroupAutomorphismRep

  7.6-3 UnderlyingGroupAutoOfZeroGroupAuto
 7.7 Isomorphisms
  7.7-1 IsomorphismAutomorphismGroupOfRMS

  7.7-2 IsomorphismPermGroup

  7.7-3 IsomorphismFpSemigroup

  7.7-4 IsomorphismFpMonoid

  7.7-5 IsomorphismSemigroups

  7.7-6 IsomorphismReesMatrixSemigroupOfDClass

  7.7-7 IsomorphismReesMatrixSemigroup

7 Semigroup Homomorphisms

7.1 Introduction

In this chapter we give instructions on how to create semigroup homomorphisms using MONOID in several different ways.

In Section 7.2, 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.

In Section 7.3, 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 7.4. The AutomorphismGroup (7.4-1) has an interactive mode that allows the user to decide how the computation should proceed. This can be invoked by using the command SetInfoLevel(InfoAutos, 4); see InfoAutos (7.1-1).

In Section 7.5, commands for creating automorphisms and finding all automorphisms of Rees matrix semigroups and Rees 0-matrix semigroups are given.

In Section 7.6, functions for specifying the automorphisms of a zero group are given.

In the final section (7.7), functions for finding isomorphisms between various kinds of semigroups are given.

The methods behind the commands in this chapter are taken from [ABM07].

Please note: the following functions can only be used fully if GRAPE is fully installed (and loaded):

Please see Chapter 1 for further details on how to obtain GRAPE.

7.1-1 InfoAutos
> InfoAutos( info class )

This is the InfoClass for the functions in this chapter. Setting the value of InfoAutos to 1, 2, 3, or 4 using the command SetInfoLevel (Reference: SetInfoLevel) will give different levels of information about what GAP is doing during a computation. In particular, if the level of InfoAutos is set to 4, then AutomorphismGroup (7.4-1) runs in interactive mode.

7.2 Creating Homomorphisms

The principal functions for creating arbitrary semigroup homomorphisms are the following three.

7.2-1 SemigroupHomomorphismByFunction
> SemigroupHomomorphismByFunction( S, T, func )( operation )
> SemigroupHomomorphismByFunctionNC( S, T, func )( operation )

returns a semigroup homomorphism with representation IsSemigroupHomomorphismByFunctionRep from the semigroup S to the semigroup T defined by the function func.

SemigroupHomomorphismByFunction will find an isomorphism from S to a finitely presented semigroup or monoid (using IsomorphismFpSemigroup (7.7-3) or IsomorphismFpMonoid (7.7-4)) and then check that the list of values under func of the generators of S satisfy the relations of this presentation.

SemigroupHomomorphismByFunctionNC does not check that func defines a homomorphism and, in this case S and T can be semigroups, D-classes, H-classes or any combination of these.

  gap> gens:=[ Transformation( [ 1, 4, 3, 5, 2 ] ), 
  > Transformation( [ 2, 3, 1, 1, 2 ] ) ];;
  gap> S:=Semigroup(gens);;
  gap> gens:=[ Transformation( [ 1, 5, 1, 2, 1 ] ), 
  > Transformation( [ 5, 1, 4, 3, 2 ] ) ];;
  gap> T:=Semigroup(gens);;
  gap> idem:=Random(Idempotents(T));;
  gap> hom:=SemigroupHomomorphismByFunction(S, T, x-> idem);
  SemigroupHomomorphism ( <semigroup with 2 generators>-><semigroup with 
  2 generators>)
  gap> hom:=SemigroupHomomorphismByFunctionNC(S, T, x-> idem);
  SemigroupHomomorphism ( <semigroup with 2 generators>-><semigroup with 
  2 generators>)

7.2-2 SemigroupHomomorphismByImagesOfGens
> SemigroupHomomorphismByImagesOfGens( S, T, list )( operation )
> SemigroupHomomorphismByImagesOfGensNC( S, T, list )( operation )

returns a semigroup homomorphism with representation IsSemigroupHomomorphismByImagesOfGensRep from S to T where the image of the ith generator of S is the ith position in list.

SemigroupHomomorphismByImagesOfGens will find an isomorphism from S to a finitely presented semigroup or monoid (using IsomorphismFpSemigroup (7.7-3) or IsomorphismFpMonoid (7.7-4)) and then check that list satisfies the relations of this presentation.

SemigroupHomomorphismByImagesOfGensNC does not check that list induces a homomorphism.

  gap> gens:=[ Transformation( [ 1, 4, 3, 5, 2 ] ), 
  > Transformation( [ 2, 3, 1, 1, 2 ] ) ];;
  gap> S:=Semigroup(gens);;
  gap> gens:=[ Transformation( [ 1, 5, 1, 2, 1 ] ), 
  > Transformation( [ 5, 1, 4, 3, 2 ] ) ];;
  gap> T:=Semigroup(gens);;
  gap> SemigroupHomomorphismByImagesOfGens(S, T, GeneratorsOfSemigroup(T));
  fail
  gap> SemigroupHomomorphismByImagesOfGens(S, S, GeneratorsOfSemigroup(S));
  SemigroupHomomorphismByImagesOfGens ( <trans. semigroup of size 161 with 
  2 generators>-><trans. semigroup of size 161 with 2 generators>)

7.2-3 SemigroupHomomorphismByImages
> SemigroupHomomorphismByImages( S, T, list )( operation )
> SemigroupHomomorphismByImagesNC( S, T, list )( operation )

returns a semigroup homomorphism with representation IsSemigroupHomomorphismByImagesRep from S to T where the image of the ith element of S is the ith position in list.

SemigroupHomomorphismByImages will find an isomorphism from S to a finitely presented semigroup or monoid (using IsomorphismFpSemigroup (7.7-3) or IsomorphismFpMonoid (7.7-4)) and then check that list satisfies the relations of this presentation.

SemigroupHomomorphismByImagesNC does not check that list induces a homomorphism.

  gap> gens:=[ Transformation( [ 2, 3, 4, 2, 4 ] ),
  > Transformation( [ 3, 4, 2, 1, 4 ] ) ];;
  gap> S:=Semigroup(gens);;
  gap> gens:=[ Transformation( [ 2, 4, 4, 1, 2 ] ),
  > Transformation( [ 5, 1, 1, 5, 1 ] ) ];;
  gap> T:=Semigroup(gens);;
  gap> idem:=Transformation( [ 5, 5, 5, 5, 5 ] );;
  gap> list:=List([1..Size(S)], x-> idem);;
  gap> hom:=SemigroupHomomorphismByImages(S, T, list);
  SemigroupHomomorphismByImagesOfGens ( <trans. semigroup of size 164 with 
  2 generators>-><trans. semigroup with 2 generators>)
  gap> SemigroupHomomorphismByImagesNC(S, T, list);
  SemigroupHomomorphismByImages ( <trans. semigroup of size 164 with 
  2 generators>-><trans. semigroup with 2 generators>)

7.3 Inner Automorphisms

7.3-1 InnerAutomorphismOfSemigroup
> InnerAutomorphismOfSemigroup( S, perm )( operation )
> InnerAutomorphismOfSemigroupNC( S, perm )( operation )

returns the inner automorphism of the transformation semigroup S given by the permutation perm. The degree of perm should be at most the degree of S.

The notion of inner automorphisms of semigroups differs from the notion of the same name for groups. Indeed, if S is a semigroup of transformations of degree n, then g in the symmetric group S_n induces an inner automorphism of S if the mapping that takes s to g^-1sg for all s in S is an automorphism of S.

InnerAutomorphismOfSemigroup checks that the mapping induced by perm is an automorphism and InnerAutomorphismOfSemigroupNC only creates the appropriate object without performing a check that the permutation actually induces an automorphism.

  gap> gens:=[ Transformation( [ 6, 2, 7, 5, 3, 5, 4 ] ), 
  > Transformation( [ 7, 7, 5, 7, 2, 4, 3 ] ) ];;
  gap> S:=Monoid(gens);;
  gap> InnerAutomorphismOfSemigroup(S, (1,2,3,4,5));  
  fail
  gap> InnerAutomorphismOfSemigroupNC(S, (1,2,3,4,5));
  ^(1,2,3,4,5)
  gap> InnerAutomorphismOfSemigroup(S, ());
  ^()

7.3-2 ConjugatorOfInnerAutomorphismOfSemigroup
> ConjugatorOfInnerAutomorphismOfSemigroup( f )( attribute )

returns the permutation perm used to construct the inner automorphism f of a semigroup; see InnerAutomorphismOfSemigroup (7.3-1) for further details.

 
  gap> S:=RandomSemigroup(3,8);;
  gap> f:=InnerAutomorphismOfSemigroupNC(S, (1,2)(3,4));
  ^(1,2)(3,4)
  gap> ConjugatorOfInnerAutomorphismOfSemigroup(f);
  (1,2)(3,4)

7.3-3 IsInnerAutomorphismOfSemigroup
> IsInnerAutomorphismOfSemigroup( f )( property )

returns true if the general mapping f is an inner automorphism of a semigroup; see InnerAutomorphismOfSemigroup (7.3-1) for further details.

 
  gap> S:=RandomSemigroup(2,9);;
  gap> f:=InnerAutomorphismOfSemigroupNC(S, (1,2)(3,4));
  ^(1,2)(3,4)
  gap> IsInnerAutomorphismOfSemigroup(f);
  true

7.3-4 InnerAutomorphismsOfSemigroup
> InnerAutomorphismsOfSemigroup( S )( attribute )

InnerAutomorphismsOfSemigroup returns the group of inner automorphisms of the transformation semigroup S.

The same result can be obtained by applying InnerAutomorphismsAutomorphismGroup (7.3-6) to the result of AutomorphismGroup (7.4-1) of S. It is possible that the inner automorphism of S have been calculated at the same time as the entire automorphism group of S but it might not be. If the degree of S is high, then this function may take a long time to return a value.

The notion of inner automorphisms of semigroups differs from the notion of the same name for groups. Indeed, if S is a semigroup of transformations of degree n, then g in the symmetric group S_n induces an inner automorphism of S if the mapping that takes s to g^-1sg for all s in S is an automorphism of S.

gap> x:=Transformation([2,3,4,5,6,7,8,9,1]);;
gap> y:=Transformation([4,2,3,4,5,6,7,8,9]);;
gap> S:=Semigroup(x,y);;
gap> G:=InnerAutomorphismsOfSemigroup(S);
<group of size 54 with 2 generators>
	

7.3-5 InnerAutomorphismsOfSemigroupInGroup
> InnerAutomorphismsOfSemigroupInGroup( S, G[, bval] )( operation )

InnerAutomorphismsOfSemigroupInGroup returns the group of inner automorphisms of the transformation semigroup S that also belong to the group G. The default setting is that the inner automorphisms of S are calculated first, then filtered to see which elements also belong to G.

If the optional argument bval is present and true, then the filtering is done as the inner automorphisms are found rather than after they have all been found. Otherwise, then this is equivalent to doing InnerAutomorphismsOfSemigroupInGroup(S, G).

If InfoAutos (7.1-1) is set to level 4, then a prompt will appear during the procedure to let you decide when the filtering should be done. In this case the value of bval is irrelevant.

gap> gens:=[ Transformation( [1,8,11,2,5,16,13,14,3,6,15,10,7,4,9,12 ] ), 
>   Transformation( [1,16,9,6,5,8,13,12,15,2,3,4,7,10,11,14] ), 
>   Transformation( [1,3,7,9,1,15,5,11,13,11,13,3,5,15,7,9 ] ) ];;
gap> S:=Semigroup(gens);;
gap> InnerAutomorphismsOfSemigroup(S);
<group of size 16 with 3 generators>
gap> G:=Group(SemigroupHomomorphismByImagesOfGensNC(S, S, gens));
<group with 1 generators>
gap> InnerAutomorphismsOfSemigroupInGroup(S, G);
<group of size 1 with 1 generators>
gap> InnerAutomorphismsOfSemigroupInGroup(S, G, true);
<group of size 1 with 1 generators>
gap> InnerAutomorphismsOfSemigroupInGroup(S, G, false);
<group of size 1 with 1 generators>
	

7.3-6 InnerAutomorphismsAutomorphismGroup
> InnerAutomorphismsAutomorphismGroup( autgroup )( attribute )

If autgroup satisfies IsAutomorphismGroupOfSemigroup (7.4-3) then, this attribute stores the subgroup of inner automorphisms of the original semigroup.

It is possible that the inner automorphisms of autgroup have been calculated at the same time as autgroup was calculated but they might not be. If the degree of underlying semigroup is high, then this function may take a long time to return a value.

The notion of inner automorphisms of semigroups differs from the notion of the same name for groups. Indeed, if S is a semigroup of transformations of degree n, then g in the symmetric group S_n induces an inner automorphism of S if the mapping that takes s to g^-1sg for all s in S is an automorphism of S.

If autgroup satisfies IsAutomorphismGroupOfZeroGroup (7.4-5), then InnerAutomorphismsAutomorphismGroup returns the subgroup of inner automorphisms inside the automorphism group of the zero group by computing the inner automorphisms of the underlying group. Note that in this case the notion of inner automorphisms corresponds to that of the group theoretic notion.

gap> g1:=Transformation([3,3,2,6,2,4,4,6]);;
gap> g2:=Transformation([5,1,7,8,7,5,8,1]);;
gap> m6:=Semigroup(g1,g2);;
gap> A:=AutomorphismGroup(m6);
<group of size 12 with 2 generators>
gap> InnerAutomorphismsAutomorphismGroup(A);
<group of size 12 with 2 generators> 
gap> last=InnerAutomorphismsOfSemigroup(m6); 
	

7.3-7 IsInnerAutomorphismsOfSemigroup
> IsInnerAutomorphismsOfSemigroup( G )( property )

returns true if G is the inner automorphism group of a transformation semigroup.

The notion of inner automorphisms of semigroups differs from the notion of the same name for groups. Indeed, if S is a semigroup of transformations of degree n, then g in the symmetric group S_n induces an inner automorphism of S if the mapping that takes s to g^-1sg for all s in S is an automorphism of S.

Note that this property is set to true when the computation of the inner automorphisms is performed. Otherwise, there is no method to check if an arbitrary group satisfies this property.

gap> S:=RandomSemigroup(5,5);
<semigroup with 5 generators>
gap> I:=InnerAutomorphismsOfSemigroup(S);;
gap> IsInnerAutomorphismsOfSemigroup(I);
true
	

7.3-8 IsInnerAutomorphismsOfZeroGroup
> IsInnerAutomorphismsOfZeroGroup( G )( property )

returns true if G is the inner automorphism group of a zero group. This property is set to true when the computation of the inner automorphism group of the zero group is performed. Otherwise, there is no method to check if an arbitrary group satisfies this property.

Every inner automorphism of a zero group is just an inner automorphism of the underlying group that fixes the zero element. So, this notion of inner automorphism corresponds to the notion of inner automorphisms of a group.

gap> zg:=ZeroGroup(CyclicGroup(70));
<zero group with 4 generators>
gap> I:=InnerAutomorphismsAutomorphismGroup(AutomorphismGroup(zg));
<group of size 1 with 1 generators>
gap> IsInnerAutomorphismsOfZeroGroup(I);
true
	

7.4 Automorphism Groups

7.4-1 AutomorphismGroup
> AutomorphismGroup( S )( attribute )

AutomorphismGroup returns the group of automorphisms of the transformation semigroup, zero group, zero semigroup, Rees matrix semigroup, or Rees 0-matrix semigroup S; that is, semigroups satisfying the properties IsTransformationSemigroup (Reference: IsTransformationSemigroup), IsZeroGroup (5.2-15), IsZeroSemigroup (5.2-14), IsReesMatrixSemigroup (Reference: IsReesMatrixSemigroup), or IsReesZeroMatrixSemigroup (Reference: IsReesZeroMatrixSemigroup).

If S is a transformation semigroup, then AutomorphismGroup computes the automorphism group of S using the algorithm described in [ABM07].

If S is a (completely) simple transformation semigroup, then the automorphism group is computed by passing to an isomorphic Rees matrix semigroup. If S is a transformation group, then the automorphism group is computed by passing to an isomorphic permutation group. If S has order <10 and knows its Cayley table (MultiplicationTable (Reference: MultiplicationTable)), then the automorphism group is calculated by finding the setwise stabilizer of the Cayley table in the symmetric group of degree |S| under the action on the Cayley table.

If S is a zero group, then AutomorphismGroup computes the automorphism group of the underlying group. Obviously, every automorphism of a zero group is the extension of an automorphism of the underlying group that fixes the zero element.

If S is a zero semigroup, then every permutation of the elements of S that fixes the zero element is an automorphism. Thus the automorphism group of a zero semigroup of order n is isomorphic to the symmetric group on n-1 elements.

If S is a Rees matrix semigroup or a Rees 0-matrix semigroup, then the automorphism group of S is calculated using the algorithm described in [ABM07, Section 2]. In this case, the returned group has as many generators as elements. This may be changed in the future.

If InfoAutos (7.1-1) is set to level 4, then prompts will appear during the procedure to allow you interactive control over the computation.

Please note: if grape is not loaded, then this function will not work when S satisfies IsTransformationSemigroup (Reference: IsTransformationSemigroup) or IsReesZeroMatrixSemigroup (Reference: IsReesZeroMatrixSemigroup).

gap> g1:=Transformation([5,4,4,2,1]);;
gap> g2:=Transformation([2,5,5,4,1]);;
gap> m2:=Monoid(g1,g2);;
gap> IsTransformationSemigroup(m2);
true
gap> AutomorphismGroup(m2);
<group of size 24 with 5 generators>
gap> IsAutomorphismGroupOfSemigroup(last);
true
gap> zg:=ZeroGroup(CyclicGroup(70));
<zero group with 4 generators>
gap> IsZeroGroup(zg);
true
gap> AutomorphismGroup(zg);
<group with 3 generators>
gap> IsAutomorphismGroupOfZeroGroup(last);
true
gap> InnerAutomorphismsOfSemigroup(zg);
<group of size 1 with 1 generators>
gap> InnerAutomorphismsAutomorphismGroup(AutomorphismGroup(zg));
<group of size 1 with 1 generators>
gap> last2=InnerAutomorphismsAutomorphismGroup(AutomorphismGroup(zg));
true
gap> S:=ZeroSemigroup(10);
<zero semigroup with 10 elements>
gap> Size(S);
10
gap> Elements(S);
[ 0, z1, z2, z3, z4, z5, z6, z7, z8, z9 ]
gap> A:=AutomorphismGroup(S);
<group with 2 generators>
gap> IsAutomorphismGroupOfZeroSemigroup(A);
true
gap> Factorial(9)=Size(A);
true
gap> G:=Group([ (2,5)(3,4) ]);;
gap> mat:=[ [ (), (), (), (), () ], 
>   [ (), (), (2,5)(3,4), (2,5)(3,4), () ], 
>   [ (), (), (), (2,5)(3,4), (2,5)(3,4) ], 
>   [ (), (2,5)(3,4), (), (2,5)(3,4), () ], 
>   [ (), (2,5)(3,4), (), (2,5)(3,4), () ] ];;
gap> rms:=ReesMatrixSemigroup(G, mat);
Rees Matrix Semigroup over Group([ (2,5)(3,4) ])
gap> A:=AutomorphismGroup(rms);
<group of size 12 with 12 generators>
gap> IsAutomorphismGroupOfRMS(A);
true
gap> G:=ZeroGroup(Group([ (1,3)(2,5), (1,3,2,5) ]));;
gap> elts:=Elements(G);;
gap> mat:=[ [ elts[7], elts[1], elts[9], elts[1], elts[1] ], 
>   [ elts[1], elts[1], elts[1], elts[9], elts[1] ], 
>   [ elts[9], elts[1], elts[1], elts[4], elts[9] ], 
>   [ elts[1], elts[1], elts[1], elts[1], elts[1] ], 
>   [ elts[1], elts[5], elts[1], elts[1], elts[1] ] ];;
gap> rzms:=ReesZeroMatrixSemigroup(G, mat);;
gap> AutomorphismGroup(rzms);
gap> IsAutomorphismGroupOfRZMS(A);
true
<group of size 512 with 512 generators>
	

7.4-2 AutomorphismsSemigroupInGroup
> AutomorphismsSemigroupInGroup( S, G[, bvals] )( operation )

AutomorphismsSemigroupInGroup returns the group of automorphisms of the transformation semigroup S that also belong to the group G. If the value of G is fail, then AutomorphismsSemigroupInGroup returns the same value as AutomorphismGroup (7.4-1). The default setting is that the automorphisms of S are calculated first, then filtered to see which elements also belong to G.

The optional argument bvals is a list of 5 Boolean variables that correspond to the following options:

Please note: if grape is not loaded, then this function will not work when S satisfies IsTransformationSemigroup (Reference: IsTransformationSemigroup) or IsReesZeroMatrixSemigroup (Reference: IsReesZeroMatrixSemigroup).

gap> g1:=Transformation([5,4,4,2,1]);;
gap> g2:=Transformation([2,5,5,4,1]);;
gap> m2:=Monoid(g1,g2);;
gap> A:=AutomorphismsSemigroupInGroup(m2, fail, 
> [false, true, true, false, true]);
<group of size 24 with 3 generators>
gap> g1:=Transformation([3,3,2,6,2,4,4,6,3,4,6]);;
gap> g2:=Transformation([4,4,6,1,3,3,3,3,11,11,11]);;
gap> m7:=Monoid(g1,g2);;
gap> A:=AutomorphismsSemigroupInGroup(m7, fail, 
> [false, true, false, false, true]);
<group of size 2 with 2 generators>
gap> imgs:=[ [ Transformation( [ 1, 1, 5, 4, 3, 6, 7, 8, 9, 10, 11, 12 ] ), 
>       Transformation( [ 1, 1, 5, 7, 4, 3, 6, 8, 9, 10, 11, 12 ] ), 
>       Transformation( [ 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 8 ] ) ], 
>   [ Transformation( [ 1, 1, 5, 4, 3, 6, 7, 8, 9, 10, 11, 12 ] ), 
>       Transformation( [ 1, 1, 5, 3, 7, 4, 6, 8, 9, 10, 11, 12 ] ), 
>       Transformation( [ 1, 2, 3, 4, 5, 6, 7, 11, 12, 8, 9, 10 ] ) ] ];;
gap> gens:=List(imgs, x-> SemigroupHomomorphismByImagesOfGensNC(S, S, x));;
gap> G:=Group(gens);
<group with 2 generators>
gap> A:=AutomorphismsSemigroupInGroup(S, G, 
> [false, false, false, true, false]);
<group of size 48 with 4 generators>
gap> Size(G);
48
gap> A:=AutomorphismsSemigroupInGroup(S, G);
<group of size 48 with 4 generators>
gap> gens:=[ Transformation( [ 1, 1, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12 ] ), 
>   Transformation( [ 1, 1, 4, 5, 6, 7, 3, 8, 9, 10, 11, 12 ] ), 
>   Transformation( [ 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 8 ] ) ];;
gap> S:=Semigroup(gens);;
gap> A:=AutomorphismsSemigroupInGroup(S, G);
<group of size 48 with 4 generators>
gap> HasAutomorphismGroup(S);
true
gap> AutomorphismGroup(S);
<group of size 480 with 7 generators>
	

7.4-3 IsAutomorphismGroupOfSemigroup
> IsAutomorphismGroupOfSemigroup( G )( property )

returns true if G is the automorphism group of a semigroup. Note that this property is set to true when the computation of the automorphism group is performed. Otherwise, there is no method to check if an arbitrary group satisfies this property; see AutomorphismGroup (7.4-1) for an example of the usage of this command.

7.4-4 IsAutomorphismGroupOfSimpleSemigp
> IsAutomorphismGroupOfSimpleSemigp( G )( property )

returns true if G is the automorphism group of a simple transformation semigroup. This property is set to true when the computation of the automorphism group of the simple transformation semigroup is performed. Otherwise, there is no method to check if an arbitrary group satisfies this property; see AutomorphismGroup (7.4-1) for an example of the usage of this command.

7.4-5 IsAutomorphismGroupOfZeroGroup
> IsAutomorphismGroupOfZeroGroup( G )( property )

returns true if G is the automorphism group of a zero group. This property is set to true when the computation of the automorphism group of the zero group is performed. Otherwise, there is no method to check if an arbitrary group satisfies this property; see AutomorphismGroup (7.4-1) for an example of the usage of this command.

Every automorphism of a zero group is just an automorphism of the underlying group that fixes the zero element.

7.4-6 IsAutomorphismGroupOfZeroSemigroup
> IsAutomorphismGroupOfZeroSemigroup( G )( property )

returns true if G is the automorphism group of a zero semigroup. This property is set to true when the computation of the automorphism group of the zero semigroup is performed. Otherwise, there is no method to check if an arbitrary group satisfies this property; see AutomorphismGroup (7.4-1) for an example of the usage of this command.

Every permutation of a zero semigroup that fixes the zero element is an automorphism. Thus the automorphism group of a zero semigroup of order n is isomorphic to the symmetric group on n-1 elements.

7.4-7 IsAutomorphismGroupOfRMS
> IsAutomorphismGroupOfRMS( G )( property )

returns true if G is the automorphism group of a Rees matrix semigroup; that is, a semigroup created using the command ReesMatrixSemigroup (Reference: ReesMatrixSemigroup) and/or satisfying IsReesMatrixSemigroup (Reference: IsReesMatrixSemigroup).

Note that this property is set to true when the computation of the automorphism group is performed. Otherwise, there is no method to check if an arbitrary group satisfies this property; see AutomorphismGroup (7.4-1) for an example of the usage of this command.

7.4-8 IsAutomorphismGroupOfRZMS
> IsAutomorphismGroupOfRZMS( G )( property )

returns true if G is the automorphism group of a Rees matrix semigroup; that is, a semigroup created using the command ReesZeroMatrixSemigroup (Reference: ReesZeroMatrixSemigroup) and/or satisfying IsReesZeroMatrixSemigroup (Reference: IsReesZeroMatrixSemigroup).

Note that this property is set to true when the computation of the automorphism group is performed. Otherwise, there is no method to check if an arbitrary group satisfies this property; see AutomorphismGroup (7.4-1) for an example of the usage of this command.

7.5 Rees Matrix Semigroups

7.5-1 RMSIsoByTriple
> RMSIsoByTriple( rms1, rms2, triple )( function )

this is a function to create an isomorphism between the Rees matrix semigroups rms1 and rms2 defined by triple. The first component of triple should be an isomorphism from the underlying group of rms1 to the underlying group of rms2, the second component should be an isomorphism from the graph associated to the matrix of rms1 to the graph associated with the matrix of rms2, and the third component should be a function (given as a list of image elements) from the index sets of rms1 to the underlying group of rms2; see [ABM07, Section 2] for further details.

Note that this function only creates an object with representation IsRMSIsoByTripleRep (7.5-3) and does not check that triple actually defines an isomorphism from rms1 to rms2 or that the arguments even make sense. To create an isomorphism from rms1 to rms2 use IsomorphismSemigroups (7.7-5).

gap> G:=Group((1,4,3,5,2));;
gap> mat:=[ [ (), (), () ], [ (), (1,4,3,5,2), () ], [ (), (1,3,2,4,5), () ] ];;
gap> rms:=ReesMatrixSemigroup(G, mat);;
gap> l:=(4,6);;
gap> g:=GroupHomomorphismByImages(G, G, [(1,4,3,5,2)], [(1,2,5,3,4)]);
[ (1,4,3,5,2) ] -> [ (1,2,5,3,4) ]
gap> map:=[(), (1,5,4,2,3), (), (), (), () ];;
gap> RMSIsoByTriple(rms, rms, [l, g, map]);
[ (4,6), GroupHomomorphismByImages( Group( [ (1,4,3,5,2) ] ), Group( 
  [ (1,4,3,5,2) ] ), [ (1,4,3,5,2) ], [ (1,2,5,3,4) ] ), 
  [ (), (1,5,4,2,3), (), (), (), () ] ]
gap> IsRMSIsoByTripleRep(last);
true
gap> #the previous actually defines an automorphism of rms
gap> #on the other hand, the next example is nonsense but no error
gap> #is given
gap> RMSIsoByTriple(rms, rms, [l, g, [()]]);
[ (4,6), GroupHomomorphismByImages( Group( [ (1,4,3,5,2) ] ), Group( 
  [ (1,4,3,5,2) ] ), [ (1,4,3,5,2) ], [ (1,2,5,3,4) ] ), [ () ] ]

7.5-2 RZMSIsoByTriple
> RZMSIsoByTriple( rzms1, rzms2, triple )( function )

this is a function to create an isomorphism between the Rees 0-matrix semigroups rzms1 and rzms2 defined by triple. The first component of triple should be an isomorphism from the underlying zero group of rzms1 to the underlying zero group of rzms2, the second component should be an isomorphism from the graph associated to the matrix of rzms1 to the graph associated with the matrix of rzms2, and the third component should be a function (given as a list of image elements) from the index sets of rzms1 to the underlying zero group of rzms2; see [ABM07, Section 2] for further details.

Note that this function only creates an object with representation IsRZMSIsoByTripleRep (7.5-4) and does not check that triple actually defines an isomorphism from rzms1 to rzms2 or that the arguments even make sense. To create an isomorphism from rzms1 to rzms2 use IsomorphismSemigroups (7.7-5).

gap> G:=Group((1,4,3,5,2));;
gap> ZG:=ZeroGroup(G);
<zero group with 2 generators>
gap> mat:=[ [ (), (), () ], [ (), (1,4,3,5,2), () ], [ (), (1,3,2,4,5), () ] ];;
gap> mat:=List(mat, x-> List(x, ZeroGroupElt));
[ [ (), (), () ], [ (), (1,4,3,5,2), () ], [ (), (1,3,2,4,5), () ] ]
gap> rms:=ReesZeroMatrixSemigroup(ZG, mat);
Rees Zero Matrix Semigroup over <zero group with 2 generators>
gap> l:=(4,6);;
gap> g:=GroupHomomorphismByImages(G, G, [(1,4,3,5,2)], [(1,2,5,3,4)]);
[ (1,4,3,5,2) ] -> [ (1,2,5,3,4) ]
gap> g:=ZeroGroupAutomorphism(ZG, g);
<mapping: <zero group with 2 generators> -> <zero group with 2 generators> >
gap>  map:=List([(), (1,5,4,2,3), (), (), (), () ], ZeroGroupElt);;
gap> RZMSIsoByTriple(rms, rms, [l, g, map]);
[ (4,6), <mapping: <zero group with 2 generators> -> <zero group with 
  2 generators> >, 
[ ZeroGroup(()), ZeroGroup((1,5,4,2,3)), ZeroGroup(()), ZeroGroup(()), 
    ZeroGroup(()), ZeroGroup(()) ] ]
gap> RZMSIsoByTriple(rms, rms, [l, g, [()]]);
[ (4,6), <mapping: <zero group with 2 generators> -> <zero group with 
  2 generators> >, [ () ] ]
gap> IsRZMSIsoByTripleRep(last);
true    

7.5-3 IsRMSIsoByTripleRep
> IsRMSIsoByTripleRep( f )( representation )

returns true if the object f is represented as an isomorphism of Rees matrix semigroups by a triple; as explained in [ABM07, Section 2]; see RMSIsoByTriple (7.5-1) for an example of the usage of this command.

7.5-4 IsRZMSIsoByTripleRep
> IsRZMSIsoByTripleRep( f )( representation )

returns true if the object f is represented as an isomorphism of Rees matrix semigroups by a triple; as explained in [ABM07, Section 2]; see RZMSIsoByTriple (7.5-2) for an example of the usage of this command.

7.5-5 RMSInducedFunction
> RMSInducedFunction( RMS, lambda, gamma, g )( operation )

lambda is an automorphism of the graph associated to the Rees matrix semigroup RMS, gamma an automorphism of the underlying group of RMS, and g an element of the underlying group of RMS. The function RMSInducedFunction attempts to find the function determined by lambda and gamma from the union of the index sets I and J to the group G of the Rees matrix semigroup RMS over G, I, and J with respect to P where the first element is given by the element g. If a conflict is found, then false is returned together with the induced map; see [ABM07, Section 2] for further details.

gap> G:=Group([ (1,2) ]);;
gap> mat:=[ [ (), (), () ], [ (), (1,2), () ], [ (), (1,2), (1,2) ], 
>    [ (), (), () ], [ (), (1,2), () ] ];;
gap> rms:=ReesMatrixSemigroup(G, mat);;
gap> l:=(1,2)(4,5,6);
(1,2)(4,5,6)
gap> gam:=One(AutomorphismGroup(G));
IdentityMapping( Group([ (1,2) ]) )
gap> g:=(1,2);
gap> RMSInducedFunction(rms, l, gam, g);
[ false, [ (1,2), (), (), (), (), (1,2), (1,2), () ] ]
gap> RMSInducedFunction(rms, (4,7), gam, ());
[ true, [ (), (), (), (), (), (), (), () ] ]

7.5-6 RZMSInducedFunction
> RZMSInducedFunction( RZMS, lambda, gamma, g, comp )( operation )

lambda is an automorphism of the graph associated to the Rees 0- matrix semigroup RZMS, gamma an automorphism of the underlying zero group of RZMS, comp is a connected component of the graph associated to RZMS, and g is an element of the underlying zero group of RZMS. The function RZMSInducedFunction attempts to find the partial function determined by lambda and gamma from comp to the zero group G^0 of G of the Rees 0-matrix semigroup RZMS over G^0, I, and J with respect to P where the image of the first element in comp is given by the element g. If a conflict is found, then fail is returned; see [ABM07, Section 2] for further details.

Please note: if grape is not loaded, then this function will not work.

gap> zg:=ZeroGroup(Group(()));;
gap> z:=Elements(zg)[1];
0
gap> x:=Elements(zg)[2];
()
gap> mat:=[ [ z, z, z ], [ x, z, z ], [ x, x, z ] ];;
gap> rzms:=ReesZeroMatrixSemigroup(zg, mat);;
gap> RZMSInducedFunction(rzms, (), One(AutomorphismGroup(zg)), x, 
> [1,2,5,6])
[ (), (),,, (), () ]
gap> RZMSInducedFunction(rzms, (), One(AutomorphismGroup(zg)), x, [3]);     
[ ,, () ]
gap> RZMSInducedFunction(rzms, (), One(AutomorphismGroup(zg)), x, [4]);
[ ,,, () ]
gap> zg:=ZeroGroup(Group([ (1,5,2,3), (1,4)(2,3) ]));;
gap> elts:=Elements(zg);;
gap> mat:=[ [ elts[1], elts[1], elts[11], elts[1], elts[1] ], 
>    [ elts[1], elts[13], elts[21], elts[1], elts[1] ], 
>    [ elts[1], elts[16], elts[1], elts[16], elts[3] ], 
>    [ elts[10], elts[17], elts[1], elts[1], elts[1] ], 
>    [ elts[1], elts[1], elts[1], elts[4], elts[1] ] ];
gap> rzms:=ReesZeroMatrixSemigroup(zg, mat);                                   
gap> RZMSInducedFunction(rzms, (), Random(AutomorphismGroup(zg)), 
> Random(elts), [1..10])=fail;
false
	

7.5-7 RZMStoRZMSInducedFunction
> RZMStoRZMSInducedFunction( RZMS1, RZMS2, lambda, gamma, elts )( operation )

lambda is an automorphism of the graph associated to the Rees 0- matrix semigroup RZMS1 composed with isomorphism from that graph to the graph of RZMS2, gamma an automorphism of the underlying zero group of RZMS1, and elts is a list of elements of the underlying zero group of RZMS2. The function RZMStoRZMSInducedFunction attempts to find the function determined by lambda and gamma from the union of the index sets I and J of RZMS1 to the zero group G^0 of the Rees 0-matrix semigroup RZMS2 over the zero group G^0, sets I and J, and matrix P where the image of the first element in the ith connected component of the associated graph of RZMS1 is given by elts[i]. If a conflict is found, then false is returned; see [ABM07, Section 2] for further details.

Please note: if grape is not loaded, then this function will not work.

gap> gens:=[ Transformation( [ 4, 4, 8, 8, 8, 8, 4, 8 ] ), 
  Transformation( [ 8, 2, 8, 2, 5, 5, 8, 8 ] ), 
  Transformation( [ 8, 8, 3, 7, 8, 3, 7, 8 ] ), 
  Transformation( [ 8, 6, 6, 8, 6, 8, 8, 8 ] ) ];;
gap> S:=Semigroup(gens);;
gap> D:=GreensDClasses(S);;
gap> rms1:=Range(IsomorphismReesMatrixSemigroupOfDClass(D[1]));
Rees Zero Matrix Semigroup over <zero group with 2 generators>
gap> rms2:=Range(IsomorphismReesMatrixSemigroupOfDClass(D[4]));
Rees Zero Matrix Semigroup over <zero group with 2 generators>
gap> gam:=One(AutomorphismGroup
> (UnderlyingSemigroupOfReesZeroMatrixSemigroup(Group(rms1))));
IdentityMapping( <zero group with 2 generators> )
gap> g:=One(UnderlyingSemigroupOfReesZeroMatrixSemigroup(rms2));
()
gap> RZMStoRZMSInducedFunction(rms1, rms2, (2,3)(5,6), gam, [g]);
[ (), (), (), (), (), () ]
	

7.5-8 RZMSGraph
> RZMSGraph( rzms )( attribute )

if rzms is a Rees 0-matrix semigroup over a zero group G^0, 3 index sets I and J, and matrix P, then RZMSGraph returns the undirected bipartite graph with |I|+|J| vertices and edge (i,j) if and only if i<|I|+1, j>|I| and p_{j-|I|, i} is not zero.

The returned object is a simple undirected graph created in GRAPE using the command

Graph(Group(()), [1..n+m], OnPoints, adj, true);

where adj is true if and only if i<|I|+1, j>|I| and p_{j-|I|, i} is not zero.

Please note: if grape is not loaded, then this function will not work.

gap> zg:=ZeroGroup(Group(()));;
gap> z:=Elements(zg)[1];
0
gap> x:=Elements(zg)[2];
()
gap> mat:=[ [ 0, 0, 0 ], [ (), 0, 0 ], [ (), (), 0 ] ];;
gap> rzms:=ReesZeroMatrixSemigroup(zg, mat);;
gap> RZMSGraph(rzms);
rec( isGraph := true, order := 6, group := Group(()), 
  schreierVector := [ -1, -2, -3, -4, -5, -6 ], 
  adjacencies := [ [ 5, 6 ], [ 6 ], [  ], [  ], [ 1 ], [ 1, 2 ] ], 
  representatives := [ 1, 2, 3, 4, 5, 6 ], names := [ 1, 2, 3, 4, 5, 6 ] )
gap> UndirectedEdges(last);
[ [ 1, 5 ], [ 1, 6 ], [ 2, 6 ] ]

7.5-9 RightTransStabAutoGroup
> RightTransStabAutoGroup( S, elts, func )( operation )

returns a right transversal of the stabilizer w.r.t the action func of the elements elts in the automorphism group of the zero semigroup, Rees matrix semigroup, or Rees 0-matrix semigroup S. That is, S satisfying IsZeroSemigroup (5.2-14), IsReesMatrixSemigroup (Reference: IsReesMatrixSemigroup), or IsReesZeroMatrixSemigroup (Reference: IsReesZeroMatrixSemigroup).

gap> S:=ZeroSemigroup(6);
<zero semigroup with 6 elements>
gap> elts:=Elements(S);
[ 0, z1, z2, z3, z4, z5 ]
gap> Length(RightTransStabAutoGroup(S, [elts[1]], OnSets));
1
gap> Length(RightTransStabAutoGroup(S, [elts[1], elts[2]], OnSets));
5
gap> Length(RightTransStabAutoGroup(S, [elts[1], elts[2]], OnTuples));
5
gap> G:=Group([ (1,2) ]);;
gap> mat:=[ [ (), (), () ], [ (), (1,2), () ], [ (), (1,2), (1,2) ], 
>    [ (), (), () ], [ (), (1,2), () ] ];;
gap> rms:=ReesMatrixSemigroup(G, mat);;
gap> Size(rms);
30
gap> GeneratorsOfSemigroup(rms);
[ (1,(),2), (1,(),3), (1,(),4), (1,(),5), (2,(),1), (3,(),1), (1,(1,2),1) ]
gap> Length(RightTransStabAutoGroup(rms, last, OnSets));
4
gap> Length(RightTransStabAutoGroup(rms, GeneratorsOfSemigroup(rms), 
> OnTuples));
8
gap> G:=ZeroGroup(Group([ (1,3) ]));;
gap> z:=MultiplicativeZero(G);; x:=Elements(G)[2];;
gap> mat:=[ [ z, z, z ], [ z, z, z ], [ z, z, z ], [ z, z, z ], [ z, x, z ] ];;
gap> rzms:=ReesZeroMatrixSemigroup(G, mat);
gap> Size(rzms);
31
gap> Size(GeneratorsOfSemigroup(rzms));
6
gap> Length(RightTransStabAutoGroup(rzms, GeneratorsOfSemigroup(rzms), 
> OnSets));
512
gap> A:=AutomorphismGroup(rzms);
<group of size 3072 with 3072 generators>

7.6 Zero Groups

7.6-1 ZeroGroupAutomorphism
> ZeroGroupAutomorphism( ZG, f )( function )

converts the group automorphism f of the underlying group of the zero group ZG into an automorphism of the zero group ZG.

gap> G:=Random(AllGroups(20));
<pc group of size 20 with 3 generators>
gap> A:=AutomorphismGroup(G);
<group with 2 generators>
gap> f:=Random(A);
[ f1*f2^4*f3 ] -> [ f1*f2^2 ]
gap> ZG:=ZeroGroup(G);
<zero group with 4 generators>
gap> ZeroGroupAutomorphism(ZG, f);
<mapping: <zero group with 4 generators> -> <zero group with 4 generators> >
gap> IsZeroGroupAutomorphismRep(last);
true
gap> UnderlyingGroupAutoOfZeroGroupAuto(last2)=f;
true
	

7.6-2 IsZeroGroupAutomorphismRep
> IsZeroGroupAutomorphismRep( f )( representation )

returns true if the object f is represented as an automorphism of a zero group; see ZeroGroupAutomorphism (7.6-1) for an example of the usage of this command.

7.6-3 UnderlyingGroupAutoOfZeroGroupAuto
> UnderlyingGroupAutoOfZeroGroupAuto( f )( attribute )

returns the underlying group automorphism of the zero group automorphism f. That is, the restriction of f to its source without the zero; see ZeroGroupAutomorphism (7.6-1) for an example of the usage of this command.

7.7 Isomorphisms

7.7-1 IsomorphismAutomorphismGroupOfRMS
> IsomorphismAutomorphismGroupOfRMS( G )( attribute )

if G is the automorphism group of a simple transformation semigroup, then IsomorphismAutomorphismGroupOfRMS returns a GroupHomomorphismByImages (Reference: GroupHomomorphismByImages) from the automorphism group of G to the automorphism group of an isomorphic Rees matrix semigroup, obtained by using IsomorphismReesMatrixSemigroup (7.7-7).

gap> g1:=Transformation([1,2,2,1,2]);;
gap> g2:=Transformation([3,4,3,4,4]);;
gap> g3:=Transformation([3,4,3,4,3]);;
gap> g4:=Transformation([4,3,3,4,4]);;
gap> cs5:=Semigroup(g1,g2,g3,g4);;
gap> AutomorphismGroup(cs5);
<group of size 16 with 3 generators>
gap> IsomorphismAutomorphismGroupOfRMS(last);
[ SemigroupHomomorphism ( <semigroup with 4 generators>-><semigroup with 
    4 generators>), SemigroupHomomorphism ( <semigroup with 
    4 generators>-><semigroup with 4 generators>), 
  SemigroupHomomorphism ( <semigroup with 4 generators>-><semigroup with 
    4 generators>) ] -> 
[ [ (1,4)(2,3)(5,6), IdentityMapping( Group( [ (1,2) ] ) ), 
      [ (), (1,2), (1,2), (), (), () ] ], 
  [ (1,3,4,2), IdentityMapping( Group( [ (1,2) ] ) ), 
      [ (), (), (), (), (), (1,2) ] ], 
  [ (1,3)(2,4), IdentityMapping( Group( [ (1,2) ] ) ), 
      [ (), (), (), (), (), (1,2) ] ] ] 
	

7.7-2 IsomorphismPermGroup
> IsomorphismPermGroup( G )( attribute )

if G satisfies IsAutomorphismGroupOfSimpleSemigp (7.4-4), then IsomorphismPermGroup returns an isomorphism from G to a permutation group by composing the result f of IsomorphismAutomorphismGroupOfRMS (7.7-1) on G with the result of IsomorphismPermGroup on Range(f).

if G satisfies IsAutomorphismGroupOfRMS (7.4-7) or IsAutomorphismGroupOfRZMS (7.4-8), then IsomorphismPermGroup returns an isomorphism from G to a permutation group acting either on the elements of S or on itself, whichever gives a permutation group of lower degree.

if G is a transformation semigroup that satisfies IsGroupAsSemigroup (5.2-3), then IsomorphismPermGroup returns an isomorphism from G to the permutation group obtained by applying AsPermOfRange (2.3-2) to any element of G.

if G is a group H-class of a transformation semigroup, then IsomorphismPermGroup returns an isomorphism from G to the permutation group obtained by applying AsPermOfRange (2.3-2) to any element of G.

gap> g1:=Transformation([3,3,2,6,2,4,4,6]);;
gap> g2:=Transformation([5,1,7,8,7,5,8,1]);;
gap> cs1:=Semigroup(g1,g2);;
gap> AutomorphismGroup(cs1);
<group of size 12 with 2 generators>
gap> IsomorphismPermGroup(last);
[ SemigroupHomomorphism ( <semigroup with 2 generators>-><semigroup with 
    2 generators>), SemigroupHomomorphism ( <semigroup with 
    2 generators>-><semigroup with 2 generators>) ] -> 
[ (1,11,2,12,3,10)(4,8,5,9,6,7), (1,6)(2,5)(3,4)(7,10)(8,12)(9,11) ]
gap> Size(cs1);
96
gap> a:=IdempotentNC([[1,3,4],[2,5],[6],[7],[8]],[3,5,6,7,8])*(3,5);;
gap> b:=IdempotentNC([[1,3,4],[2,5],[6],[7],[8]],[3,5,6,7,8])*(3,6,7,8);;
gap> S:=Semigroup(a,b);;
gap> IsGroupAsTransSemigroup(S);
true
gap> IsomorphismPermGroup(S);
SemigroupHomomorphism ( <semigroup with 2 generators>->Group(
[ (3,5), (3,6,7,8) ]))
gap> gens:=[Transformation([3,5,3,3,5,6]), Transformation([6,2,4,2,2,6])];;
gap> S:=Semigroup(gens);;
gap> H:=GroupHClassOfGreensDClass(GreensDClassOfElement(S, Elements(S)[1]));
{Transformation( [ 2, 2, 2, 2, 2, 6 ] )}
gap> IsomorphismPermGroup(H);
SemigroupHomomorphism ( {Transformation( [ 2, 2, 2, 2, 2, 6 ] )}->Group(()))
	

7.7-3 IsomorphismFpSemigroup
> IsomorphismFpSemigroup( S )( attribute )

returns an isomorphism to a finitely presented semigroup from the transformation semigroup S. This currently works by running the function FroidurePinExtendedAlg (???) in the library.

If S satisfies IsMonoid (Reference: IsMonoid), use the command IsomorphismFpMonoid (7.7-4) instead.

 
gap> gens:=[ Transformation( [1,8,11,2,5,16,13,14,3,6,15,10,7,4,9,12 ] ), 
>   Transformation( [1,16,9,6,5,8,13,12,15,2,3,4,7,10,11,14] ), 
>   Transformation( [1,3,7,9,1,15,5,11,13,11,13,3,5,15,7,9 ] ) ];
gap> S:=Semigroup(gens);
<semigroup with 3 generators>
gap> IsomorphismFpSemigroup(last);
SemigroupHomomorphismByImages ( <trans. semigroup of size 16 with 
3 generators>->Semigroup( [ s1, s2, s3 ] ))
	

7.7-4 IsomorphismFpMonoid
> IsomorphismFpMonoid( S )( attribute )

returns an isomorphism to a finitely presented monoid from the transformation monoid S. Currently works by running the function FroidurePinExtendedAlg (???) in the library.

If S satisfies IsSemigroup (Reference: IsSemigroup), use the command IsomorphismFpSemigroup (7.7-3) instead.

 
gap> x:=Transformation([2,3,4,5,6,7,8,9,1]);;
gap> y:=Transformation([4,2,3,4,5,6,7,8,9]);;
gap> S:=Monoid(x,y);;
gap> IsomorphismFpMonoid(last);
SemigroupHomomorphismByImages ( <trans. semigroup of size 40266 with 
3 generators>->Monoid( [ m1, m2 ], ... ))
gap> Length(RelationsOfFpMonoid(Range(last)));
932
	

7.7-5 IsomorphismSemigroups
> IsomorphismSemigroups( S, T )( operation )

this operation returns an isomorphism from the semigroup S to the semigroup T if one exists and returns fail otherwise.

Please note: this function currently only works for zero groups, zero semigroups, Rees matrix semigroups, and Rees 0-matrix semigroups.

Please note: if grape is not loaded, then this function will not work when S and T satisfy IsReesZeroMatrixSemigroup (Reference: IsReesZeroMatrixSemigroup).

gap> ZG1:=ZeroGroup(Group((1,2,3,5,4)));
<zero group with 2 generators>
gap> ZG2:=ZeroGroup(Group((1,2,3,4,5)));
<zero group with 2 generators>
gap> IsomorphismSemigroups(ZG1, ZG2);
SemigroupHomomorphismByImagesOfGens ( <zero group with 
2 generators>-><zero group with 2 generators>)
gap> ZG2:=ZeroGroup(Group((1,2,3,4)));
<zero group with 2 generators>
gap> IsomorphismSemigroups(ZG1, ZG2);
fail
gap> IsomorphismSemigroups(ZeroSemigroup(5),ZeroSemigroup(5));
IdentityMapping( <zero semigroup with 5 elements> )
gap> IsomorphismSemigroups(ZeroSemigroup(5),ZeroSemigroup(6));
fail
gap> gens:=[ Transformation( [ 4, 4, 8, 8, 8, 8, 4, 8 ] ), 
>   Transformation( [ 8, 2, 8, 2, 5, 5, 8, 8 ] ), 
>   Transformation( [ 8, 8, 3, 7, 8, 3, 7, 8 ] ), 
>   Transformation( [ 8, 6, 6, 8, 6, 8, 8, 8 ] ) ];;
gap> S:=Semigroup(gens);;
gap> D:=GreensDClasses(S);;
gap> rms1:=Range(IsomorphismReesMatrixSemigroupOfDClass(D[1]));;
gap> rms2:=Range(IsomorphismReesMatrixSemigroupOfDClass(D[4]));;
gap> IsomorphismSemigroups(rms1, rms2);
[ (2,3)(5,6), IdentityMapping( <zero group with 2 generators> ), 
  [ ZeroGroup(()), ZeroGroup(()), ZeroGroup(()), ZeroGroup(()), 
      ZeroGroup(()), ZeroGroup(()) ] ]
gap> IsomorphismSemigroups(rms2, rms1);
[ (2,3)(5,6), IdentityMapping( <zero group with 2 generators> ), 
  [ ZeroGroup(()), ZeroGroup(()), ZeroGroup(()), ZeroGroup(()),  
      ZeroGroup(()), ZeroGroup(()) ] ]
gap> rms2:=Range(IsomorphismReesMatrixSemigroupOfDClass(D[2]));
Group(())
gap> IsomorphismSemigroups(rms2, rms1);
fail
gap> rms2:=RandomReesZeroMatrixSemigroup(5,5,5);
Rees Zero Matrix Semigroup over <zero group with 2 generators>
gap> IsomorphismSemigroups(rms2, rms1);
fail
gap> rms2:=RandomReesMatrixSemigroup(5,5,5);
Rees Matrix Semigroup over Group([ (1,2)(3,4,5), (2,4,3), (1,4,5,3), 
  (1,4,5,2) ])
gap> IsomorphismSemigroups(rms2, rms1);
fail
gap> IsomorphismSemigroups(rms1, rms2);
fail
	

7.7-6 IsomorphismReesMatrixSemigroupOfDClass
> IsomorphismReesMatrixSemigroupOfDClass( D )( attribute )

The principal factor of the D-class D is the semigroup with elements D and 0 and multiplication x*y defined to be the product xy in the semigroup containing D if xy in D and 0 otherwise.

IsomorphismReesMatrixSemigroupOfDClass returns an isomorphism from the principal factor of the D-class D to a Rees matrix, Rees 0-matrix or zero semigroup, as given by the Rees-Suschewitsch Theorem; see [How95, Theorem 3.2.3].

 
gap> g1:=Transformation( [ 4, 6, 3, 8, 5, 6, 10, 4, 3, 7 ] );;
gap> g2:=Transformation( [ 5, 6, 6, 3, 8, 6, 3, 7, 8, 4 ] );;
gap> g3:=Transformation( [ 8, 6, 3, 2, 8, 10, 9, 2, 6, 2 ] );;
gap> m23:=Monoid(g1,g2,g3);;
gap> D:=GreensDClasses(m23)[17];
{Transformation( [ 7, 6, 6, 6, 7, 4, 8, 6, 6, 6 ] )}
gap> IsomorphismReesMatrixSemigroupOfDClass(D);
SemigroupHomomorphism ( {Transformation( [ 7, 6, 6, 6, 7, 4, 8, 6, 6, 6 
 ] )}-><zero semigroup with 3 elements>)
gap> D:=GreensDClasses(m23)[77];
{Transformation( [ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 ] )}
gap> IsomorphismReesMatrixSemigroupOfDClass(D);
SemigroupHomomorphism ( {Transformation( [ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 
 ] )}->Rees Matrix Semigroup over Group(()))
gap> D:=GreensDClasses(m23)[1];
{Transformation( [ 1 .. 10 ] )}
gap> IsomorphismReesMatrixSemigroupOfDClass(D);
SemigroupHomomorphism ( {Transformation( [ 1 .. 10 ] )}->Group(()))
gap> D:=GreensDClasses(m23)[23];
{Transformation( [ 6, 7, 3, 6, 6, 6, 6, 6, 7, 6 ] )}
gap> IsomorphismReesMatrixSemigroupOfDClass(D);
SemigroupHomomorphism ( {Transformation( [ 6, 7, 3, 6, 6, 6, 6, 6, 7, 6 
 ] )}->Rees Zero Matrix Semigroup over <zero group with 3 generators>)
	

7.7-7 IsomorphismReesMatrixSemigroup
> IsomorphismReesMatrixSemigroup( S )( operation )

returns an isomorphism from the (completely) simple transformation semigroup S to a Rees matrix semigroup, as given by the Rees-Suschewitsch Theorem; see [How95, Theorem 3.2.3].

gap> g1:=Transformation( [ 2, 3, 4, 5, 1, 8, 7, 6, 2, 7 ] );;
gap> g2:=Transformation( [ 2, 3, 4, 5, 6, 8, 7, 1, 2, 2 ] );;
gap> cs2:=Semigroup(g1,g2);;
gap> IsomorphismReesMatrixSemigroup(cs2);
SemigroupHomomorphism ( <semigroup with 
2 generators>->Rees Matrix Semigroup over Group(
[ (2,5)(3,8)(4,6), (1,6,3)(5,8) ]))
 Top of Book   Previous Chapter   Next Chapter 
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML