I'm going to forward this to sage-nt as there may be people who read that
but not this.

Meanwhile I would recommend getting something to work correctly before
worrying too much about what is most efficient.


John

On Wed, 6 Mar 2024, 12:52 Giacomo Pope, <giacomop...@gmail.com> wrote:

> *=== Summary*
>
> Arithmetic of divisors for Jacobians of hyperelliptic curves with two
> points at infinity is not currently properly supported for SageMath. Worse,
> there are no checks or error handling and the output of the arithmetic is
> simply wrong.
>
> Minimal example:
>
> sage: R.<x> = PolynomialRing(GF(11))
> sage: f = x^6 + x + 1
> sage: H = HyperellipticCurve(f)
> sage: J = H.jacobian()
> sage: D = J(H.lift_x(1))
> sage: jacobian_order = sum(H.frobenius_polynomial())
> sage: jacobian_order * D
> (x + 10, y + 5) # this should be (1)
>
> I wrote about this as a GitHub issue as well:
> https://github.com/sagemath/sage/issues/37109 but I am now coming to
> sage-devel as I have *some* progress and want to try and have advice /
> conversation about how we can improve this.
>
> *=== Suggestion*
>
> I have been working on a small proof of concept for arithmetic with
> Sabrina Kunzweiler using sage (
> https://github.com/GiacomoPope/HyperellipticCurves) which has been
> implemented following the balanced strategy of the following paper:
>
> Efficient Hyperelliptic Arithmetic using Balanced Representation for
> Divisors
> Steven D. Galbraith, Michael Harrison, and David J. Mireles Morales
> https://www.math.auckland.ac.nz/~sgal018/ANTS08.pdf
>
> This is similar but distinct to what Magma uses for arithmetic.
> Essentially the arithmetic is the same as Cantor, but to ensure a unique
> representation of the zero degree divisors there is an integer weight n
> together with Mumford polynomials (u, v). By keeping track of this weight
> during composition and reduction arithmetic is complete. We can ensure
> deg(u) <= g by using composition and reduction at infinity.
>
> This implementation works as I expect and I am happy with it. But getting
> it into Sage will be a bigger job. I will try and outline some of the
> issues I see but as with everything the unknown unknowns will be the
> biggest issue.
>
> Minimal working implementation:
> https://github.com/GiacomoPope/HyperellipticCurves
>
> *=== Potential Issues*
>
> *Weighted projective models*
>
> The balanced representation is naturally tied to a weighted projective
> model for the hyperelliptic curve (with weights (1 : 3 : 1)) which is much
> less built out than unweighted polynomial rings in sagemath.
>
> Two recent issues with the weighted polynomial ring:
>
> https://github.com/sagemath/sage/issues/37155
> https://github.com/sagemath/sage/issues/37167
>
> In our implementation I simply build the weighted projective model in a
> normal polynomial ring by computing the correct weights but there could be
> further complications if we really try and implement this "properly" from
> the construction class in sage. This feels like the first big blocker.
>
> A "concrete" example of why we need this is when writing down the two
> points at infinity for the real model. These are not "points" on the
> current curve because the projective model is different and causes a range
> of issues.
>
> *Constructing the right classes*
>
> I think aside from maybe needing additional methods on the hyperelliptic
> curve, once the projective model is right and points on the curve are well
> defined for all cases. I do not have any intuition on whether the balanced
> model will for example have issues with the p-Adic implementation as I have
> no experience in this area.
>
> Using the language of
> https://www.math.auckland.ac.nz/~sgal018/crypto-book/ch10.pdf, the
> "imaginary" or ramified model is what is currently well supported in sage.
> Here we have only one point at infinity. For the split or "real" model,
> this is what is sketched out in my own repo and what I want to address,
> there are two distinct points at infinity. Proper representation of the
> degree zero divisors needs more than (u, v) for unique representation. For
> the inert model, where there are no points at infinity over the base ring,
> I think we should simply reject all arithmetic and force the user to change
> the curve model or work over a field extension. This is what Magma does.
>
> This leads me to the Jacobian. I believe we should have a
> `Jacobian_ramified` and `Jacobian_split` class and `Jacobian_inert`, each
> with their own efficient (or missing) arithmetic and representation (the
> inert case simply has NotImplemented for arithmetic. The hyperelliptic
> curve class should know the number of points at infinity and then select
> this class without user input (so H.jacobian() does whatever the use
> expects).
>
> This will end up being a fairly large refactoring of the current code and
> I believe this will be hazardous work!
>
> *=== Backwards compatibility *
>
> This is where I am most worried. I am familiar with and probably capable
> of working with the curves over finite fields and building sensible classes
> which allow for efficient arithmetic for odd and even genus for the
> ramified and split models, but I know there's a lot more maths than the
> arithmetic of these divisors and I need to ensure everything which everyone
> needs works in the same way while making all these changes.
>
> *=== Next steps*
>
> This feels like a relatively big reworking of a very old part of Sage and
> I think it's important to do, but I want to make sure I don't waste effort
> on doing something which causes more harm than good.
>
> My gut feeling is a small group of people with interest in this area take
> some time to try and rewrite the support for hyperelliptic curves and their
> Jacobians and try and build something which is strong enough to be
> practically useful. This really feels like an area of Sage drastically
> under featured compared to Magma and it's important to me to try and make
> this as good as possible.
>
> I would love advice from the community on how best to deal with this.
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "sage-devel" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to sage-devel+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/sage-devel/cf40307c-9a26-40cd-bb55-fde6cd5688e2n%40googlegroups.com
> <https://groups.google.com/d/msgid/sage-devel/cf40307c-9a26-40cd-bb55-fde6cd5688e2n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/CAD0p0K4YCcCxto%3DONkHxDu19EJJrN0yEAojZLpkq6PcGCniVYA%40mail.gmail.com.

Reply via email to