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.

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