-
-
Notifications
You must be signed in to change notification settings - Fork 556
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
compute isomorphisms between quaternion orders #34976
compute isomorphisms between quaternion orders #34976
Conversation
Codecov ReportBase: 88.57% // Head: 88.59% // Increases project coverage by
Additional details and impacted files@@ Coverage Diff @@
## develop #34976 +/- ##
===========================================
+ Coverage 88.57% 88.59% +0.02%
===========================================
Files 2140 2136 -4
Lines 397273 396159 -1114
===========================================
- Hits 351891 350991 -900
+ Misses 45382 45168 -214
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here. ☔ View full report at Codecov. |
e588905
to
296a27a
Compare
296a27a
to
113d1bf
Compare
f488bba
to
99f34a2
Compare
99f34a2
to
a987af5
Compare
a987af5
to
7de1ed7
Compare
132c96e
to
1e0a009
Compare
1e0a009
to
82b3395
Compare
add56b4
to
4af1af5
Compare
Looking through this code, it seems to be a good addition, even if only working for maximal orders currently. I see other reviewers on the list but no comments. I personally think this should be included. |
I wanted to look through the code later today, unfortunately I couldn't find time for it earlier this week. |
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.
Sorry for the delay. It's just two small things, otherwise it looks good to me.
if not self.quadratic_form().is_positive_definite(): | ||
raise NotImplementedError('only implemented for definite quaternion orders') |
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.
Isn't it a bit more efficient to check whether the associated quaternion algebra is definite by checking the invariants as done in #37100? If so, I could put a dependency on that PR and update it accordingly after this PR is merged.
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.
Sounds good to me. In hindsight we should've probably just made one big pull request together, but alas that's not how things evolved...
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.
Yeah, we probably should have started directy from your code in #37100, but I'll fix that
Just briefly resetting to "needs review" for the above two things. |
Also, while I don't think there should be any conflicts with the current version of develop, can you bring this branch up to date to make sure? |
…ders SageMath version 10.3.beta6, Release Date: 2024-01-21
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.
Looks good to me now :)
Thanks! |
Documentation preview for this PR (built with commit 134e16d; changes) is ready! 🎉 |
- Modified definiteness check in `.minimal_element()` and `.isomorphism_to`; also added check of the base field in the latter method - Reduced search for a generator in `.is_principal()` to a call to `.minimal_element()`
- Modified definiteness check in `.minimal_element()` and `.isomorphism_to`; also added check of the base field in the latter method - Reduced search for a generator in `.is_principal()` to a call to `.minimal_element()`
- Modified definiteness check in `.minimal_element()` and `.isomorphism_to`; also added check of the base field in the latter method - Reduced search for a generator in `.is_principal()` to a call to `.minimal_element()`
I'm curious as to why in the random tests you ensure For instance the following edge case doesn't work, which I would interpret as a bug. p = 419
B.<i,j,k> = QuaternionAlgebra(p)
O = B.quaternion_order([1/2 + 3/2*j + k, 1/18*i + 25/9*j + 5/6*k, 3*j + 2*k, 3*k])
Oconj = j.inverse() * O * j
Oconj = B.quaternion_order(Oconj.basis())
O.isomorphism_to(Oconj) It gives a And a small suggestion is if the two input orders are not isomorphic, you could return the error faster if you did a theta series check on the ideal I.theta_series_vector(10) == vector([1, 2, 0, 0, 2, 0, 0, 0, 0, 2]) |
sagemathgh-34976: compute isomorphisms between quaternion orders Fixes sagemath#34861. URL: sagemath#34976 Reported by: Lorenz Panny Reviewer(s): Lorenz Panny, Sebastian Spindler
You're right on that first point, I missed that in my review. The issue seems to be that the connecting ideal is only locally principal by the results in Voight, and one cannot get global principality from that if the norm of the conjugating element is divisible by a ramified prime of the algebra; I believe this comes down to the proofs of the statements (b) and (c) in Exercise 4 in Chapter 17 of Voight's book. So the orders are still isomorphic, but trying to find a global generator of the connecting ideal fails and the method gives the wrong result. |
@yyyyx4 Unless there is an easy fix that I am missing, I figure it's best to make the error warning slightly more ambiguous for now, e.g. by letting the user know that the method is not able to detect whether the given orders are isomorphic, and to add this limitation to the docstring (maybe with the example that @jtcc2 gave above). |
This is not a fix for the issue - it just adapts the error warning to be more ambiguous, as suggested in sagemath#34976 (comment)
This is not a fix for the issue - it just adapts the error warning to be more ambiguous, as suggested in sagemath#34976 (comment)
Fixes #34861.