diff --git a/doc/semieunit.xml b/doc/semieunit.xml index a74e4e39be..07f499c9f0 100644 --- a/doc/semieunit.xml +++ b/doc/semieunit.xml @@ -118,11 +118,7 @@ gap> T := McAlisterTripleSemigroup(A, x, y); gap> S = T; false gap> IsIsomorphicSemigroup(S, T); -true -gap> GeneratorsOfSemigroup(T); -[ (1, ()), (4, ()), (5, ()), (1, (2,4)(3,5)) ] -gap> AsSemigroup(IsPartialPermSemigroup, T); -]]> +true]]> <#/GAPDoc> diff --git a/gap/main/setup.gi b/gap/main/setup.gi index d354d97bf5..772ef310b5 100644 --- a/gap/main/setup.gi +++ b/gap/main/setup.gi @@ -51,7 +51,8 @@ InstallMethod(IsGeneratorsOfActingSemigroup, "for a McAlister triple element collection", [IsMcAlisterTripleSemigroupElementCollection], function(coll) - return IsPermGroup(McAlisterTripleSemigroupGroup(MTSEParent(coll[1]))); + return + IsPermGroup(McAlisterTripleSemigroupGroup(MTSEParent(Representative(coll)))); # and McAlisterTripleSemigroupAction(MTSEParent(coll[1])) = OnPoints; end); @@ -102,11 +103,10 @@ function(x) return NrMovedPoints(x![2]) + 1; end); -# TODO correct? InstallMethod(ActionDegree, "for a McAlister semigroup element", [IsMcAlisterTripleSemigroupElement], function(x) - return NrMovedPoints(x[2]); + return 0; end); InstallMethod(ActionDegree, "for a matrix over finite field object", @@ -169,14 +169,10 @@ function(R) return 0; end); -# TODO check this is ok? - InstallMethod(ActionDegree, "for a McAlister triple subsemigroup", [IsMcAlisterTripleSubsemigroup], function(S) - local rep; - rep := Representative(S); - return NrMovedPoints(McAlisterTripleSemigroupGroup(MTSEParent(rep))); + return 0; end); InstallMethod(ActionDegree, "for a matrix over finite field semigroup", @@ -248,8 +244,6 @@ function(R) end; end); -# TODO: ok? - InstallMethod(ActionRank, "for a McAlister triple semigroup element and int", [IsMcAlisterTripleSemigroupElement, IsInt], function(f, n) @@ -260,8 +254,6 @@ function(f, n) return Position(DigraphTopologicalSort(digraph), id[f[1]]); end); -# TODO: ok? - InstallMethod(ActionRank, "for a McAlister triple subsemigroup", [IsMcAlisterTripleSubsemigroup], function(S) @@ -784,11 +776,11 @@ end); InstallMethod(RhoBound, "for a Rees 0-matrix semigroup", [IsReesZeroMatrixSubsemigroup], LambdaBound); -# TODO improve the upper bound here InstallMethod(LambdaBound, "for a McAlister subsemigroup", [IsMcAlisterTripleSubsemigroup], S -> function(r) - return Size(McAlisterTripleSemigroupGroup(MTSEParent(Representative(S)))); + G := McAlisterTripleSemigroupGroup(MTSEParent(Representative(S))); + return Size(Stabilizer(G, r[1])); end); InstallMethod(RhoBound, "for a McAlister subsemigroup", diff --git a/tst/standard/semieunit.tst b/tst/standard/semieunit.tst index 923ee7f1f4..b7ef35f877 100644 --- a/tst/standard/semieunit.tst +++ b/tst/standard/semieunit.tst @@ -101,11 +101,8 @@ documentation for more detail, gap> ps := InverseSemigroup([PartialPerm([2, 3, 4, 5], [1, 3, 5, 4]), > PartialPerm([2, 3, 4, 5], [1, 4, 5, 3])]);; gap> Mps := IsomorphismSemigroup(IsMcAlisterTripleSemigroup, ps);; -gap> Image(Mps); -[ (1, ()), (1, (1,2)(3,6)(4,5)), (1, (1,4)(2,6)(3,5)), (1, (1,6,5)(2,4,3)), - (3, ()), (3, (1,3)(2,5)(4,6)), (3, (1,4)(2,6)(3,5)), (3, (1,5,6)(2,3,4)), - (4, ()), (4, (1,2)(3,6)(4,5)), (4, (1,3)(2,5)(4,6)), (4, (1,4)(2,6)(3,5)), - (4, (1,5,6)(2,3,4)), (4, (1,6,5)(2,4,3)) ] +gap> Range(Mps); + gap> AsSemigroup(IsMcAlisterTripleSemigroup, ps); gap> ps := InverseSemigroup([PartialPerm([1, 4, 6, 7], [1, 4, 6, 7]), @@ -114,17 +111,22 @@ gap> ps := InverseSemigroup([PartialPerm([1, 4, 6, 7], [1, 4, 6, 7]), > PartialPerm([1, 4, 6, 7], [2, 3, 7, 6]), > PartialPerm([2, 3, 6, 7], [1, 4, 7, 6]), PartialPerm([6, 7], [7, 6])]);; gap> Mps := IsomorphismSemigroup(IsMcAlisterTripleSemigroup, ps);; -gap> Image(Mps); -[ (1, ()), (1, (1,2)), (2, ()), (2, (1,2)), (3, ()), (3, (1,2)), (4, ()) ] -gap> Elements(Range(Mps)); -[ (1, ()), (1, (1,2)), (2, ()), (2, (1,2)), (3, ()), (3, (1,2)), (4, ()) ] +gap> Range(Mps); + +gap> Elements(Range(Mps));; gap> IsWholeFamily(Range(Mps)); true gap> AsSemigroup(IsMcAlisterTripleSemigroup, ps); +gap> G := Semigroup(PartialPerm([1, 2, 3], [2, 3, 1]));; +gap> iso := IsomorphismSemigroup(IsMcAlisterTripleSemigroup, G); +MappingByFunction( +, , function( s ) ... end ) +gap> PartialPerm([1, 2, 3], [2, 3, 1]) ^ iso;; #T# McAlister triple subsemigroup methods -gap> S := Semigroup(Image(Mps){[1 .. 3]}); +gap> S := Semigroup(Elements(Range(Mps)){[1, 2, 3]}); gap> attr := [MTSSemilattice, MTSGroup, MTSPartialOrder, MTSAction, > MTSActionHomomorphism, MTSUnderlyingAction, MTSComponents, @@ -132,13 +134,13 @@ gap> attr := [MTSSemilattice, MTSGroup, MTSPartialOrder, MTSAction, gap> M := Range(Mps);; gap> ForAll(attr, A -> A(S) = A(M)); true -gap> Print(S, "\n"); -Semigroup([ MTSE(McAlisterTripleSemigroup(Group( [ (1,2) ] ), Digraph( [ [ 1, \ -3 ], [ 2, 3 ], [ 3 ], [ 2, 3, 4 ], [ 1, 3, 5 ] ] ), [ 3, 2, 4, 1 ]), 1, ()), M\ -TSE(McAlisterTripleSemigroup(Group( [ (1,2) ] ), Digraph( [ [ 1, 3 ], [ 2, 3 ]\ -, [ 3 ], [ 2, 3, 4 ], [ 1, 3, 5 ] ] ), [ 3, 2, 4, 1 ]), 1, (1,2)), MTSE(McAlis\ -terTripleSemigroup(Group( [ (1,2) ] ), Digraph( [ [ 1, 3 ], [ 2, 3 ], [ 3 ], [\ - 2, 3, 4 ], [ 1, 3, 5 ] ] ), [ 3, 2, 4, 1 ]), 2, ()) ] +gap> Print(Semigroup(Elements(M1){[1, 2, 3]}), "\n"); +Semigroup([ MTSE(McAlisterTripleSemigroup(SymmetricGroup( [ 2 .. 5 ] ), Digrap\ +h( [ [ 1 ], [ 1, 2 ], [ 1, 3 ], [ 1, 4 ], [ 1, 5 ] ] ), [ 1 .. 4 ]), 1, ()), M\ +TSE(McAlisterTripleSemigroup(SymmetricGroup( [ 2 .. 5 ] ), Digraph( [ [ 1 ], [\ + 1, 2 ], [ 1, 3 ], [ 1, 4 ], [ 1, 5 ] ] ), [ 1 .. 4 ]), 1, (4,5)), MTSE(McAlis\ +terTripleSemigroup(SymmetricGroup( [ 2 .. 5 ] ), Digraph( [ [ 1 ], [ 1, 2 ], [\ + 1, 3 ], [ 1, 4 ], [ 1, 5 ] ] ), [ 1 .. 4 ]), 1, (3,4)) ] #T# AsSemigroup with bad input gap> T := Semigroup([PartialPerm([1], [3]), @@ -149,10 +151,8 @@ the semigroup is not E-unitary, #T# Other McAlisterTripleSemigroup tests gap> G := SymmetricGroup([2 .. 5]);; -gap> x := Digraph([[1], [1, 2], [1, 3], [1, 4], [1, 5]]); - -gap> y := Digraph([[1], [1, 2], [1, 3], [1, 4]]); - +gap> x := Digraph([[1], [1, 2], [1, 3], [1, 4], [1, 5]]);; +gap> y := Digraph([[1], [1, 2], [1, 3], [1, 4]]);; gap> M := McAlisterTripleSemigroup(G, x, y, OnPoints); gap> IsIsomorphicSemigroup(M, McAlisterTripleSemigroup(G, x, x)); @@ -160,14 +160,16 @@ false gap> IsInverseSemigroup(Semigroup(GeneratorsOfSemigroup(M))); true gap> elms := Enumerator(M);; -gap> String(elms[1]); -"MTSE(McAlisterTripleSemigroup(SymmetricGroup( [ 2 .. 5 ] ), Digraph( [ [ 1 ],\ - [ 1, 2 ], [ 1, 3 ], [ 1, 4 ], [ 1, 5 ] ] ), [ 1 .. 4 ]), 2, (3,4,5))" +gap> String(elms[1]){[1 .. 40]}; +"MTSE(McAlisterTripleSemigroup(SymmetricG" gap> OneImmutable(M); fail gap> M1 := McAlisterTripleSemigroup(G, x, [1, 2]);; gap> OneImmutable(M1); (2, ()) +gap> x1 := DigraphFromDiSparse6String(".P__@_@_@__D_D_D__H_H_H_@DH_@DHL_@DHL_@DHLp?`abcdefghijklmno");; +gap> y1 := InducedSubdigraph(x1, [1, 2, 3, 4, 6, 10, 11, 14, 15]);; +gap> McAlisterTripleSemigroup(AutomorphismGroup(x1), x1, y1);; #T# McAlister triple semigroup elements gap> MTSE(M, 4, (2, 4)(3, 5)) * MTSE(M, 4, (2, 5, 3, 4)); @@ -235,7 +237,7 @@ gap> M7 := McAlisterTripleSemigroup(Group((5, 6)), x4, x4);; gap> IsomorphismSemigroups(M6, M7); fail -#T# IsomorphicSemigroups with bad input +#T# IsomorphismSemigroups with bad input gap> x1 := Digraph([[1], [1, 2], [1, 3]]);; gap> G := Group((2, 3));; gap> M1 := McAlisterTripleSemigroup(G, x1, x1);; @@ -260,8 +262,7 @@ fail #T# IsomorphismSemigroups, where RepresentativeAction fails gap> gr := DigraphFromDigraph6String("+H_A?GC_Q@G~wA?G"); -gap> G := Group((1, 2, 3)(4, 5, 6), (8, 9)); -Group([ (1,2,3)(4,5,6), (8,9) ]) +gap> G := Group((1, 2, 3)(4, 5, 6), (8, 9));; gap> S1 := McAlisterTripleSemigroup(G, gr, [1, 4, 5, 7, 8]); gap> S2 := McAlisterTripleSemigroup(G, gr, [3, 6, 7, 8, 9]); diff --git a/tst/standard/setup.tst b/tst/standard/setup.tst index 7c376d26f6..9a0ec1451b 100644 --- a/tst/standard/setup.tst +++ b/tst/standard/setup.tst @@ -29,6 +29,9 @@ gap> IsGeneratorsOfActingSemigroup(Elements(R)); true gap> IsGeneratorsOfActingSemigroup(SLM(2, 2)); true +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3]), Digraph([[1], [1, 2], [1, 3]]), [1, 2]);; +gap> IsGeneratorsOfActingSemigroup(M); +true # ActionDegree @@ -55,6 +58,11 @@ gap> R := ReesZeroMatrixSemigroup(SymmetricGroup(3), [[()]]);; gap> Set(R, ActionDegree); [ 0, 1, 3, 4 ] +# ActionDegree, for a MTS element +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3]), Digraph([[1], [1, 2], [1, 3]]), [1, 2]);; +gap> ActionDegree(M.1); +0 + # ActionDegree, for a matrix over finite field object gap> ActionDegree(Matrix(GF(2 ^ 2), > [[Z(2) ^ 0, 0 * Z(2)], [0 * Z(2), 0 * Z(2)]])); @@ -85,6 +93,11 @@ gap> ActionDegree([R.1, MultiplicativeZero(R)]); gap> ActionDegree([MultiplicativeZero(R)]); 0 +# ActionDegree, for an MTS element collection +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3]), Digraph([[1], [1, 2], [1, 3]]), [1, 2]);; +gap> ActionDegree(Generators(M)); +0 + # ActionDegree, for a matrix object collection gap> ActionDegree([Matrix(GF(2), > [[0 * Z(2), 0 * Z(2)], [0 * Z(2), 0 * Z(2)]]), @@ -116,6 +129,11 @@ gap> ActionDegree(R); gap> ActionDegree(Semigroup(MultiplicativeZero(R))); 0 +# ActionDegree, for an MTS subsemigroup +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3]), Digraph([[1], [1, 2], [1, 3]]), [1, 2]);; +gap> ActionDegree(Semigroup(Representative(M))); +0 + # ActionDegree, for a matrix over finite field semigroup gap> ActionDegree(GLM(2, 2)); 2 @@ -171,6 +189,16 @@ gap> rank(RMSElement(R, 1, (2, 3), 1)); gap> rank(MultiplicativeZero(R)); 0 +# ActionRank, for an MTS semigroup and subsemigroup +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3]), Digraph([[1], [1, 2], [1, 3]]), [1, 2]);; +gap> rank := ActionRank(M);; +gap> rank(Representative(M)); +0 +gap> S := Semigroup(Representative(M));; +gap> rank := ActionRank(S);; +gap> rank(Representative(S)); +0 + # ActionRank, for a matrix over FF gap> x := Matrix(GF(2), [[0 * Z(2), 0 * Z(2)], [0 * Z(2), Z(2) ^ 0]]);; gap> ActionRank(x, 10); @@ -203,6 +231,11 @@ gap> R := ReesZeroMatrixSemigroup(Group([()]), [[(), (), 0], [(), (), ()], gap> MinActionRank(R); 0 +# MinActionRank, for a MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> MinActionRank(M); +1 + # MinActionRank for a matrix over FF semigroup gap> MinActionRank(GLM(2, 2)); 0 @@ -235,6 +268,13 @@ rec( ) gap> RhoOrbOpts(R); rec( ) +# Rho/lambdaOrbOpts, for a MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> LambdaOrbOpts(M); +rec( ) +gap> RhoOrbOpts(M); +rec( ) + # Rho/LambdaOrbOpts for a matrix over FF semigroup gap> LambdaOrbOpts(GLM(2, 2)); rec( ) @@ -305,6 +345,37 @@ gap> x(1, s); gap> x(2, s); 1 +# Rho/LambdaAct, for a MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> r := MTSE(M, 1, (3, 4));; +gap> s := MTSE(M, 3, (2, 3));; +gap> x := LambdaAct(M);; +gap> x(3, s); +2 +gap> x(2, s); +1 +gap> x(2, r); +1 +gap> x(3, r); +1 +gap> x(1, r); +1 +gap> x(0, r); +1 +gap> x := RhoAct(M);; +gap> x(3, s); +1 +gap> x(2, s); +3 +gap> x(2, r); +1 +gap> x(3, r); +1 +gap> x(1, r); +1 +gap> x(0, r); +1 + # Rho/LambdaAct, for a matrix over FF semigroup gap> r := Matrix(GF(2), [[Z(2) ^ 0, Z(2) ^ 0], [Z(2) ^ 0, 0 * Z(2)]]);; gap> s := Matrix(GF(2), [[Z(2) ^ 0, Z(2) ^ 0], [0 * Z(2), 0 * Z(2)]]);; @@ -347,6 +418,13 @@ gap> LambdaOrbSeed(R); gap> RhoOrbSeed(R); -1 +# Rho/LambdaOrbSeed, for an MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> LambdaOrbSeed(M); +0 +gap> RhoOrbSeed(M); +0 + # Rho/LambdaOrbSeed, for a matrix over FF semigroup gap> LambdaOrbSeed(GLM(2, 2)); @@ -399,6 +477,19 @@ gap> x(MultiplicativeZero(S)); gap> x(RMSElement(S, 1, (1, 3), 2)); 1 +# Rho/LambdaFunc, for a MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> x := LambdaFunc(M);; +gap> x(MTSE(M, 1, ())); +1 +gap> x(MTSE(M, 2, (2, 3))); +3 +gap> x := RhoFunc(M);; +gap> x(MTSE(M, 1, ())); +1 +gap> x(MTSE(M, 2, (2, 3))); +2 + # Rho/LambdaFunc, for a matrix over FF semigroup gap> S := GLM(2, 3);; gap> x := LambdaFunc(S);; @@ -454,6 +545,23 @@ gap> x(0); gap> x(1); 4 +# Rho/LambdaRank, for a MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> x := LambdaRank(M);; +gap> x(1); +2 +gap> x(2); +1 +gap> x(0); +0 +gap> x := RhoRank(M);; +gap> x(1); +2 +gap> x(2); +1 +gap> x(0); +0 + # Rho/LambdaRank, for a matrix over FF semigroup gap> S := GLM(2, 3);; gap> b := NewRowBasisOverFiniteField(IsPlistRowBasisOverFiniteFieldRep, @@ -517,6 +625,19 @@ gap> x(0, S.1); gap> x(2, S.1); (2,(),1) +# Rho/LambdaInverse, for a MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> x := LambdaInverse(M);; +gap> x(2, MTSE(M, 1, ())); +(1, ()) +gap> x(2, MTSE(M, 2, (2, 3))); +(3, (2,3)) +gap> x := RhoInverse(M);; +gap> x(2, MTSE(M, 1, ())); +(1, ()) +gap> x(2, MTSE(M, 2, (2, 3))); +(3, (2,3)) + # Rho/LambdaInverse, for a matrix over FF semigroup gap> S := GLM(2, 2);; gap> x := LambdaInverse(S);; @@ -573,6 +694,17 @@ infinity gap> RhoBound(S)(5); 120 +# Rho/LambdaBound, for a MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> LambdaBound(M)(5); +6 +gap> LambdaBound(M)(10000); +6 +gap> RhoBound(M)(5); +6 +gap> RhoBound(M)(10000); +6 + # Rho/LambdaBound, for a matrix over FF semigroup gap> S := GLM(2, 2);; gap> LambdaBound(S)(1000); @@ -618,6 +750,13 @@ gap> LambdaIdentity(S)(2); gap> RhoIdentity(S)(2); () +# Rho/LambdaIdentity, for a MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> LambdaIdentity(M)(2); +() +gap> RhoIdentity(M)(2); +() + # Rho/LambdaIdentity, for a matrix over FF semigroup gap> S := SLM(2, 2);; gap> LambdaIdentity(S)(2); @@ -651,6 +790,14 @@ gap> x(RMSElement(R, 1, (1, 3, 2), 1), RMSElement(R, 1, (1, 2, 3), 1)); gap> x(MultiplicativeZero(R), MultiplicativeZero(R)); () +# LambdaPerm, for a MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> x := LambdaPerm(M);; +gap> x(MTSE(M, 1, (2, 3, 4)), MTSE(M, 2, (2, 3))); +(2,4) +gap> x(MTSE(M, 2, ()), MTSE(M, 2, (2, 3))); +(2,3) + # LambdaPerm, for a matrix over FF semigroup gap> x := LambdaPerm(GLM(2, 3));; gap> x(Matrix(GF(3), [[Z(3) ^ 0, Z(3) ^ 0], [0 * Z(3), 0 * Z(3)]]), @@ -681,6 +828,16 @@ gap> x := LambdaConjugator(R);; gap> x(RMSElement(R, 1, (1, 3, 2), 1), RMSElement(R, 1, (1, 2, 3), 2)); () +# LambdaConjugator, for an MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> x := LambdaConjugator(M);; +gap> x(MTSE(M, 1, (2, 3, 4)), MTSE(M, 2, (2, 3))); +fail +gap> x(MTSE(M, 2, ()), MTSE(M, 2, (2, 3))); +(2,3) +gap> x(MTSE(M, 3, ()), MTSE(M, 2, (2, 3))); +() + # LambdaConjugator, for a matrix over FF semigroup gap> x := LambdaConjugator(GLM(2, 3));; gap> x(Matrix(GF(3), [[Z(3) ^ 0, 0 * Z(3)], [0 * Z(3), Z(3) ^ 0]]), @@ -757,6 +914,31 @@ true gap> y(2, 2); (2,(1,2),2) +# IdempotentTester and IdempotentCreator, for an MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> x := IdempotentTester(M);; +gap> y := IdempotentCreator(M);; +gap> x(1, 1); +true +gap> x(2, 1); +false +gap> x(2, 2); +true +gap> x(3, 2); +false +gap> x(3, 3); +true +gap> y(2, 2); +(2, ()) +gap> y(1, 2); +(1, ()) +gap> y(1, 1); +(1, ()) +gap> y(3, 2); +(3, ()) +gap> y(3, 3); +(3, ()) + # IdempotentTester and IdempotentCreator, for a matrix over FF semigroup gap> S := GLM(2, 3);; gap> x := IdempotentTester(S);; @@ -804,6 +986,16 @@ gap> x(MultiplicativeZero(R), ()); gap> x(RMSElement(R, 1, (), 1), ()); (1,(),1) +# StabilizerAction, for a MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> x := StabilizerAction(M);; +gap> x(MTSE(M, 1, ()), ()); +(1, ()) +gap> x(MTSE(M, 2, (2, 3)), (2, 3)); +(2, ()) +gap> x(MTSE(M, 3, ()), (2, 4, 3)); +(3, (2,4,3)) + # StabilizerAction, for a matrix over FF semigroup gap> S := GLM(2, 3);; gap> x := StabilizerAction(S);; @@ -832,6 +1024,11 @@ gap> S := ReesZeroMatrixSemigroup(Group(()), [[()]]);; gap> IsActingSemigroupWithFixedDegreeMultiplication(Semigroup(S)); false +# IsActingSemigroupWithFixedDegreeMultiplication, for a MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> IsActingSemigroupWithFixedDegreeMultiplication(Semigroup(M)); +false + # IsActingSemigroupWithFixedDegreeMultiplication, for a matrix over FF semigroup gap> IsActingSemigroupWithFixedDegreeMultiplication( > GLM(2, 2)); @@ -870,11 +1067,21 @@ true # SchutzGpMembership, for an RZMS gap> R := ReesZeroMatrixSemigroup(Group((1, 2, 3)), [[()]]);; gap> R := Semigroup(Elements(R));; -gap> o := LambdaOrb(S);; Enumerate(o);; -gap> schutz := LambdaOrbStabChain(o, 2);; +gap> o := LambdaOrb(R);; Enumerate(o);; +gap> schutz := LambdaOrbStabChain(o, 3);; gap> SchutzGpMembership(R)(schutz, ()); true +# SchutzGpMembership, for an MTS +gap> M := McAlisterTripleSemigroup(SymmetricGroup([2, 3, 4]), Digraph([[1], [1, 2], [1, 3], [1, 4]]), [1, 2, 3]);; +gap> M := Semigroup(Elements(M));; +gap> o := LambdaOrb(M);; Enumerate(o);; +gap> schutz := LambdaOrbStabChain(o, 3);; +gap> SchutzGpMembership(M)(schutz, ()); +true + +# gap> SchutzGpMembership(M)(schutz, ()); TODO: THIS DOESN'T WORK! + # SchutzGpMembership, for a matrix over FF semigroup gap> S := Monoid([ > Matrix(GF(2), [[0 * Z(2), Z(2) ^ 0], [0 * Z(2), 0 * Z(2)]]), @@ -903,6 +1110,10 @@ gap> FakeOne(PartitionMonoid(1)); gap> FakeOne(ReesZeroMatrixSemigroup(Group(()), [[()]])); +# FakeOne, for a MTS +gap> FakeOne(McAlisterTripleSemigroup(Group(()), Digraph([[1]]), [1])); + + # FakeOne, for a matrix over FF semigroup gap> FakeOne(GLM(2, 2)); Matrix(GF(2), [[Z(2)^0, 0*Z(2)], [0*Z(2), Z(2)^0]])