Skip to content

Commit

Permalink
ENHANCE: Very long transversals
Browse files Browse the repository at this point in the history
When computing a transversal in a permutation group force down huge index
steps, as they might lead to creation of infeasibly long bit lists.

Incidentally, this allows for Filtering classes in A_15.
  • Loading branch information
hulpke committed Feb 18, 2025
1 parent ab000bb commit 8ad7d44
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions lib/csetperm.gi
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ end );
##
#F RightTransversalPermGroupConstructor( <filter>, <G>, <U> ) . constructor
##
MAX_SIZE_TRANSVERSAL := 100000;
MAX_SIZE_TRANSVERSAL := 100000; # try to keep transversals shorter than this
BITLIST_LIMIT_TRANSVERSAL:=10^8; # absolutely must keep transversals
# shorter, as otheriwse too long bit lists might be produced

# so far only orbits and perm groups -- TODO: Other deduced actions
InstallGlobalFunction(ActionRefinedSeries,function(G,U)
Expand Down Expand Up @@ -121,11 +123,23 @@ BindGlobal( "RightTransversalPermGroupConstructor", function( filter, G, U )
# go in biggish steps through the chain
nc:=[ac[1]];
nct:=[actions[1]];
for i in [3..Length(ac)] do
i:=3;
while i<=Length(ac) do
if Size(ac[i-1])/Size(nc[Length(nc)])
>BITLIST_LIMIT_TRANSVERSAL then
# the next step would be horrible -- insert
bpt:=AscendingChain(ac[i-1],nc[Length(nc)]:cheap);
bpt:=bpt{[2..Length(bpt)-1]};
ac:=Concatenation(ac{[1..i-2]},bpt,ac{[i-1..Length(ac)]});
actions:=Concatenation(actions{[1..i-2]},List(bpt,x->fail),
actions{[i-1..Length(actions)]});
fi;

if Size(ac[i])/Size(nc[Length(nc)])>MAX_SIZE_TRANSVERSAL then
Add(nc,ac[i-1]);
Add(nct,actions[i-1]);
fi;
i:=i+1;
od;
Add(nc,ac[Length(ac)]);
Add(nct,actions[Length(actions)]);
Expand Down

0 comments on commit 8ad7d44

Please sign in to comment.