# implement given divisor as a specific hyperelliptic curve divisor

I get the values of a divisor for a hyperelliptic curve from a research paper to ensure the divisor is correct and i want to use this divisor on calculation.

so Idid the following:

p = 4112543547855339322343814790708185367671872426434747235319998473455582535888229747778325047393413053
K = GF(p)
R.<x> = K[]

f = x^5 + 7943193*x^4 + 6521255*x^3 + 1065528*x^2 + 3279922*x + 3728927
C = HyperellipticCurve( f )
J = C.jacobian()
X = J(K)

u, v = x^2 + 22457213658579645161*x + 62960708771725664757, 65279057408798633572*x + 32004384923913711271
D = X( [u,v] )


verbose 0 (3324: multi_polynomial_ideal.py, groebner_basis) Warning: falling back to very slow toy implementation. verbose 0 (1083: multi_polynomial_ideal.py, dimension) Warning: falling back to very slow toy implementation. Error in lines 9-9 Traceback (most recent call last):
File "/cocalc/lib/python2.7/site-packages/smc_sagews/sage_server.py", line 1013, in execute exec compile(block+'\n', '', 'single') in namespace, locals File "", line 1, in <module> File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/schemes/hyperelliptic_curves/jacobian_homset.py", line 145, in __call__ return JacobianMorphism_divisor_class_field(self, tuple(P)) File "/ext/sage/sage-8.1/local/lib/python2.7/site-packages/sage/schemes/hyperelliptic_curves/jacobian_morphism.py", line 388, in __init__ polys, C)) ValueError: Argument polys (= (x^2 + 22457213658579645161x + 62960708771725664757, 65279057408798633572x + 32004384923913711271)) must be divisor on curve Hyperelliptic Curve over Finite Field of size 4112543547855339322343814790708185367671872426434747235319998473455582535888229747778325047393413053 defined by y^2 = x^5 + 7943193x^4 + 6521255x^3 + 1065528x^2 + 3279922x + 3728927.

Does this mean the paper is wrong or I am at wrong. and if so, how can I modify my work?

edit retag close merge delete

Please format your code, so that it is displayed properly. On this page, the markdown is - for instance - considering a star, *, to be something that starts italic text. For instance, *star* is shown as star . But we need of course a * in the above code with an other meaning.

In order to force a proper display, after applying the site markdown, one can proceed as follows:

• copy and paste the python block (in a new line (after a new line)), then mark it, if not already marked, then press Control+K on it. (This will further indent the code in the typing frame.)
• alternatively press that button with 101 and 010 in the "frame menu bar", where the question was posted.
• or just indent once more (four spaces) before copy pasting...
( 2018-01-13 13:42:36 +0200 )edit

If i woul have to trust either sage or a paper, then sage is my choice. In the given case, we may add asnegative "style arguments" for the paper:

• the prime is "huge", but all coefficients in multiples of a "random divisor" are very "small". And which multiples are taken is also hidden in the darkness.
• the test for $f-v^2= 0$ modulo $u$ fails for every "Mumfortd pair" published in the article.
• we get a very accurate precision for the time taken by each computation, that has even more "relevant digits" than some "big coefficients in the Mumford representations", for instance: To create Divisor, it took 0.28114057028514255 Seconds - how can i give credit to such a paper?
• references tend rather to mention elliptic curves, no "hype", and there is no page reference!
( 2018-01-14 09:53:54 +0200 )edit

Sort by » oldest newest most voted

The cited source above claims things in a two columns paper, that cannot be valid.

To support this, and to give an answer to the question "how can I modify my work?", please let us consider an other source using:

• the same hyperelliptic curve
• over the same prime
• where there appears a divisor with Mumford representation $(u,v)$ with more "realistic" coefficients in $u,v$:

http://shodhganga.inflibnet.ac.in/bitstream/10603/102010/15/15_chapter%205.pdf

Let us take a look at Table 5.4. inside the above Chapter 5, and adapt the code to work with the new objects in this working reference:

p = 4112543547855339322343814790708185367671872426434747235319998473455582535888229747778325047393413053
K = GF(p)
R.<u> = K[]
f = u^5 + 7943193*u^4 + 6521255*u^3 + 1065528*u^2 + 3279922*u + 3728927

C = HyperellipticCurve( f )
J = C.jacobian()
X = J(K)

U = ( u^2
+ 1860389956661272000673008332624408105124473591357802495195699152127038244919646073105431091649161433*u
+ 3678638643325468767033409217184617082278646180398696096065435808423595790408365381053077562453250122 )

V = ( 1442288836874733903146967744806211994245652783209857240169344848296298432525255771657442734321755066*u
+ 921980454689397557939882885330855476778834577885555086747866424426336117619472682642574975583793355 )

D = X( [ U,V ] )

key = 11794224706464405453771880923682985303502368223256244790322242497664987902757947838816724010526943231
div = key * D


And sage confirms the printed result from this Chapter 5, page 107:

sage: print div
(x^2 + 1334417218673579196183082084171449472807365544624463016735162813781624145553691422830410095888029556*x + 3947000779241763670672412101498061083590545643436596730239170524313050659358606510365451650167089110, y + 3685255333461212784675197538912907368200372565862892461204210868447776269393357974512751786077530346*x + 4039903126531302725487748758957892552553012169705313271281907787620627040317525523860359172450156937)


Note: The computation also gives the warning:

verbose 0 (3324: multi_polynomial_ideal.py, groebner_basis) Warning: falling back to very slow toy implementation.
verbose 0 (1083: multi_polynomial_ideal.py, dimension) Warning: falling back to very slow toy implementation.


Note: This post is related to 40509 on this site.

Note: As mentioned in the comment, the coefficients of $(u,v)$ are expected to be (at least for $k\cdot D$) as "big" as the prime $p$...

more