Skip to content

Commit b15c42f

Browse files
committed
Avoid errors due to too large range bounds (gap-system#6201)
1 parent 48beb2b commit b15c42f

2 files changed

Lines changed: 34 additions & 1 deletion

File tree

lib/morpheus.gi

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2631,7 +2631,13 @@ local d,iso,a,b,c,o,s,two,rt,r,z,e,y,re,m,gens,cnt,lim,p,
26312631
a:=PseudoRandom(gp);
26322632
fi;
26332633
e:=Order(a);
2634-
if e in r then
2634+
# `r` is either a list or a record,
2635+
# the latter describing the range
2636+
# `[ r.first, r.first + r.offset .. r.last ]`,
2637+
# also if this range cannot be created in GAP.
2638+
if ( IsList( r ) and e in r ) or
2639+
( IsRecord( r ) and r.first <= e and e <= r.last
2640+
and ( e - r.first ) mod r.offset = 0 ) then
26352641
a:=a^QuoInt(e,o);
26362642
if z=fail or Size(Centralizer(gp,a))=z then
26372643
return a;
@@ -2735,7 +2741,11 @@ local d,iso,a,b,c,o,s,two,rt,r,z,e,y,re,m,gens,cnt,lim,p,
27352741
if gens=fail then
27362742
Info(InfoMorph,1,"Isomorphism simple: ad-hoc");
27372743
# not found by table or other -- try a 2/something ad-hoc
2744+
<<<<<<< HEAD
27382745
rt:=[2,4..Minimum(Size(g),2^50)];
2746+
=======
2747+
rt:= rec( first:= 2, offset:= 2, last:= Size(g) );
2748+
>>>>>>> f7a40f75c (Avoid errors due to too large range bounds (#6201))
27392749
gens:=[findElm(g,2,fail,rt)];
27402750
z:=Size(Centralizer(g,gens[1]));
27412751

@@ -2744,8 +2754,12 @@ local d,iso,a,b,c,o,s,two,rt,r,z,e,y,re,m,gens,cnt,lim,p,
27442754
m:=Maximum(Filtered(Factors(Size(g)),x->x<100));
27452755
cnt:=0;
27462756
repeat
2757+
<<<<<<< HEAD
27472758
b:=Minimum(Size(g),2^50);
27482759
gens[2]:=findElm(g,m,fail,[m,2*m..(b-(b mod m))]);
2760+
=======
2761+
gens[2]:=findElm(g,m,fail, rec( first:= m, offset:= m, last:= Size(g) ));
2762+
>>>>>>> f7a40f75c (Avoid errors due to too large range bounds (#6201))
27492763
if isFull(SubgroupNC(g,gens)) then
27502764
b:=gens;
27512765
y:=Size(Centralizer(g,gens[2]));
@@ -2770,8 +2784,12 @@ local d,iso,a,b,c,o,s,two,rt,r,z,e,y,re,m,gens,cnt,lim,p,
27702784
od;
27712785
gens:=b;
27722786
e:=Order(gens[2]);
2787+
<<<<<<< HEAD
27732788
y:=Minimum(Size(g),2^50);
27742789
re:=[e,2*e..(y-(y mod e))];
2790+
=======
2791+
re:= rec( first:= e, offset:= e, last:= Size(g) );
2792+
>>>>>>> f7a40f75c (Avoid errors due to too large range bounds (#6201))
27752793
y:=Size(Centralizer(g,gens[2]));
27762794
fi;
27772795
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)