# $p$-adic regulator calculations

Why can't some $p$-adic regulators be calculated? The first case where this happens is the curve 3314b3. I received the following error message after using this code:

x = EllipticCurve("3314b3"); x
r = x.rank(); r
p = 7
x.is_good(p) and x.is_ordinary(p)
reg = x.padic_regulator(p,prec=7); reg


RuntimeError: Unable to compute the rank, hence generators, with certainty (lower bound=0, generators found=[]). This could be because Sha(E/Q) is nontrivial. Try increasing descent_second_limit then trying this command again.

edit retag close merge delete

Sort by » oldest newest most voted

Unfortunately, the padic_regulator method does not handle the descent_second_limit argument, which can not be directly increased :

sage: reg = x.padic_regulator(p,prec=7, descent_second_limit=20); reg
TypeError: padic_regulator() got an unexpected keyword argument 'descent_second_limit'


A workaround can be the following,

There is also a problem when computing the gens of x as well:

sage: x.gens()
RuntimeError: Unable to compute the rank, hence generators, with certainty (lower bound=0, generators found=[]).  This could be because Sha(E/Q) is nontrivial.
Try increasing descent_second_limit then trying this command again.


But you can compute the gens of x with a higher descent_second_limit argument:

sage: x.gens(descent_second_limit=20)
[(94248114183274/1566972225 : 912499854364645191562/62028595526625 : 1)]


Fortunately the gens are cached so further calls of this method will not require a higher descent_second_limit argument to be set:

sage: x.gens()
[(94248114183274/1566972225 : 912499854364645191562/62028595526625 : 1)]


In particular, now you can compute the padic_regulator:

sage: reg = x.padic_regulator(p,prec=7); reg
2*7 + 5*7^2 + 6*7^3 + 5*7^4 + 3*7^5 + 3*7^6 + O(7^7)


I agree that this is tricky, and i consider your problem as a bug.

more

Do you mean I can just call the generator(s) by D=Cremona Database D.allgens()[] and use x.padic_regulator or do I then have compute the padic_regulator from there manually (which means there's a string of code that you didn't show)?

I was thinking I should add an answer of my own since it's too long for a comment. I did some digging into the github library files and got the following comment:

# when gens() calls mwrank it passes the command-line
# parameter "-p 100" which helps curves with large
# coefficients and 2-torsion and is otherwise harmless.
# This is pending a more intelligent handling of mwrank
# options in gens() (which is nontrivial since gens() needs
# to parse the output from mwrank and this is seriously
# affected by what parameters the user passes!).
# In fact it would be much better to avoid the mwrank console at
# all for gens() and just use the library. This is in
# progress (see trac #1949).


on lines 1907-1916 of this. So in effect, there is currently no code yet for taking the generators directly from the Cremona Database.

I have very limited knowledge in programming and coding but based on my experimentation so far, this is what I got on SAGE in terms of trying to get the code from the generators in the database:

D = CremonaDatabase()
x = EllipticCurve();
N = x.conductor();
y = str(N);
z = len(y);
a = x.cremona_label()[z:]; a
P = D.allgens(N)[a]; P
R0 = P; R0
# R1 = P; R1
Q0 = x(R0)
# Q1 = x(R1)
h = x.padic_height(p, prec)
h(Q0)
# h(Q1)


Then essentially P are the generators that we need, except that they are in the form of a nested list, ie. [[a,b,c],[d,e,f],...] as opposed to when using E.gens() and getting output as [(a : b : c),(d : e : f),...]

With this workaround, I can now obtain padic heights -> the padic height matrix and the discriminant -> padic regulator. Of course this hasn't been written into a proper code yet but it is a workaround.

more