Graphical evidence for the Birch and Swinnerton-Dyer conjecture
Whilst mentoring a student on a project related to elliptic curves, we got talking about the Birch and Swinnerton–Dyer conjecture. I refer you to the Wikipedia page for context, if you need any.
The Wikipedia page features a plot,
but no code to produce it.
In order to consider more examples, I've written the following Julia code.
using Hecke
using Plots
using Primes
using ThreadsX
# to benefit from multithreading, start Julia using `julia --threads 10`
bound = 1000000
# start at 100 to ignore the erratic early behavior
P = Primes.primes(100, bound)
X = map(log, map(log, P))
function ratio(E, p)
if p in bad_primes(E)
return 1
end
return order(base_change(GF(p), E)) // p
end
function BSD(E)
ratios = ThreadsX.collect(Float64(ratio(E, p)) for p in P)
partials = cumprod(ratios)
return map(log, partials)
end
Similar to the linked plot, we expect that an elliptic curve of rank $r$
gives rise to something which approaches a line of slope $r$.
For elliptic curves of ranks 0 to 4 taken from the LMFDB
we can easily plot their associated "BSD-curves"
using
curves = [
elliptic_curve([0, -1, 1, 0, 0]),
elliptic_curve([0, 0, 1, -1, 0]),
elliptic_curve([0, -1, 1, -24, 54]),
elliptic_curve([1, -1, 1, -237, 1365]),
elliptic_curve([0, -1, 1, -129, 600]),
];
label = permutedims(hcat([string("rank ", i) for i in 0:4]));
plot(X, map(BSD, curves), label=label)
Does anyone know what the original data supporting the BSD conjecture looked like? Certainly, the EDSAC they purportedly used for the calculations is not going to reproduce the plot above anytime soon.