Skip to content

CI failures against GAP master due to MatrixObj handling #85

Description

@fingolfin

CC @ThomasBreuer

The CI tests in the forms package fail in tst/adv/conformal.tst with Error, <mat> * <matobj> is not defined

A self-contained reproducer:

F:=GF(2);
filt:=IsPlistMatrixRep;
permmat:= Matrix( filt, F, PermutationMat( (1,2), 2, F ) );
gg:= ConformalSymplecticGroup( 2, F, permmat );  # works
gg:= ConformalSymplecticGroup( 2, F, permmat : ConstructingFilter:= filt );  # error

gives

gap> F:=GF(2);
GF(2)
gap> filt:=IsPlistMatrixRep;
<Representation "IsPlistMatrixRep">
gap> permmat:= Matrix( filt, F, PermutationMat( (1,2), 2, F ) );
<2x2-matrix over GF(2)>
gap> gg:= ConformalSymplecticGroup( 2, F, permmat );
SL(2,2)
gap> gg:= ConformalSymplecticGroup( 2, F, permmat : ConstructingFilter:= filt );
Error, <mat> * <matobj> is not defined
*[1] Error( "<mat> * <matobj> is not defined" );
   @ /Users/mhorn/Projekte/GAP/gap/lib/matobj.gi:1177
 [2] mat2 * stored
   @ /Users/mhorn/Projekte/GAP/repos/pkg/gap-packages/forms/lib/conformal.gi:135
 [3] ConformalSymplecticGroupCons( filt, d, F, BilinearFormByMatrix( form, F ) )
   @ /Users/mhorn/Projekte/GAP/repos/pkg/gap-packages/forms/lib/conformal.gi:89
 [4] ConformalSymplecticGroupCons( filt, arg[1], arg[2], form )
   @ /Users/mhorn/Projekte/GAP/gap/grp/conformal.gi:38
<function "ConformalSymplecticGroup">( <arguments> )
 called from read-eval loop at *stdin*:85
you can 'quit;' to quit to outer loop, or
you can 'return;' to continue
brk>

It all boils down to the base changes:

F:= GF(2);
filt:=IsPlistMatrixRep;
PushOptions( rec( ConstructingFilter:= filt ) );

stored:=IdentityMatrix(filt, F, 2);
SwapMatrixRows(stored, 1, 2);

form:= BilinearFormByMatrix( stored, F );
mat1:= BaseChangeToCanonical( form );

mat1 * form!.matrix * TransposedMat( mat1 );   # works
mat1 * stored * TransposedMat( mat1 );         # does not

So at the core, the problem is that while we can now create a bilinear form from a matrixobj, internally it still stores an old-style matrix, and the base changes are then also old-style.

One approach to addressing this would be to extend the IsBilinearForm format to preserve the type of its input. I.e. if the form is constructed with a MatrixObj, then also store a MatrixObj inside.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions