Skip to content

Conversation

@lgoettgens
Copy link
Member

Resolves #5635.

If I am not mistaken the formula for adapting the forms from #5635 (comment) does not work. The one present in this PR might work, but I would prefer if this would be double-checked.

@lgoettgens lgoettgens added kind: enhancement Label for issues suggesting enhancements; and for pull requests implementing enhancements topic: library release notes: use title For PRs: the title of this PR is suitable for direct use in the release notes labels Dec 19, 2025
@fingolfin
Copy link
Member

@lgoettgens thanks! I just had asked a student of mine to look into this. I am not surprised if any of the formulas I wrote there were not quite right (or dead wrong), it was written off the cuff without too much thought; the goal was more to convey the general idea. Sorry if this caused any extra work, and thank you for correcting it!

@chseeger ping -- perhaps you can see if this matches what you need, and/or work with Lars to get it over the finishing line.

I guess there are a few more things we could / should transfer:

  • IsGL aka IsGeneralLinearGroup
  • IsNaturalGL
  • IsSL aka IsSpecialLinearGroup
  • IsNaturalSL
  • IsSubgroupSL

ginv := g^-1;
fi;
if HasInvariantBilinearForm( G ) then
m := ginv * InvariantBilinearForm(G).matrix * TransposedMat(ginv);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should have test cases covering this.

I think the easiest and also most thorough way will be to modify tst/testinstall/grp/classic-forms.tst.

When it does e.g.

gap> grps:=[];;
gap> for d in [3,5,7] do
>   for q in [2,3,4,5,7,8,9,16,17,25,27] do
>     Add(grps, GO(d,q));
>   od;
> od;

the innermost loop could be changed to also add a conjugate copy of the group, i.e.

