Skip to content

Commit f7a40f7

Browse files
authored
Avoid errors due to too large range bounds (#6201)
1 parent a0a0998 commit f7a40f7

2 files changed

Lines changed: 25 additions & 4 deletions

File tree

lib/morpheus.gi

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2627,7 +2627,13 @@ local d,iso,a,b,c,o,s,two,rt,r,z,e,y,re,m,gens,cnt,lim,p,
26272627
a:=PseudoRandom(gp);
26282628
fi;
26292629
e:=Order(a);
2630-
if e in r then
2630+
# `r` is either a list or a record,
2631+
# the latter describing the range
2632+
# `[ r.first, r.first + r.offset .. r.last ]`,
2633+
# also if this range cannot be created in GAP.
2634+
if ( IsList( r ) and e in r ) or
2635+
( IsRecord( r ) and r.first <= e and e <= r.last
2636+
and ( e - r.first ) mod r.offset = 0 ) then
26312637
a:=a^QuoInt(e,o);
26322638
if z=fail or Size(Centralizer(gp,a))=z then
26332639
return a;
@@ -2731,7 +2737,7 @@ local d,iso,a,b,c,o,s,two,rt,r,z,e,y,re,m,gens,cnt,lim,p,
27312737
if gens=fail then
27322738
Info(InfoMorph,1,"Isomorphism simple: ad-hoc");
27332739
# not found by table or other -- try a 2/something ad-hoc
2734-
rt:=[2,4..Size(g)];
2740+
rt:= rec( first:= 2, offset:= 2, last:= Size(g) );
27352741
gens:=[findElm(g,2,fail,rt)];
27362742
z:=Size(Centralizer(g,gens[1]));
27372743

@@ -2740,7 +2746,7 @@ local d,iso,a,b,c,o,s,two,rt,r,z,e,y,re,m,gens,cnt,lim,p,
27402746
m:=Maximum(Filtered(Factors(Size(g)),x->x<100));
27412747
cnt:=0;
27422748
repeat
2743-
gens[2]:=findElm(g,m,fail,[m,2*m..Size(g)]);
2749+
gens[2]:=findElm(g,m,fail, rec( first:= m, offset:= m, last:= Size(g) ));
27442750
if isFull(SubgroupNC(g,gens)) then
27452751
b:=gens;
27462752
y:=Size(Centralizer(g,gens[2]));
@@ -2765,7 +2771,7 @@ local d,iso,a,b,c,o,s,two,rt,r,z,e,y,re,m,gens,cnt,lim,p,
27652771
od;
27662772
gens:=b;
27672773
e:=Order(gens[2]);
2768-
re:=[e,2*e..Size(g)];
2774+
re:= rec( first:= e, offset:= e, last:= Size(g) );
27692775
y:=Size(Centralizer(g,gens[2]));
27702776
fi;
27712777
Info(InfoMorph,1,"generators ",List(gens,Order));
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Fix #6200 IsomorphismSimpleGroups
2+
#@local G, x, H
3+
gap> START_TEST("IsomorphismSimpleGroups.tst");
4+
5+
# The runtime depends very much on random choices in the code,
6+
# it can vary from a few milliseconds (rare) to several minutes.
7+
gap> Reset( GlobalMersenneTwister, 2^19 );;
8+
gap> G:= AlternatingGroup( 20 );;
9+
gap> x:= ();;
10+
gap> H:= ConjugateGroup( G, x );;
11+
gap> IsomorphismSimpleGroups( G, H : cheap:= true ) <> fail;
12+
true
13+
14+
#
15+
gap> STOP_TEST("IsomorphismSimpleGroups.tst");

0 commit comments

Comments
 (0)