Skip to content

Commit

Permalink
Set HasBaseDomain filter for matrixobj-with-memory
Browse files Browse the repository at this point in the history
... at least if the wrapped matrixobj had it set (which really
should always be the case).

This fixes a nasty long-standing issue in genss / orb / recog
where `DefaultScalarDomainOfMatrixList` returned to small a field
when called on a list of matrixobj-with-memory. This then caused
`GroupWithGenerators` to rewrite the generators over a smaller
field, which then lead `genss` to produce (compressed) vectors for
use as base points in the orbit algorithm over the smaller field;
and a matching hash function. When later generators got added that
really needed the larger field, everything exploded in confusing
ways.
  • Loading branch information
fingolfin authored Jan 17, 2025
1 parent 78ba9c9 commit 0eda22b
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
3 changes: 3 additions & 0 deletions lib/memory.gi
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ BindGlobal( "ObjWithMemory", function( slp, n, el )
if IsMatrixObj( el ) then
filt:= filt and IsMatrixObj;
fi;
if HasBaseDomain( el ) then
filt:= filt and HasBaseDomain;
fi;
fi;

return Objectify( NewType( FamilyObj( el ), filt ),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
gap> G := GroupWithMemory([One(GL(3,4))]);;
gap> mat := G.1;;
gap> HasBaseDomain(mat);
true
gap> BaseDomain(mat);
GF(2^2)
gap> DefaultScalarDomainOfMatrixList([mat]);
GF(2^2)

0 comments on commit 0eda22b

Please sign in to comment.