8000 Error in SLPforElementFuncsProjective.PSL2 · Issue #317 · gap-packages/recog · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
Error in SLPforElementFuncsProjective.PSL2 #317
Open
@fingolfin

Description

@fingolfin

Take this input group:

G := Group(Z(5)^0 * [
  [ [ 0, 2, 0, 2 ], [ 1, 4, 4, 4 ],
  [ 0, 4, 0, 0 ], [ 3, 2, 0, 0 ] ],
  [ [ 0, 2, 0, 2 ], [ 4, 4, 1, 4 ],
  [ 0, 1, 0, 0 ], [ 3, 3, 0, 0 ] ],
  [ [ 1, 0, 0, 0 ], [ 0, 4, 0, 0 ],
  [ 0, 0, 4, 0 ], [ 0, 0, 0, 1 ] ],
  [ [ 2, 0, 0, 0 ], [ 0, 2, 0, 0 ],
  [ 0, 0, 2, 0 ], [ 0, 0, 0, 2 ] ],
  [ [ 0, 0, 0, 1 ], [ 0, 2, 0, 0 ],
  [ 0, 0, 1, 0 ], [ 2, 0, 0, 0 ] ]
]);

Trying RecognizeGroup(G) often (= for many RNG seeds) prints one or more messages of the form

#I Strange, found less direct factors than expected!

which already indicates something is amiss.

But it sometimes also runs into an outright error:

gap> G:=Group(Z(5)^0*[[[0,2,0,2],[1,4,4,4],[0,4,0,0],[3,2,0,0]],[[0,2,0,2],[4,4,1,4],[0,1,0,0],[3,3,0,0]],[[1,0,0,0],[0,4,0,0],[0,0,4,0],[0,0,0,1]],[[2,0,0,0],[0,2,0,0],[0,0,2,0],[0,0,0,2]],[[0,0,0,1],[0,2,0,0],[0,0,1,0],[2,0,0,0]]]);
gap> seed:=115;;  Reset(GlobalMersenneTwister,seed);; Reset(GlobalRandomSource,seed);; RecognizeGroup(G);
Error, ^ cannot be used here to compute roots (use `RootInt' instead?) at GAPROOT/lib/arith.gi:623 called from
z ^ ((- log) * ri!.gcd.coeff1 / ri!.gcd.gcd)
  at GAPROOT/pkg/recog/gap/projective/classicalnatural.gi:3068 called from
slpforelement( ri )( ri, x ) at GAPROOT/pkg/recog/gap/base/recognition.gi:711 called from
SLPforElement( rifac, gg ) at GAPROOT/pkg/recog/gap/base/recognition.gi:733 called from
slpforelement( ri )( ri, x ) at GAPROOT/pkg/recog/gap/base/recognition.gi:711 called from
SLPforElement( rifac, gg ) at GAPROOT/pkg/recog/gap/base/recognition.gi:733 called from
slpforelement( ri )( ri, x ) at GAPROOT/pkg/recog/gap/base/recognition.gi:711 called from
SLPforElement( riker, n ) at GAPROOT/pkg/recog/gap/base/recognition.gi:753 called from
slpforelement( ri )( ri, x ) at GAPROOT/pkg/recog/gap/base/recognition.gi:711 called from
SLPforElement( ImageRecogNode( ri ), ImageElm( Homom( ri ), x!.el ) ) at GAPROOT/pkg/recog/gap/base/kernel.gi:46 called from
GenerateRandomKernelElementsAndOptionallyVerifyThem( ri, n, false ) at GAPROOT/pkg/recog/gap/base/kernel.gi:91 called from
CallFuncList( findgensNmeth( ri ).method, Concatenation( [ ri ], findgensNmeth( ri ).args ) ) at GAPROOT/pkg/recog/gap/base/recognition.gi:590 called from
RecogniseGeneric( G, FindHomDbMatrix, "", rec( ) ) at GAPROOT/pkg/recog/gap/base/recognition.gi:112 called from
RecogniseGroup( G ) at GAPROOT/ClassicalMaximals/tst/utils.g:8 called from
CheckSize( G ); at stream:5 called from
TestOrthogonalNormalizerInSL( 1, 4, 5 ); at *stdin*:5 called from
<function "unknown">( <arguments> )
 called from read-eval loop at *errin*:12
brk>

This is the code in question:

SLPforElementFuncsProjective.PSL2 := function(ri,x)
  local det,log,slp,y,z,pos,s;
  ri!
5B84
.fakegens.count := ri!.fakegens.count + 1;
  if ri!.fakegens.count > 1000 then
      ri!.fakegens := RECOG.InitSLfake(ri!.field,2);
      ri!.fakegens.count := 0;
  fi;
  y := ri!.nicebas * x * ri!.nicebasi;
  det := DeterminantMat(y);
  if not IsOne(det) then
      z := PrimitiveRoot(ri!.field);
      log := LogFFE(det,z);
      y := y * z^(-log*ri!.gcd.coeff1/ri!.gcd.gcd);  # <-- error happens here
  fi;
brk>

So at this point det = z = Z(5), so log = 1, and ri!.gcd = rec( coeff1 := 1, coeff2 := 0, coeff3 := -2, coeff4 := 1, gcd := 2 ), so the exponent evaluates to -1/2.

It looks as if the code is trying to normalize the determinant of that matrix to one, by scaling the matrix with a square root of the inverse of that determinant -- but of course that doesn't exist in GF(5).

So the input matrix is not actually "in" PSL(2,5) (or rather, in SL(2,5)). Indeed, let's inspect some more on the break loop:

brk> Grp(ri);
<matrix group with 24 generators>
brk> Grp(ri).1;
[ [ 0*Z(5), Z(5)^2 ], [ Z(5)^0, Z(5)^2 ] ]
brk> Size(Grp(ri));
240
brk> Size(SL(2,5));
120

So the matrices generated GL(2,5), not SL(2,5). So this looks like a case of "mistaken identity": The code drew a wrong conclusion, it thinks it has (P)SL(2,5) but this is wrong.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugAny bug should have this label, even if it also has a more generic labelbug: unexpected errorA computation runs into an error loop when it should not have

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0