>     Add(grps, GO(d,q));
>     Add(grps, GO(d,q) ^ RandomInvertibleMat(d,GF(q));

In light of what I write in my other comment, perhaps we should also test conjugation over different fields, e.g.

Add(grps, GO(d,q) ^ RandomInvertibleMat(d,GF(q^2));

and for the unitary case deliberately over fields such as q^3 (instead of q^2)

lib/grpmat.gi Outdated
SetInvariantBilinearForm( H, rec( matrix := m ) );
fi;
if HasInvariantSesquilinearForm( G ) then
m := ginv * InvariantSesquilinearForm(G).matrix * TransposedMat(ginv);
Copy link
Member

@fingolfin fingolfin Dec 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would expect that the "right" Frobenius automorphism needs to be used here, too?

But actually, that's a problem now that I think about it. Or rather, two problems:

First off, conceptually, GAP does not actually specify over which field the group is sesquilinear. The documentation for InvariantSesquilinearForm says "over over the field F with q^2 elements" but which field is that? Perhaps over the DefaultFieldOfMatrixGroup(G) ? But strictly speaking that is not really well-defined. Or FieldOfMatrixGroup(G) ? That's well-defined but may be too small (think of the case where q = p^2 is the square of a prime, and we by "accident" are looking at a subgroup of G < GU(d,q) < GL(d,q^2) which has all entries in GF(q) then we might think the right Frobenius exponent is $p$ instead of $q=p^2$.

Second, assuming we have determined $F$ resp. $q$ correctly, we need to be aware of the case were $g$ is not defined over GF(q^2) but rather over field that's not a subfield of GF(q^2) (so over a larger field; or if $q=p^2$ then it could be defined over GF(p^3)$; etc.). Should we perhaps error out then? Because the resulting group may be defined over a larger field and then the assumptions about the former don't necessarily hold anymore...

Copy link
Member Author

@lgoettgens lgoettgens Dec 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed, I'll remove everything concerning sesquilinear forms from this PR.

For IsFullSubgroupGLorSLRespectingBilinearForm and IsFullSubgroupGLorSLRespectingQuadraticForm, there is also the question over which field this should hold. But since the only places where these are used (

gap/lib/grpmat.gi

Lines 841 to 865 in 8177f1e

InstallMethod( \in, "respecting quadratic form", IsElmsColls,
[ IsMatrix, IsFullSubgroupGLorSLRespectingQuadraticForm ],
{} -> RankFilter( IsHandledByNiceMonomorphism ), # override nice mon. method
# this method is better than the one using a nice monom.;
# it has the same rank as the method based on the inv.
# bilinear form, which is cheaper to check,
# thus we install the current method first
function( mat, G )
return IsSubset( FieldOfMatrixGroup( G ), FieldOfMatrixList( [ mat ] ) )
and ( not IsSubgroupSL( G ) or IsOne( DeterminantMat( mat ) ) )
and RespectsQuadraticForm( InvariantQuadraticForm( G ).matrix, mat );
end );
InstallMethod( \in, "respecting bilinear form", IsElmsColls,
[ IsMatrix, IsFullSubgroupGLorSLRespectingBilinearForm ],
{} -> RankFilter( IsHandledByNiceMonomorphism ), # override nice mon. method
function( mat, G )
local inv;
if not IsSubset( FieldOfMatrixGroup( G ), FieldOfMatrixList( [ mat ] ) )
or ( IsSubgroupSL( G ) and not IsOne( DeterminantMat( mat ) ) ) then
return false;
fi;
inv:= InvariantBilinearForm(G).matrix;
return mat * inv * TransposedMat( mat ) = inv;
end );
) assume it is FieldOfGroup, I added this to the docstrings of these two functions as well.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, in the same place we learn something about how these sesquilinear forms are supposed to work:

gap/lib/grpmat.gi

Lines 841 to 865 in 8177f1e

InstallMethod( \in, "respecting quadratic form", IsElmsColls,
[ IsMatrix, IsFullSubgroupGLorSLRespectingQuadraticForm ],
{} -> RankFilter( IsHandledByNiceMonomorphism ), # override nice mon. method
# this method is better than the one using a nice monom.;
# it has the same rank as the method based on the inv.
# bilinear form, which is cheaper to check,
# thus we install the current method first
function( mat, G )
return IsSubset( FieldOfMatrixGroup( G ), FieldOfMatrixList( [ mat ] ) )
and ( not IsSubgroupSL( G ) or IsOne( DeterminantMat( mat ) ) )
and RespectsQuadraticForm( InvariantQuadraticForm( G ).matrix, mat );
end );
InstallMethod( \in, "respecting bilinear form", IsElmsColls,
[ IsMatrix, IsFullSubgroupGLorSLRespectingBilinearForm ],
{} -> RankFilter( IsHandledByNiceMonomorphism ), # override nice mon. method
function( mat, G )
local inv;
if not IsSubset( FieldOfMatrixGroup( G ), FieldOfMatrixList( [ mat ] ) )
or ( IsSubgroupSL( G ) and not IsOne( DeterminantMat( mat ) ) ) then
return false;
fi;
inv:= InvariantBilinearForm(G).matrix;
return mat * inv * TransposedMat( mat ) = inv;
end );

Here, FieldOfMatrixGroup is used to determine the "right" frobenius

@chseeger
Copy link

Thanks a lot for taking a look at this -- it matches exactly what I need, and the conjugation formulas for the preserved bilinear/quadratic forms look correct.

For sesquilinear forms, however, I'm unsure how to resolve the choice of Frobenius automorphism, given the ambiguity of the underlying field. This seems to be a more conceptual issue?

@lgoettgens lgoettgens changed the title Transfer invariant forms when conjugating matrix groups Transfer more properties when conjugating matrix groups Dec 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kind: enhancement Label for issues suggesting enhancements; and for pull requests implementing enhancements release notes: use title For PRs: the title of this PR is suitable for direct use in the release notes topic: library

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Transfer more information when conjugating a matrix group

3 participants