Transfer more properties (such as IsNaturalSL, InvariantQuadraticForm etc.) when conjugating matrix groups#6183
Conversation
|
@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:
|
lib/grpmat.gi
Outdated
| ginv := g^-1; | ||
| fi; | ||
| if HasInvariantBilinearForm( G ) then | ||
| m := ginv * InvariantBilinearForm(G).matrix * TransposedMat(ginv); |
There was a problem hiding this comment.
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); |
There was a problem hiding this comment.
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
Second, assuming we have determined
There was a problem hiding this comment.
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 (
Lines 841 to 865 in 8177f1e
FieldOfGroup, I added this to the docstrings of these two functions as well.
There was a problem hiding this comment.
Actually, in the same place we learn something about how these sesquilinear forms are supposed to work:
Lines 841 to 865 in 8177f1e
Here, FieldOfMatrixGroup is used to determine the "right" frobenius
There was a problem hiding this comment.
Hmmm, OK -- I guess this would be fine for now given that the only two places which call SetInvariantSesquilinearForm also call SetFieldOfMatrixGroup.
On the long term it's not a great, because it means we can't use InvariantSesquilinearForm on subgroups.
But we are not there, and so we might as well use what works in the current system.
It does mean though that when conjugating, we have to check if the conjugating matrix is defined over FieldOfMatrixGroup(mat) (or a subfield of that), and only transfer the matrix if it is.
There was a problem hiding this comment.
I don't think that the field of the conjugating matrix g is relevant here. The important part is that G and G^g are defined over the same field, so that the "same" frobenius is involved.
I have some code for this now (not pushed yet), but when trying to write tests, I run into contradictions. In particular, consider the following:
gap> G:=SU(2,2);
SU(2,2)
gap> FieldOfMatrixGroup(G);
GF(2^2)
gap> GeneratorsOfGroup(G);
[ [ [ Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0 ] ], [ [ 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2) ] ] ]
gap> FieldOfMatrixList(GeneratorsOfGroup(G));
GF(2)Obviously, a group that is generated by matrices over GF(2) should not state that the smallest field it is defineable over is GF(2^2).
So I have no idea on how to follow-up with the sesquilinear stuff (but we can from my POV also just move this to a future PR).
There was a problem hiding this comment.
The observation about SU(2,2) is funny.
Indeed, for even q, the groups SL(2,q) and SU(2,q) are not only isomorphic (this is true for any prime power q) but they are equal, that is, the matrices in SL(2,q^2) that respect the given sesquilinear form live over GF(q).
This seems to show that
- the code that constructs the
SUgroups sets wrongFieldOfMatrixGroupvalues and - the idea to define the
IsFullSubgroup...filters relative to theFieldOfMatrixGroupvalue for the group does not work.
Apparently we have a conceptual problem (well, at least one) here.
|
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? |
c772d2f to
8852cc7
Compare
8852cc7 to
876fd71
Compare
|
The tests fail as they test the existence of some nice monomorphisms on the conjugated group. I think that my new dispatch has a higher priority as the one that handles nice monomorphisms. But that one is defined through some meta code at Line 359 in 1fc1531 |
|
That code was written (or at least recently rewritten) by @ThomasBreuer, maybe he can help: basically the code in this PR is clashing with this: GroupMethodByNiceMonomorphismCollElm( ConjugateGroup,
[ IsGroup and HasParent, IsMultiplicativeElementWithInverse ] );I think it is good that the code in this PR has a higher priority, but I wonder if there is something to be combined here. In particular, Perhaps the code in here could be modified to also deal with situation: it does transport all kind of information, after all; so it would make some sense to also try to transport any nice mono. It could do so by imitating the code in Or it could also use a different technique: it could compose the nice mono with a |
|
Actually, I think in this case the test really should be changed... but I'll also add logic to transfer the nice mono. And I made PR #6194 -- but in the end don't want to use it here (e.g. it lacks the But trying to do so, I keep finding additional issues... @ThomasBreuer if I edit But before that I tried something else: namely, after creating |
|
We could also transfer the nice mono if we think this is suitable: diff --git a/lib/grpmat.gi b/lib/grpmat.gi
index 1f0940b39c..17f6747f3c 100644
--- a/lib/grpmat.gi
+++ b/lib/grpmat.gi
@@ -1274,7 +1274,7 @@ InstallMethod( InvariantBilinearForm,
InstallMethod( ConjugateGroup, "<G>, <g>", IsCollsElms,
[ IsMatrixGroup, IsMultiplicativeElementWithInverse ],
function( G, g )
- local H, m, ginv;
+ local H, m, ginv, nice, conj;
H := GroupByGenerators( OnTuples( GeneratorsOfGroup( G ), g ), One(G) );
UseIsomorphismRelation( G, H );
@@ -1314,5 +1314,16 @@ InstallMethod( ConjugateGroup, "<G>, <g>", IsCollsElms,
SetIsFullSubgroupGLorSLRespectingQuadraticForm( H, true );
fi;
fi;
+ if HasNiceMonomorphism( G ) then
+ nice := NiceMonomorphism( G );
+ if not IsBound(ginv) then
+ ginv := g^-1;
+ fi;
+ conj := GroupHomomorphismByFunction( H, G, y -> g*y*ginv, x -> ginv*x*g );
+ SetNiceMonomorphism( H, conj * nice );
+ if HasNiceObject( G ) then
+ SetNiceObject( H, NiceObject( G ) );
+ fi;
+ fi;
return H;
end ); |
|
I think that using nice monomorphisms in Therefore I will make a pull request that removes |
IsNaturalSL, InvariantQuadraticForm etc.) when conjugating matrix groups
…orm` etc.) when conjugating matrix groups (gap-system#6183)
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.