-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Symplectic C5 #75
Symplectic C5 #75
Conversation
gap/ClassicalMaximals.gi
Outdated
|
||
# For each prime divisor of e, there is exactly one of these subgroups, | ||
# so this is sufficient. | ||
return List(PrimeDivisors(e), b -> SubfieldSp(n, p, e, QuoInt(e ,b))); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You have to remember conjugating the subgroup you constructed by an element of GSp \ Sp in order to get all the conjugacy classes in Sp, see for example ll. 833-834 at https://github.com/hulpke/maxtrans/blob/master/magma/classmax.m
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some suggestions. Overall looks fine to me, modulo the remark by @maxhauck
gap/ClassicalMaximals.gi
Outdated
|
||
# For each prime divisor of e, there is exactly one of these subgroups, | ||
# so this is sufficient. | ||
return List(PrimeDivisors(e), b -> SubfieldSp(n, p, e, QuoInt(e ,b))); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
return List(PrimeDivisors(e), b -> SubfieldSp(n, p, e, QuoInt(e ,b))); | |
return List(PrimeDivisors(e), b -> SubfieldSp(n, p, e, QuoInt(e, b))); |
gap/SubfieldMatrixGroups.gi
Outdated
local F, q0, b, gens, l, zeta, omega, zetaPower, C, gen; | ||
|
||
if IsOddInt(d) then | ||
ErrorNoReturn("<d> must even but ", d, " was given."); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ErrorNoReturn("<d> must even but ", d, " was given."); | |
ErrorNoReturn("<d> must be even but ", d, " was given."); |
However, a general note to both of you: it is not really necessary to print the value d
here, as the user will be put on a break loop if the error is triggered, and so they can just enter d;
followed by return to see the value, if they wanted to. So you could just do
ErrorNoReturn("<d> must even but ", d, " was given."); | |
ErrorNoReturn("<d> must be even"); |
gap/SubfieldMatrixGroups.gi
Outdated
if e mod f <> 0 or not IsPrime(b) then | ||
ErrorNoReturn("<f> must be a divisor of <e> and their quotient must be a prime but <e> = ", | ||
e, " and <f> = ", f); | ||
fi; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In general I'd try move input validation to the very start, before any work is done. Also, this checks for two conditions, and so I'd suggest to have two errors; that makes it slightly easier for a human to understand what's going on. I.e., together with what I wrote above:
if e mod f <> 0 or not IsPrime(b) then | |
ErrorNoReturn("<f> must be a divisor of <e> and their quotient must be a prime but <e> = ", | |
e, " and <f> = ", f); | |
fi; | |
if e mod f <> 0 then | |
ErrorNoReturn("<f> must be a divisor of <e>"); | |
fi; | |
if not IsPrime(b) then | |
ErrorNoReturn("The quotient of <f> by <e> must be a prime"); | |
fi; |
gap/SubfieldMatrixGroups.gi
Outdated
# This matrix C preserves the form and is constructed to | ||
# have determinant 1, but it is not in Sp(d, q0). Therefore it is | ||
# our missing generator to extend Sp(d, q0) to a C5-subgroup, since | ||
# C is in the Normalizer of Sp(d, q) of Sp(d, q0). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here q0 is a divisor of q, so I am assuming you mean the normalizer N_{Sp(d,q)}(Sp(d,q0))
; the following phrasing describes it more clearly, IMHO:
# C is in the Normalizer of Sp(d, q) of Sp(d, q0). | |
# C is in the normalizer of Sp(d, q0) in Sp(d, q). |
gap/SubfieldMatrixGroups.gi
Outdated
# have determinant 1, but it is not in Sp(d, q0). Therefore it is | ||
# our missing generator to extend Sp(d, q0) to a C5-subgroup, since | ||
# C is in the Normalizer of Sp(d, q) of Sp(d, q0). | ||
C := DiagonalMat(Concatenation(List([1..l], i -> omega * zetaPower), List([1..l], i -> zetaPower))); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C := DiagonalMat(Concatenation(List([1..l], i -> omega * zetaPower), List([1..l], i -> zetaPower))); | |
C := DiagonalMat(Concatenation(ListWithIdenticalEntries(l, omega * zetaPower), ListWithIdenticalEntries(l, zetaPower))); |
7b3bb12
to
11d3ee9
Compare
The proposed changes seem good to me, I have implemented them and rebased. As for the remark by @maxhauck, it seems like it suffices to call |
dbb4587
to
9f4c917
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
gap> testsSubfieldSp := [[6, 2, 2, 1], [4, 3, 2, 1], [4, 3, 4, 2], [4, 7, 2, 1]];; | ||
gap> ForAll(testsSubfieldSp, TestSubfieldSp); | ||
true | ||
gap> SubfieldSp(3, 2, 2, 1); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would suggest to add a comment that explains error handling is being tested (as opposed to a broken test file)
gap> SubfieldSp(3, 2, 2, 1); | |
# test error handling | |
gap> SubfieldSp(3, 2, 2, 1); |
Codecov Report
@@ Coverage Diff @@
## main #75 +/- ##
==========================================
- Coverage 91.63% 91.01% -0.63%
==========================================
Files 14 14
Lines 2415 2504 +89
==========================================
+ Hits 2213 2279 +66
- Misses 202 225 +23
|
Add the necessary functions for the C5 subgroups in the symplectic case. The codecov bot will be happy once we add the symplectic main function.
Edit: It appears that the checks have some really fishy issue due to RECOG, but I was only able to reproduce said issue once in a blue moon locally. Everything seems to work fine 99% of the time, so this must be some randomized-algorithm-stuff from RECOG.
Checklist for the reviewer
General
Functions constructing generators of maximal subgroups
RECOG.TestGroup
from the recog package.DefaultFieldOfMatrixGroup
returns the correct field.Functions assembling the list of all maximal subgroups of a certain group
The reviewer doesn't need to compare our results to magma's results. That's the job of the person implementing the code.