Skip to content

Commit

Permalink
semieunit: fix tests and improve code coverage
Browse files Browse the repository at this point in the history
Fix two tests which have different (but mathematically correct) output
when acting methods are enabled/disabled. Improve code coverage in main/setup.gi.
Noticed that IdempotentCreator method may need to be fixed.
  • Loading branch information
ChristopherRussell committed Sep 19, 2018
1 parent 6bc32bc commit 3cf3c1a
Show file tree
Hide file tree
Showing 4 changed files with 248 additions and 48 deletions.
6 changes: 1 addition & 5 deletions doc/semieunit.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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);
<inverse partial perm monoid of size 4, rank 4 with 4 generators>]]></Example>
true]]></Example>
</Description>
</ManSection>
<#/GAPDoc>
Expand Down
20 changes: 6 additions & 14 deletions gap/main/setup.gi
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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",
Expand Down
55 changes: 28 additions & 27 deletions tst/standard/semieunit.tst
Original file line number Diff line number Diff line change
Expand Up @@ -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);
<McAlister triple semigroup over Group([ (1,5,6)(2,3,4), (1,4)(2,6)(3,5) ])>
gap> AsSemigroup(IsMcAlisterTripleSemigroup, ps);
<McAlister triple semigroup over Group([ (1,5,6)(2,3,4), (1,4)(2,6)(3,5) ])>
gap> ps := InverseSemigroup([PartialPerm([1, 4, 6, 7], [1, 4, 6, 7]),
Expand All @@ -114,31 +111,36 @@ 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);
<McAlister triple semigroup over Group([ (1,2) ])>
gap> Elements(Range(Mps));;
gap> IsWholeFamily(Range(Mps));
true
gap> AsSemigroup(IsMcAlisterTripleSemigroup, ps);
<McAlister triple semigroup over Group([ (1,2) ])>
gap> G := Semigroup(PartialPerm([1, 2, 3], [2, 3, 1]));;
gap> iso := IsomorphismSemigroup(IsMcAlisterTripleSemigroup, G);
MappingByFunction( <partial perm group of size 3, rank 3 with 1 generator>
, <McAlister triple semigroup over Group([ (2,3,
4) ])>, 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]});
<McAlister triple subsemigroup over Group([ (1,2) ])>
gap> attr := [MTSSemilattice, MTSGroup, MTSPartialOrder, MTSAction,
> MTSActionHomomorphism, MTSUnderlyingAction, MTSComponents,
> MTSQuotientDigraph, MTSSemilatticeVertexLabelInverseMap];;
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]),
Expand All @@ -149,25 +151,25 @@ 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]]);
<digraph with 5 vertices, 9 edges>
gap> y := Digraph([[1], [1, 2], [1, 3], [1, 4]]);
<digraph with 4 vertices, 7 edges>
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);
<McAlister triple semigroup over Sym( [ 2 .. 5 ] )>
gap> IsIsomorphicSemigroup(M, McAlisterTripleSemigroup(G, x, x));
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));
Expand Down Expand Up @@ -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);;
Expand All @@ -260,8 +262,7 @@ fail
#T# IsomorphismSemigroups, where RepresentativeAction fails
gap> gr := DigraphFromDigraph6String("+H_A?GC_Q@G~wA?G");
<digraph with 9 vertices, 20 edges>
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]);
<McAlister triple semigroup over Group([ (1,2,3)(4,5,6), (8,9) ])>
gap> S2 := McAlisterTripleSemigroup(G, gr, [3, 6, 7, 8, 9]);
Expand Down
Loading

0 comments on commit 3cf3c1a

Please sign in to comment.