This course builds elliptic curve theory from first principles up to the machinery behind the 2026 rank-30 record. Nothing is assumed beyond undergraduate algebra, and every symbol is defined before use. PARI/GP is the computational workhorse throughout; a later phase covers driving it from Mathematica.
| Phase | Contents |
|---|---|
| 0 | Toolchain and algebraic prerequisites |
| 1 | Curves, the Weierstrass model, the group law |
| 2 | Analytic theory and finite fields |
| 3 | Torsion, Galois representations, reduction |
| 4 | Heights and the Mordell–Weil theorem |
| 5 | Descent, Selmer groups, Ш |
| 6 | L-functions, modularity, BSD |
| 7 | High-rank construction |
| 8 | Practice: PARI cookbook and a Mathematica package |
| Symbol | Meaning |
|---|---|
| $\mathbb{Z},\mathbb{Q},\mathbb{R},\mathbb{C}$ | integers, rationals, reals, complex numbers |
| $\mathbb{F}_q$ | the finite field with $q$ elements, $q$ a prime power |
| $\mathbb{Z}_p,\ \mathbb{Q}_p$ | $p$-adic integers and $p$-adic numbers |
| $K$ | a field, usually $\mathbb{Q}$ or a number field |
| $\overline{K}$ | a fixed algebraic closure of $K$ |
| $K^\times$ | the multiplicative group $K\setminus\{0\}$ |
| $G_K$ | $\operatorname{Gal}(\overline{K}/K)$, the absolute Galois group |
| $\operatorname{char} K$ | the characteristic of $K$ |
| $E$ | an elliptic curve |
| $E(K)$ | the group of $K$-rational points of $E$ |
| $\mathcal{O}$ | the point at infinity, identity of $E(K)$ |
| $r$ | the rank of $E(\mathbb{Q})$ |
| $\Delta$ | the discriminant of a Weierstrass equation |
| $N$ | the conductor of $E$ |
| $a_p$ | $p+1-\#E(\mathbb{F}_p)$, the trace of Frobenius at $p$ |
| $h,\ \hat h$ | naive and canonical (Néron–Tate) height |
| $v_p$ | the $p$-adic valuation: $v_p(p^k u)=k$ for $p \nmid u$ |
| $\#S$ or $|S|$ | cardinality of a set $S$ |
| $a \mid b$ | $a$ divides $b$ |
| $\lfloor x\rfloor$ | greatest integer $\le x$ |
0.1 Verify that $v_p$ satisfies $v_p(xy)=v_p(x)+v_p(y)$ and $v_p(x+y)\ge\min(v_p(x),v_p(y))$ for $x,y\in\mathbb{Q}^\times$, and give an example where the second is strict.
Write $x = p^{a}u$, $y = p^{b}w$ with $u,w$ having numerator and denominator prime to $p$. Then $xy = p^{a+b}uw$ and $uw$ is again prime to $p$, so $v_p(xy)=a+b$. For the sum, assume $a \le b$; then $x+y = p^{a}(u + p^{b-a}w)$ and the bracket is a $p$-adic integer times a unit denominator, so $v_p(x+y)\ge a=\min(a,b)$.
Strict example: $p=2$, $x=1$, $y=1$. Then $v_2(x)=v_2(y)=0$ but $v_2(2)=1 \gt 0$.
0.2 Show that $\lfloor \log_{10} n\rfloor + 1$ is the number of decimal digits of a positive integer $n$. Roughly how many digits has a 150-digit curve coefficient in binary?
$n$ has $d$ digits iff $10^{d-1} \le n \lt 10^{d}$ iff $d-1 \le \log_{10}n \lt d$ iff $d = \lfloor\log_{10}n\rfloor+1$.
Binary digits $\approx 150 \cdot \log_2 10 \approx 150 \times 3.3219 \approx 498$ bits. So a 150-digit coefficient is about a 500-bit integer — eight 64-bit machine words.
PARI is a C library for number theory; GP is its interactive calculator front end. It is the fastest freely available tool for elliptic curves over $\mathbb{Q}$ and will be used in almost every lesson.
# macOS
brew install pari
# optionally, Cremona's curve database (enables ellsearch / ellidentify)
brew install pari-elldata
# Debian/Ubuntu
sudo apt install pari-gp pari-elldata
# check
gp --version
Other Homebrew formulae exist for PARI's optional data packages — pari-seadata and pari-seadata-big (modular polynomials for fast point counting), pari-galdata and pari-galpol (Galois theory data). None is needed for rank work; pari-elldata is convenient for looking up small-conductor curves.
gp. You get a readline prompt with history. ? lists help topics, ?ellinit gives help on one function, ??ellinit opens the full manual entry.work.gp and run gp -q work.gp. The -q flag suppresses the banner and the %1 = echoes.echo 'print(1+1)' | gp -q — this is the form we will use when calling PARI from another program.? \p 38 \\ set 38 decimal digits of precision
? E = ellinit([0,0,1,-7,6]);
? E.disc
% 6close \\ (large integer)
? E.j
? ellrank(E)
% [3, 3, 0, [[-3,0],[-2,3],[-1,3]]]
? P = [-3,0]; Q = [-2,3];
? elladd(E,P,Q)
? ellmul(E,P,7)
? ellheight(E,P)
? ellorder(E,P) \\ 0 means infinite order
? quit
\\ starts a comment to end of line; /* ... */ is a block comment.; at the end of a line suppresses printing of the result.% is the last result, %n the $n$-th.[a,b,c], matrices [a,b;c,d], indexing is 1-based: v[1].\p 50 sets real precision; \ps 20 sets series precision.# toggles a timer; ## prints the time of the last command.=; equality test is ==.E.disc, E.j, E.omega.0.3 Start gp and compute the discriminant and $j$-invariant of $y^2 = x^3 - x$. Confirm by hand from $\Delta = -16(4A^3+27B^2)$ and $j = 1728\cdot\frac{4A^3}{4A^3+27B^2}$.
? E = ellinit([0,0,0,-1,0]);
? E.disc
% 64
? E.j
% 1728
By hand: $A=-1$, $B=0$, so $4A^3+27B^2 = -4$ and $\Delta = -16\cdot(-4)=64$. And $j = 1728\cdot\frac{4(-1)}{-4} = 1728$. The value $j=1728$ signals complex multiplication by $\mathbb{Z}[i]$, which we meet in Lesson 32.
0.4 Write a two-line GP script that prints $\#E(\mathbb{F}_p)$ for $E: y^2=x^3+1$ and all primes $p \lt 50$ of good reduction, and observe the pattern.
E = ellinit([0,0,0,0,1]);
forprime(p=5, 50, print(p, " ", p+1-ellap(E,p)))
Output: $p=5\to6$, $7\to12$, $11\to12$, $13\to12$, $17\to18$, $19\to12$, $23\to24$, $29\to30$, $31\to24$, $37\to48$, $41\to42$, $43\to36$, $47\to48$.
Notice $a_p = 0$ (so $\#E = p+1$) whenever $p \equiv 2 \pmod 3$. That is the CM signature: this curve has $j=0$ and complex multiplication by $\mathbb{Z}[\zeta_3]$, and $a_p=0$ exactly at primes inert in $\mathbb{Q}(\sqrt{-3})$. This behaviour will matter when we design rank sieves (Lesson 87).
pari.math.u-bordeaux.fr/doc.html. The tutorial gp -q ?tutorial or the PDF A Tutorial for PARI/GP.You will write real code in GP, so it is worth twenty minutes on the language itself.
| Type | Example | Notes |
|---|---|---|
t_INT | 42 | arbitrary precision integer |
t_REAL | 42.0 | arbitrary precision float; precision set by \p |
t_FRAC | 3/7 | exact rational, always in lowest terms |
t_INTMOD | Mod(3,7) | element of $\mathbb{Z}/7\mathbb{Z}$; arithmetic stays reduced |
t_PADIC | 3 + O(5^10) | $p$-adic number to given precision |
t_POL | x^3 - x + 1 | polynomial in a formal variable |
t_POLMOD | Mod(x, x^2+1) | element of a quotient ring, e.g. a number field |
t_SER | 1 + x + O(x^5) | power series |
t_VEC,t_COL,t_MAT | [1,2], [1,2]~, [1,2;3,4] | row vector, column vector, matrix |
t_CLOSURE | (x)->x^2 | anonymous function |
type(x) reports the type. The type system is what makes GP powerful: writing Mod(3,7)^100 automatically does modular exponentiation, and ellinit applied to coefficients that are t_INTMOD gives a curve over $\mathbb{F}_p$.
\\ loops
for(i=1, 10, print(i))
forprime(p=2, 100, ...)
forvec(v=[[1,3],[1,3]], print(v)) \\ v ranges over a box
fordiv(60, d, print(d))
\\ conditionals
if(cond, then_expr, else_expr)
\\ user functions
f(x, y=1) = x^2 + y; \\ y has default 1
g = (x) -> x^2; \\ closure
\\ local variables: use my()
h(n) = my(s = 0); for(i=1,n, s += i); s;
\\ vectors built by comprehension
v = vector(10, i, i^2);
w = [ p | p <- primes(20), p % 4 == 1 ]; \\ filtered
u = [ p^2 | p <- primes(10) ]; \\ mapped
\\ apply / select
apply(x->x^2, [1,2,3])
select(x->x>2, [1,2,3,4])
Variables are global by default. Always declare locals with my(...) at the top of a function, or a loop counter will silently clobber a global you cared about. A related trap: x is a formal polynomial variable by default, so assigning x = 3 anywhere makes every later polynomial in x evaluate to a number. Use my(x) or different names.
\p n sets $n$ decimal digits for t_REAL. Functions that need higher internal precision generally take it automatically, but for canonical heights on record-sized curves you will want \p 100 or more. To check a computed real is genuinely nonzero, compare it with 10^-(precision - margin), or better, redo the computation at two precisions and check stability.
0.5 Write a GP function naivecount(a,b,p) returning $\#E(\mathbb{F}_p)$ for $y^2=x^3+ax+b$ by direct character summation, and check it against ellcard.
naivecount(a,b,p) = my(s = 0);
for(x = 0, p-1, s += 1 + kronecker(x^3 + a*x + b, p));
s + 1; \\ +1 for the point at infinity
? naivecount(-1,0,101)
% 116
? E = ellinit([0,0,0,-1,0], 101); ellcard(E)
% 116
kronecker(n,p) is the Legendre symbol for odd prime $p$: $+1$ if $n$ is a nonzero square mod $p$, $-1$ if a non-square, $0$ if $p \mid n$. The count $1+\left(\frac{f(x)}{p}\right)$ is exactly the number of $y$ with $y^2=f(x)$.
0.6 Use Mod and ellinit to build $y^2 = x^3+1$ over $\mathbb{F}_{13}$ and list all its points. Confirm the count.
? E = ellinit([0,0,0,0,1], 13);
? ellcard(E)
% 12
? #ellgroup(E) \\ group structure
? \\ enumerate:
? for(x=0,12, for(y=0,12, if(Mod(y^2 - x^3 - 1, 13)==0, print([x,y]))))
You should find 11 affine points plus $\mathcal{O}$, total 12. Note $12 = 13+1-2$, so $a_{13}=2$; and $13\equiv1\pmod3$, consistent with Exercise 0.4's CM pattern (split primes have $a_p\ne0$).
ellinit returns a vector with a fixed layout. Knowing it saves constant manual lookups.
ellinit([a1,a2,a3,a4,a6]) builds the curve
$$y^2 + a_1xy + a_3y = x^3 + a_2x^2 + a_4x + a_6.$$
The short form ellinit([a4,a6]) is shorthand for $[0,0,0,a_4,a_6]$, i.e. $y^2 = x^3+a_4x+a_6$. A second argument gives the base field: ellinit([...], p) for $\mathbb{F}_p$, ellinit([...], O(p^n)) for $\mathbb{Q}_p$, ellinit([...], nf) for a number field.
| Index | Member name | Meaning |
|---|---|---|
| 1–5 | E.a1 … E.a6 | the Weierstrass coefficients |
| 6–9 | E.b2,E.b4,E.b6,E.b8 | the $b$-invariants |
| 10–11 | E.c4,E.c6 | the $c$-invariants |
| 12 | E.disc | discriminant $\Delta$ |
| 13 | E.j | $j$-invariant |
| 14–15 | E.roots | roots of the cubic (over $\mathbb{R}$ or $\mathbb{C}$) |
| — | E.omega | the period lattice $[\omega_1,\omega_2]$ |
| — | E.eta | quasi-periods (for sigma/zeta functions) |
| — | E.area | covolume of the period lattice |
ellminimalmodel(E, &v) \\ minimal model; v records the change of variables
ellglobalred(E) \\ [N, v, product of c_p, ...] -- N is the conductor
elllocalred(E, p) \\ [f_p, Kodaira type code, [u,r,s,t], c_p]
ellap(E, p) \\ a_p
ellcard(E) \\ #E(F_q) (curve over a finite field)
ellgroup(E) \\ group structure of E(F_q)
elltors(E) \\ torsion subgroup over Q
elladd(E,P,Q) ellsub \\ group law
ellmul(E,P,n) \\ n*P
ellorder(E,P) \\ order of P (0 if infinite)
ellisoncurve(E,P) \\ membership test
ellheight(E,P) \\ canonical height
ellheightmatrix(E,[P,Q]) \\ Gram matrix of the height pairing
ellrank(E) \\ [lower bound, upper bound, s, points]
ellrootno(E) \\ root number w = +-1
ellanalyticrank(E) \\ [analytic rank, leading L-coefficient]
elllseries(E, s) \\ L(E,s)
ellratpoints(E, h) \\ search for points with naive height <= h
ellisomat(E) \\ the Q-isogeny class
ellisogeny(E, G) \\ Velu: the isogeny with kernel G
elltwist(E, d) \\ quadratic twist by d
ellpointtoz(E,P) \\ elliptic logarithm
ellztopoint(E,z) \\ elliptic exponential
ellsearch(N) \\ database lookup (needs pari-elldata)
Reduction type, conductor and local data are only meaningful for a minimal model. ellinit does not minimalise automatically. Habit: E = ellminimalmodel(ellinit([...]));
0.7 Take $E: y^2 = x^3 - 16\cdot 27$ (that is, ellinit([0,-432])). Compute its minimal model, conductor, torsion and rank. What famous curve is it?
? E = ellinit([0,-432]);
? Em = ellminimalmodel(E); Em[1..5]
? ellglobalred(Em)[1]
% 27
? elltors(Em)
% [3, [3], [[12,36]]] \\ Z/3Z
? ellrank(Em)
% [0, 0, 0, []]
Conductor 27, torsion $\mathbb{Z}/3\mathbb{Z}$, rank 0. This is the curve $x^3+y^3=1$ in disguise — the Fermat cubic. Rank 0 with only 3-torsion means the only rational points on $x^3+y^3=1$ are the trivial ones $(1,0)$ and $(0,1)$: Fermat's Last Theorem for exponent 3.
0.8 For $E:y^2+y=x^3-x^2-10x-20$ (conductor 11) print the Kodaira type and Tamagawa number at every bad prime.
? E = ellminimalmodel(ellinit([0,-1,1,-10,-20]));
? N = ellglobalred(E)[1]
% 11
? fordiv(N, p, if(isprime(p), print(p, " ", elllocalred(E,p))))
11 [1, 5, [1,0,0,0], 5]
Reading the output: conductor exponent $f_{11}=1$, so multiplicative reduction; Kodaira code 5 means type $\mathrm{I}_5$; Tamagawa number $c_{11}=5$. Consistent: for split multiplicative $\mathrm{I}_n$ we expect $c_p=n$ and $v_p(\Delta)=n=5$. Check with valuation(E.disc,11).
??ellinit in the interpreter gives the component table.Mathematica has no arithmetic elliptic curve functionality — its Elliptic* and Weierstrass* functions are analytic (the $\wp$ function, theta functions, elliptic integrals). What it is excellent at is symbolic polynomial algebra, which is exactly what the high-rank constructions in Phase 7 need. So the right architecture is a bridge.
gp[cmd_String] := StringTrim @ RunProcess[
{"gp", "-q"}, "StandardOutput", cmd <> "\nquit\n"];
gp["E = ellinit([0,0,1,-7,6]); print(ellrank(E))"]
(* "[3, 3, 0, [[-3, 0], [-2, 3], [-1, 3]]]" *)
Nothing to install beyond gp on the path. The result is a string; parse it back into Mathematica expressions:
gpParse[s_String] := ToExpression[
StringReplace[s, {"[" -> "{", "]" -> "}"}],
InputForm];
gpEval[cmd_String] := gpParse @ gp["print(" <> cmd <> ")"];
gpEval["ellheightmatrix(ellinit([0,0,1,-7,6]), \
[[-3,0],[-2,3],[-1,3]])"]
(* returns a Mathematica 3x3 matrix of reals *)
1.2345678901234567890 E12. Convert with StringReplace[s, " E" -> "*10^"] before ToExpression.~ marks a column vector and Mod(a,b) prints literally. If you may get those, ask GP to normalise first: print(lift(x)), print(Vec(x)).For many small calls, spawning gp each time costs ~30 ms. A persistent session removes that.
# shell, once
export CFLAGS="-I$(brew --prefix pari)/include"
export LDFLAGS="-L$(brew --prefix pari)/lib"
pip install cysignals cypari2
(* Mathematica *)
session = StartExternalSession["Python"];
ExternalEvaluate[session, "from cypari2 import Pari; pari = Pari()"];
pariCall[expr_String] := ExternalEvaluate[session,
"str(pari(\"" <> expr <> "\"))"];
pariCall["ellrank(ellinit([0,0,1,-7,6]))"]
For thousands of curves, neither pipes nor sessions are right — write a file and let GP chew on it.
(* Mathematica: emit candidate curves *)
Export["/tmp/curves.txt",
StringRiffle[
ToString[#, InputForm] & /@ curveList /. {"{" -> "[", "}" -> "]"},
"\n"], "Text"];
\\ GP: process them
{ v = readvec("/tmp/curves.txt");
for(i = 1, #v,
my(E = ellinit(v[i]));
if(E, print(i, ":", ellrank(E)[1]))); }
| Task | Tool |
|---|---|
| Symbolic families over $\mathbb{Q}(t)$, Mestre's construction, Gröbner conditions | Mathematica |
| Numeric arithmetic: heights, descent, $L$-functions, $a_p$ | PARI |
| Bulk sieving over millions of specialisations | compiled code calling libpari, or GP scripts run in parallel |
0.9 Write a Mathematica function ECRank[{a1,a2,a3,a4,a6}] that returns the PARI rank bounds as a Mathematica list.
ECRank[coeffs_List] := Module[{s},
s = gp["print(ellrank(ellinit(" <>
StringReplace[ToString[coeffs, InputForm],
{"{" -> "[", "}" -> "]"}] <> "))"];
gpParse[s][[1 ;; 2]]
];
ECRank[{0, 0, 1, -7, 6}] (* {3, 3} *)
The slice [[1;;2]] keeps only the lower and upper bounds, dropping the generators and the $s$ component.
0.10 Measure the round-trip cost of Route 1 for 100 calls and compare with a single call that does 100 curves. What does that tell you about sieve design?
AbsoluteTiming[Do[gp["print(ellap(ellinit([0,0,0,-1,n]), 101))"], {n, 100}]]
(* roughly 3-4 seconds: ~35 ms per process spawn *)
AbsoluteTiming[gp["for(n=1,100, print(ellap(ellinit([0,0,0,-1,n]),101)))"]]
(* roughly 0.05 seconds *)
Two orders of magnitude. Design rule: never call PARI once per candidate. Batch the loop inside GP, or move the inner loop into compiled code linking libpari. In Phase 7 the sieve evaluates $a_p$ for millions of curves; a per-curve process spawn would make it impossible.
RunProcess and ExternalEvaluate; cypari2 documentation at github.com/sagemath/cypari2.Everything used later, defined once.
A set $G$ with an operation $\cdot$ that is associative, has an identity $e$, and has inverses. Abelian means $ab=ba$; we then write the operation additively. A subgroup $H \le G$ is a subset closed under the operation and inverses. The index $[G:H]$ is the number of cosets $gH$. A subgroup of an abelian group is normal, so the quotient $G/H$ is a group.
$A$ is finitely generated if $A = \langle a_1,\dots,a_n\rangle$ for finitely many $a_i$. The structure theorem: every such $A$ satisfies $$A \cong \mathbb{Z}^r \times A_{\text{tors}},$$ where $A_{\text{tors}} = \{a : na = 0 \text{ for some } n \ge 1\}$ is finite, and $r$ — the rank — is uniquely determined. Equivalently $r = \dim_\mathbb{Q}(A\otimes_\mathbb{Z}\mathbb{Q})$.
That last characterisation is the useful one: the rank is a dimension of a vector space, so it is detected by linear independence, which is why the height pairing (Lesson 50) can compute it.
A ring is a set with $+$ and $\times$ where $(R,+)$ is abelian, $\times$ is associative with identity $1$, and distributivity holds. All our rings are commutative. A field is a ring where every nonzero element is invertible. An ideal $I \subseteq R$ is an additive subgroup with $rI \subseteq I$; it is prime if $ab \in I \Rightarrow a\in I$ or $b \in I$, and maximal if no proper ideal strictly contains it. $R/I$ is a field iff $I$ is maximal.
An $R$-module is an abelian group $M$ with an $R$-action satisfying the vector-space axioms. (A $\mathbb{Z}$-module is exactly an abelian group.)
A sequence of homomorphisms $\cdots \to A \xrightarrow{f} B \xrightarrow{g} C \to \cdots$ is exact at $B$ if $\operatorname{im} f = \ker g$. A short exact sequence $$0 \to A \xrightarrow{f} B \xrightarrow{g} C \to 0$$ means $f$ is injective, $g$ is surjective, and $\operatorname{im} f = \ker g$ — so $C \cong B/f(A)$.
The whole of descent theory is the manipulation of one short exact sequence, $$0 \to E(\mathbb{Q})/mE(\mathbb{Q}) \to \mathrm{Sel}^{(m)} \to \text{Ш}[m] \to 0,$$ where the outer terms are unknown and the middle is computable. Exactness converts that into the dimension count $\dim\mathrm{Sel} = \dim(E/mE) + \dim\text{Ш}[m]$, which is the rank bound.
The characteristic of a field $K$ is the least $n \gt 0$ with $\underbrace{1+\cdots+1}_{n}=0$, or $0$ if no such $n$ exists. It is $0$ or a prime. $\operatorname{char}\mathbb{Q}=0$; $\operatorname{char}\mathbb{F}_{p^k}=p$. The distinction matters because dividing by 2 and 3 — needed to simplify Weierstrass equations — fails in characteristics 2 and 3.
0.11 Show that if $0\to A\to B\to C\to0$ is exact with $A$ and $C$ finite, then $\#B = \#A \cdot \#C$. Where is this used in the course?
$g:B\to C$ is surjective with kernel $f(A)\cong A$. The fibres of $g$ are cosets of $\ker g$, all of size $\#\ker g = \#A$, and there are $\#C$ of them. Hence $\#B = \#A\cdot\#C$.
Use: applied to the Selmer sequence with $m=2$ and taking $\log_2$, this gives $\dim_{\mathbb{F}_2}\mathrm{Sel}^{(2)} = \dim(E(\mathbb{Q})/2E(\mathbb{Q})) + \dim\text{Ш}[2]$ — the rank bound of Lesson 60.
0.12 Let $A$ be finitely generated abelian of rank $r$ with torsion $T$. Compute $\#(A/2A)$ in terms of $r$ and $T$.
$A \cong \mathbb{Z}^r\times T$, and $A/2A \cong (\mathbb{Z}/2)^r \times T/2T$. For a finite abelian group, $\#(T/2T)=\#T[2]$ (the map $t\mapsto 2t$ has kernel $T[2]$ and image $2T$, so $\#T = \#T[2]\cdot\#2T$, giving $\#(T/2T)=\#T/\#2T=\#T[2]$). Hence $$\#(A/2A) = 2^{r}\cdot \#T[2], \qquad \dim_{\mathbb{F}_2}(A/2A) = r + \dim_{\mathbb{F}_2}T[2].$$
This is exactly the formula that turns a Selmer computation into a rank bound: the $\dim E(\mathbb{Q})[2]$ term appearing everywhere in Phase 5 is this $\dim T[2]$.
An absolute value on a field $K$ is $|\cdot|:K\to\mathbb{R}_{\ge0}$ with $|x|=0\iff x=0$, $|xy|=|x||y|$, and $|x+y|\le|x|+|y|$. It is non-archimedean if the stronger $|x+y|\le\max(|x|,|y|)$ holds. A place of $K$ is an equivalence class of nontrivial absolute values.
On $\mathbb{Q}$ the places are: the usual $|\cdot|_\infty$, and for each prime $p$ the $p$-adic one $|x|_p = p^{-v_p(x)}$. Ostrowski's theorem says these are all of them.
For $x\in\mathbb{Q}^\times$, $$|x|_\infty \prod_{p} |x|_p = 1.$$
Proof: write $x=\pm\prod p^{e_p}$; then $|x|_p = p^{-e_p}$ and $|x|_\infty = \prod p^{e_p}$. The product formula is the reason height functions are well defined (Lesson 44) and the reason canonical heights decompose into local pieces (Lesson 48).
$\mathbb{Q}_p$ is the completion of $\mathbb{Q}$ with respect to $|\cdot|_p$: formal series $\sum_{n\ge n_0}c_np^n$ with $c_n\in\{0,\dots,p-1\}$. Its valuation ring is $\mathbb{Z}_p=\{x:|x|_p\le1\}$, a local ring with maximal ideal $p\mathbb{Z}_p$ and residue field $\mathbb{Z}_p/p\mathbb{Z}_p\cong\mathbb{F}_p$.
Let $f\in\mathbb{Z}_p[x]$ and $a\in\mathbb{Z}_p$ with $f(a)\equiv0\pmod p$ and $f'(a)\not\equiv0\pmod p$. Then there is a unique $\alpha\in\mathbb{Z}_p$ with $f(\alpha)=0$ and $\alpha\equiv a \pmod p$.
Hensel is why local solvability is decidable: to test whether a curve has a $\mathbb{Q}_p$-point you check finitely many residues mod a bounded power of $p$ and lift. That decidability is the whole reason Selmer groups are computable while Mordell–Weil groups are not.
A number field $K$ is a finite field extension of $\mathbb{Q}$; $[K:\mathbb{Q}]$ is its degree. Its ring of integers $\mathcal{O}_K$ consists of elements satisfying a monic polynomial over $\mathbb{Z}$. $\mathcal{O}_K$ is a Dedekind domain: every nonzero ideal factors uniquely into prime ideals.
The ideal class group $\mathrm{Cl}(K)$ is the group of fractional ideals modulo principal ones; it is finite, of order $h_K$. The unit group $\mathcal{O}_K^\times$ is finitely generated of rank $r_1+r_2-1$ by Dirichlet's theorem, where $r_1$ and $r_2$ count real and complex-conjugate-pair embeddings.
The weak Mordell–Weil theorem (Lesson 51) reduces to: there are only finitely many abelian extensions of $K$ of bounded exponent unramified outside a finite set. That statement is exactly finiteness of $\mathrm{Cl}(K)$ plus finite generation of $\mathcal{O}_K^\times$. And computing them is the practical bottleneck: for a record curve, full 2-descent needs the class group of a cubic field of ~450-digit discriminant, which is infeasible.
? K = bnfinit(x^3 - x - 1, 1);
? K.no \\ class number h_K
% 1
? K.reg \\ regulator
? K.fu \\ fundamental units
? bnfisprincipal(K, idealprimedec(K,5)[1])
? K.disc \\ field discriminant
% -23
bnfinit is expensive; the flag 1 asks for fundamental units too. Under GRH the results are much faster but conditional — use bnfcertify(K) to remove the assumption when feasible.
0.13 Decide whether $y^2 = x^3 + 7$ has a point over $\mathbb{Q}_3$ with $x \in \mathbb{Z}_3$, using Hensel.
Work mod 3. Squares mod 3 are $\{0,1\}$. Compute $x^3+7 \equiv x^3+1 \pmod 3$: for $x\equiv0,1,2$ we get $1,2,0$. So $x\equiv0$ gives $y^2\equiv1$, solvable with $y\equiv\pm1$.
Take $a=1$ and $f(y)=y^2-(x^3+7)$ with $x=0$: $f(1)=1-7=-6\equiv0\pmod3$ and $f'(1)=2\not\equiv0\pmod3$. Hensel lifts to $y\in\mathbb{Z}_3$ with $y^2=7$. So yes.
? sqrt(7 + O(3^10))
% 1 + 3 + 3^2 + 2*3^4 + ...
0.14 Verify the product formula for $x = 60/7$.
$60/7 = 2^2\cdot3\cdot5\cdot7^{-1}$. So $|x|_2 = 2^{-2}=1/4$, $|x|_3=1/3$, $|x|_5=1/5$, $|x|_7=7$, all other $|x|_p=1$, and $|x|_\infty=60/7$.
Product: $\frac{60}{7}\cdot\frac14\cdot\frac13\cdot\frac15\cdot7 = \frac{60\cdot7}{7\cdot60}=1$. ✓
0.15 Compute the class number of $\mathbb{Q}(\sqrt{-5})$ in PARI and exhibit a non-unique factorisation.
? K = bnfinit(x^2 + 5, 1); K.no
% 2
Class number 2, so $\mathcal{O}_K = \mathbb{Z}[\sqrt{-5}]$ is not a UFD. The classic witness: $6 = 2\cdot3 = (1+\sqrt{-5})(1-\sqrt{-5})$, and all four factors are irreducible (norms $4,9,6,6$; there is no element of norm 2 or 3 since $a^2+5b^2 \in\{2,3\}$ has no integer solution).
This failure of unique factorisation is precisely what the class group measures, and precisely what makes descent computations expensive.
Just enough geometry to state the group law properly and to handle elliptic surfaces in Phase 7.
For a set $S$ of polynomials in $\overline{K}[x_1,\dots,x_n]$, the affine variety is $$V(S) = \{P\in\overline{K}^n : f(P)=0\ \forall f\in S\}.$$ It is defined over $K$ if $S$ can be chosen in $K[x_1,\dots,x_n]$, and then $V(K) = V \cap K^n$ denotes the $K$-rational points. $V$ is irreducible if its ideal $I(V)$ is prime.
Same, in $\mathbb{P}^n$: take $S$ homogeneous, so that $f(P)=0$ is independent of the choice of homogeneous coordinates.
For an irreducible affine variety $V/K$, the coordinate ring is $K[V]=K[x_1,\dots,x_n]/I(V)$, an integral domain. Its fraction field $K(V)$ is the function field. The dimension of $V$ is the transcendence degree of $K(V)$ over $K$. A curve is a variety of dimension 1.
$P\in V$ is smooth (nonsingular) if the Jacobian matrix $\bigl(\partial f_i/\partial x_j\bigr)(P)$ has rank $n-\dim V$. For a plane curve $F=0$ in $\mathbb{P}^2$ this reduces to: not all of $\partial F/\partial X,\partial F/\partial Y,\partial F/\partial Z$ vanish at $P$.
A divisor on a smooth curve $C$ is a finite formal $\mathbb{Z}$-combination $D=\sum n_P(P)$ of points. Its degree is $\deg D=\sum n_P$. For $f\in\overline{K}(C)^\times$, $\operatorname{div}(f)=\sum_P \operatorname{ord}_P(f)\,(P)$, where $\operatorname{ord}_P(f)$ is the order of vanishing (negative for a pole). Divisors of this form are principal; they have degree 0. Two divisors are linearly equivalent, $D_1\sim D_2$, if $D_1-D_2$ is principal.
$\operatorname{Pic}(C) = \operatorname{Div}(C)/\{\text{principal}\}$, and $\operatorname{Pic}^0(C)$ is the subgroup of classes of degree 0. This is a group, always — and for genus 1 it will be the curve.
For a divisor $D$ on a smooth projective curve $C$ of genus $g$, set $$L(D)=\{f\in\overline{K}(C)^\times : \operatorname{div}(f)\ge -D\}\cup\{0\}, \qquad \ell(D)=\dim_{\overline K}L(D).$$ Then, with $K_C$ a canonical divisor ($\deg K_C=2g-2$), $$\ell(D)-\ell(K_C-D)=\deg D + 1 - g.$$ In particular if $\deg D \gt 2g-2$ then $\ell(D)=\deg D+1-g$.
Read $L(D)$ as "functions whose poles are no worse than $D$ allows". For $g=1$ and $\deg D=n\ge1$ we get $\ell(D)=n$ exactly. That single fact produces the Weierstrass equation, in Lesson 14.
0.16 Let $C$ have genus 1 and $\mathcal{O}\in C$. Compute $\ell(n(\mathcal{O}))$ for $n=0,1,2,3,4,5,6$.
Genus $g=1$, so $\deg K_C=0$; and for a genus-1 curve $K_C\sim0$. For $n\ge1$, $\deg(n(\mathcal{O}))=n\gt0=2g-2$, so Riemann–Roch gives $\ell = n+1-1 = n$. For $n=0$, $L(0)$ consists of functions with no poles, i.e. constants, so $\ell(0)=1$.
| $n$ | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| $\ell$ | 1 | 1 | 2 | 3 | 4 | 5 | 6 |
The jump structure is the point: $\ell(1(\mathcal{O}))=1$ means there is no function with a simple pole only at $\mathcal{O}$ (that would give an isomorphism to $\mathbb{P}^1$, contradicting $g=1$). $\ell(2(\mathcal{O}))=2$ gives a new function $x$ with a double pole; $\ell(3(\mathcal{O}))=3$ gives $y$ with a triple pole. These are the Weierstrass coordinates.
0.17 In $L(6(\mathcal{O}))$, which has dimension 6, list seven natural elements built from $x$ and $y$ and deduce that a relation must hold.
$x$ has a pole of order 2, $y$ of order 3. Pole orders: $1\to0$, $x\to2$, $x^2\to4$, $x^3\to6$, $y\to3$, $xy\to5$, $y^2\to6$. All seven lie in $L(6(\mathcal{O}))$.
Seven elements in a 6-dimensional space must be linearly dependent, so there is a relation $$\alpha y^2+\beta xy+\gamma y = \delta x^3+\epsilon x^2+\zeta x+\eta.$$ Both $y^2$ and $x^3$ must genuinely appear (otherwise the pole of order 6 could not cancel), so after rescaling we obtain exactly the general Weierstrass equation $$y^2+a_1xy+a_3y = x^3+a_2x^2+a_4x+a_6.$$ This is the derivation completed in Lesson 14 — and it explains why the indices are $1,2,3,4,6$ with no $a_5$: the weights are $\operatorname{wt}(x)=2$, $\operatorname{wt}(y)=3$, and $a_i$ carries weight $i$ with all terms of total weight 6.
The question is ancient: given a polynomial equation with rational coefficients, describe all rational solutions. For equations in two variables — curves — the answer is governed almost entirely by one invariant.
For a smooth projective curve $C$ over $\mathbb{C}$, the genus $g$ is the number of handles of the associated Riemann surface. Algebraically, $g = \dim_{\overline K}L(K_C)$, the dimension of the space of regular differentials. For a smooth plane curve of degree $d$ in $\mathbb{P}^2$, $$g = \frac{(d-1)(d-2)}{2}.$$
So lines and conics ($d=1,2$) have $g=0$; smooth cubics ($d=3$) have $g=1$; smooth quartics have $g=3$. A singular point of a plane curve reduces the genus — a nodal cubic has $g=0$, which is exactly why singular cubics are excluded from the definition of an elliptic curve.
| Genus | Rational points | Reason |
|---|---|---|
| $0$ | none, or infinitely many, parametrised by a rational function | a conic with one rational point is isomorphic to $\mathbb{P}^1$ |
| $1$ | none, or a finitely generated abelian group | Mordell–Weil |
| $\ge2$ | always finitely many | Faltings' theorem (Mordell conjecture), 1983 |
Take $x^2+y^2=1$ with the rational point $(-1,0)$. A line of rational slope $t$ through it, $y=t(x+1)$, meets the conic again in $$\left(\frac{1-t^2}{1+t^2},\ \frac{2t}{1+t^2}\right),$$ and every rational point arises from exactly one $t\in\mathbb{Q}\cup\{\infty\}$. One point plus lines gives everything. Clearing denominators recovers Pythagorean triples.
Why can this not work for a cubic? A line through one rational point of a cubic meets it in two further points, which are conjugate over a quadratic field and individually irrational. You need two rational points to produce a third. The construction stops being a parametrisation and becomes a binary operation — a group law.
$n\in\mathbb{Z}_{\gt0}$ is congruent if it is the area of a right triangle with rational sides. Setting $x = n(a+c)/b$, $y=2n^2(a+c)/b^2$ turns the conditions $a^2+b^2=c^2$, $ab/2=n$ into $$E_n:\quad y^2 = x^3 - n^2x,$$ and one shows: $n$ is congruent $\iff$ $E_n(\mathbb{Q})$ has a point of infinite order $\iff \operatorname{rank}E_n(\mathbb{Q})\ge1$. So a two-thousand-year-old problem is a rank computation.
? for(n=1,10, print(n, " rank ", ellrank(ellinit([0,0,0,-n^2,0]))[1]))
1 rank 0
2 rank 0
3 rank 0
4 rank 0
5 rank 1
6 rank 1
7 rank 1
8 rank 0
9 rank 0
10 rank 0
5, 6, 7 are congruent; 1, 2, 3, 4 are not. That $1$ is not congruent is Fermat's theorem that $x^4-y^4=z^2$ has no nontrivial solutions.
1.1 Verify that $6$ is congruent by exhibiting the triangle, and find the corresponding point on $E_6: y^2=x^3-36x$.
The $(3,4,5)$ triangle has area $6$. With $a=3,b=4,c=5$: $x = 6(3+5)/4 = 12$, $y = 2\cdot36\cdot8/16 = 36$. Check: $12^3 - 36\cdot12 = 1728-432=1296=36^2$. ✓
? E = ellinit([0,0,0,-36,0]); ellisoncurve(E,[12,36])
% 1
? ellorder(E,[12,36])
% 0 \\ infinite order
1.2 Show a smooth plane cubic has genus 1, and compute the genus of $y^2 = x^5+1$ (as a smooth projective model).
Degree $d=3$: $g=(3-1)(3-2)/2 = 1$. ✓
$y^2 = f(x)$ with $\deg f = n$ and $f$ squarefree is a hyperelliptic curve; its smooth projective model has genus $g=\lfloor(n-1)/2\rfloor$. For $n=5$: $g=2$. (The naive plane model of degree 5 is singular at infinity, so the plane-degree formula does not apply directly.)
By Faltings, $y^2=x^5+1$ therefore has only finitely many rational points. In fact they are $(0,\pm1)$, $(-1,0)$, $(2,\pm3)$, $(4,\pm 33)$ and the point at infinity.
1.3 Parametrise all rational points on $x^2 - 2y^2 = 1$ starting from $(1,0)$.
Line $y = t(x-1)$: substituting, $x^2 - 2t^2(x-1)^2 = 1$, i.e. $(x-1)\bigl[(x+1) - 2t^2(x-1)\bigr]=0$. The second factor gives $x(1-2t^2) = -1-2t^2$, so $$x = \frac{1+2t^2}{2t^2-1},\qquad y = t(x-1) = \frac{2t}{2t^2-1}.$$
Check $t=1$: $(3,2)$, and $9-2\cdot4=1$ ✓. This is a Pell conic; note the rational points are dense but the integer points form a group generated by $(3,2)$ — a genus-0 shadow of the Mordell–Weil phenomenon.
$$\mathbb{P}^n(K)=\bigl(K^{n+1}\setminus\{0\}\bigr)/\!\sim,\qquad (x_0,\dots,x_n)\sim(\lambda x_0,\dots,\lambda x_n),\ \lambda\in K^\times.$$ The class is written $[x_0:\cdots:x_n]$.
Geometrically a point of $\mathbb{P}^n$ is a line through the origin in $K^{n+1}$. The map $[X:Y:Z]\mapsto(X/Z,Y/Z)$ identifies $\{Z\ne0\}\subset\mathbb{P}^2$ with the affine plane; the complement $\{Z=0\}$ is a copy of $\mathbb{P}^1$, the line at infinity. Each direction of the affine plane acquires exactly one point at infinity, so parallel lines meet.
Given affine $f(x,y)=0$ of degree $d$, set $x=X/Z$, $y=Y/Z$ and multiply by $Z^d$: $$F(X,Y,Z)=Z^d f(X/Z,\,Y/Z).$$ $F$ is homogeneous of degree $d$, so $F=0$ is well defined on $\mathbb{P}^2$. Conversely, dehomogenise by setting $Z=1$.
$y^2 = x^3+Ax+B$ homogenises to $Y^2Z = X^3+AXZ^2+BZ^3$. Set $Z=0$: $X^3=0$, so $X=0$, and $Y\ne0$ (else all coordinates vanish, which is not a point). Scaling $Y=1$: $$\mathcal{O}=[0:1:0]$$ is the unique point at infinity.
Two projective plane curves of degrees $d$ and $e$ with no common component meet in exactly $de$ points of $\mathbb{P}^2(\overline K)$, counted with multiplicity.
For a line ($d=1$) and a cubic ($e=3$) this gives exactly three intersection points with multiplicity — the fact the group law needs. Multiplicity accounts for tangency (a tangent line meets with multiplicity $\ge2$) and inflection (multiplicity 3).
1.4 How many points does $\mathbb{P}^2(\mathbb{F}_q)$ have? And $\mathbb{P}^n(\mathbb{F}_q)$?
$\#\mathbb{P}^n(\mathbb{F}_q) = \frac{q^{n+1}-1}{q-1}=1+q+\cdots+q^n$: there are $q^{n+1}-1$ nonzero vectors and each projective point corresponds to $q-1$ of them.
For $n=2$: $q^2+q+1$. Decomposition check: the affine plane has $q^2$ points, the line at infinity $q+1$. ✓
1.5 Homogenise $y^2+y = x^3-x^2-10x-20$ and find all its points with $Z=0$.
Multiply by $Z^3$: $Y^2Z + YZ^2 = X^3 - X^2Z - 10XZ^2 - 20Z^3$. Setting $Z=0$ gives $0=X^3$, so $X=0$ and the only point is $[0:1:0]$.
General principle: for any Weierstrass equation, every term except $x^3$ has $x$-degree $\le2$, so after homogenisation every term except $X^3$ carries a factor of $Z$. Hence $Z=0\Rightarrow X=0$, and there is always exactly one point at infinity.
1.6 Show that the tangent to $y^2=x^3+Ax+B$ at a point with $y=0$ is vertical, and interpret this in the group law.
Implicit differentiation: $2y\,dy = (3x^2+A)\,dx$, so $dy/dx = (3x^2+A)/(2y)$, which is infinite when $y=0$ (and $3x^2+A\ne0$, guaranteed by smoothness). The tangent is therefore the vertical line $x=x_0$.
A vertical line meets $E$ at $(x_0,0)$ twice and at $\mathcal{O}$. So $2P = \mathcal{O}$: points with $y=0$ are exactly the points of order 2. This recovers $E[2]=\{\mathcal{O}\}\cup\{(e_i,0)\}$ with $e_i$ the roots of the cubic.
$P$ on the projective curve $F=0$ is singular if $\frac{\partial F}{\partial X}(P)=\frac{\partial F}{\partial Y}(P)=\frac{\partial F}{\partial Z}(P)=0$. The curve is smooth if it has no singular point over $\overline K$.
For $y^2=f(x)$ with $\operatorname{char}K\ne2$: $\partial/\partial y$ gives $2y=0$, $\partial/\partial x$ gives $f'(x)=0$, and the equation gives $y^2=f(x)$. So a singular point has $y=0$ and $f(x)=f'(x)=0$ — a repeated root of $f$.
For monic $f$ with roots $\alpha_1,\dots,\alpha_n$ in $\overline K$, $$\operatorname{disc}(f)=\prod_{i\lt j}(\alpha_i-\alpha_j)^2.$$ It lies in $K$ (symmetric in the roots) and vanishes iff $f$ has a repeated root. For $f = x^3+Ax+B$, $\operatorname{disc}(f) = -4A^3-27B^2$.
$$\Delta = -16\bigl(4A^3+27B^2\bigr) = 16\operatorname{disc}(x^3+Ax+B).$$ The curve is smooth iff $\Delta\ne0$. The factor $16$ (and its generalisation to the full Weierstrass form, Lesson 16) is fixed by requiring $\Delta$ to transform as $\Delta\mapsto u^{-12}\Delta$.
| Root pattern | Name | Model | Smooth points form |
|---|---|---|---|
| double root | node | $y^2=x^2(x+1)$ | $\overline K^\times$ or a norm-1 torus |
| triple root | cusp | $y^2=x^3$ | $\overline K^+$ (additive group) |
In both cases the smooth locus is a genus-0 curve and its rational points are parametrisable, so nothing arithmetic survives. For the cusp: $t\mapsto(t^{-2},t^{-3})$ parametrises $y^2=x^3$ minus the origin, and the group law becomes $t_1+t_2$. For the node $y^2=x^2(x+1)$: the two tangent directions at the origin have slopes $\pm1$, and $t\mapsto\bigl(t^2-1,\ t(t^2-1)\bigr)$ works, with the group law becoming $t_1t_2$.
They are excluded from the definition, but they reappear as reductions: $E/\mathbb{Q}$ reduced mod a prime $p\mid\Delta$ becomes singular over $\mathbb{F}_p$. Node versus cusp then becomes multiplicative versus additive reduction (Lesson 38), and the multiplicative/additive group structures above are exactly the local L-factors of Lesson 66.
? poldisc(x^3 - x)
% 4
? E = ellinit([0,0,0,-1,0]); E.disc
% 64 \\ = 16 * 4
? ellinit([0,0,0,0,0]) \\ y^2 = x^3, a cusp
% 0 \\ ellinit returns 0 for singular input
? ellinit([0,1,0,0,0]) \\ y^2 = x^3 + x^2, a node
% 0
1.7 For which $B\in\mathbb{Z}$ is $y^2=x^3+B$ singular? For which $(A,B)$ with $A,B\in\{-2,\dots,2\}$ is $y^2=x^3+Ax+B$ singular?
$\Delta=-16\cdot27B^2$, zero iff $B=0$. So only $y^2=x^3$, a cusp.
General: $\Delta=0\iff 4A^3+27B^2=0$. Over the given range: $(0,0)$; and we need $4A^3=-27B^2$, so $A\le0$. $A=-3$: outside range. Checking $A\in\{-2,-1\}$: $4(-8)=-32=-27B^2\Rightarrow B^2=32/27$, not an integer; $4(-1)=-4=-27B^2$, no. So only $(0,0)$.
? for(a=-2,2, for(b=-2,2, if(4*a^3+27*b^2==0, print([a,b]))))
[0, 0]
1.8 Verify that $t\mapsto(t^{-2},t^{-3})$ parametrises the smooth points of $y^2=x^3$, and check the group law becomes addition.
$(t^{-3})^2 = t^{-6} = (t^{-2})^3$ ✓, and every point with $x\ne0$ arises: given $(x,y)$ with $y^2=x^3$, $x\ne0$, put $t=x/y$; then $t^{-2}=y^2/x^2=x^3/x^2=x$ ✓ and $t^{-3}=y^3/x^3=y^3/y^2=y$ ✓.
Group law: three points $t_1,t_2,t_3$ are collinear iff $t_1+t_2+t_3=0$. Sketch: the line $y=\lambda x+\mu$ meets $y^2=x^3$ where $x^3-\lambda^2x^2-2\lambda\mu x-\mu^2=0$; in the $t$-coordinate, substituting $x=t^{-2},y=t^{-3}$ and clearing gives a cubic in $t$ whose coefficient comparison yields $\sum t_i = 0$. Hence the smooth locus is $(\overline K,+)$ — the additive group, whence "additive reduction".
We now derive the Weierstrass model rather than postulating it. This explains the strange indices and the weight system that recurs throughout.
An elliptic curve over $K$ is a pair $(E,\mathcal{O})$ where $E$ is a smooth projective geometrically irreducible curve of genus 1 over $K$ and $\mathcal{O}\in E(K)$.
Every elliptic curve $(E,\mathcal{O})/K$ is isomorphic over $K$ to a smooth plane cubic $$y^2+a_1xy+a_3y=x^3+a_2x^2+a_4x+a_6,\qquad a_i\in K,$$ with $\mathcal{O}$ mapping to $[0:1:0]$. Two such models for the same curve differ by a substitution $$x=u^2x'+r,\quad y=u^3y'+su^2x'+t,\qquad u\in K^\times,\ r,s,t\in K.$$
Apply Riemann–Roch with $g=1$, so $\deg K_E=0$ and in fact $K_E\sim0$. For $n\ge1$, $\ell(n(\mathcal{O}))=n$. Build a basis step by step:
Seven vectors in a 6-dimensional space are dependent: $$\alpha_1y^2+\alpha_2xy+\alpha_3y+\alpha_4x^3+\alpha_5x^2+\alpha_6x+\alpha_7=0.$$ Both $\alpha_1$ and $\alpha_4$ are nonzero: if $\alpha_1=0$ the remaining functions have pole orders $\le5$ except $x^3$, which then could not cancel; symmetrically for $\alpha_4$. Rescale $x\mapsto\alpha_1\alpha_4 x$, $y\mapsto\alpha_1\alpha_4^2y$ to make $\alpha_1=\alpha_4=1$ and rearrange. That is the Weierstrass equation.
Assign $\operatorname{wt}(x)=2$ and $\operatorname{wt}(y)=3$ — their pole orders. Then requiring every term to have weight 6 forces $\operatorname{wt}(a_i)=i$ with $i\in\{1,2,3,4,6\}$. There is no $a_5$ because a weight-5 monomial in $x,y$ alone would be $xy$, already accounted for by $a_1xy$ (weight $1+2+3=6$). Every formula in the theory respects these weights; it is the fastest way to check a formula for typos.
Uniqueness of the model up to $(u,r,s,t)$: the only freedom is a change of basis for $L(2(\mathcal{O}))$ and $L(3(\mathcal{O}))$ preserving the normalisations, i.e. $x\mapsto u^2x+r$ and $y\mapsto u^3y+su^2x+t$.
1.9 Show the map $E\to\mathbb{P}^2$, $P\mapsto[x(P):y(P):1]$ (and $\mathcal{O}\mapsto[0:1:0]$) is injective.
Suppose $x(P)=x(Q)$ and $y(P)=y(Q)$ with $P\ne Q$, both $\ne\mathcal{O}$. The function $x - x(P)$ lies in $L(2(\mathcal{O}))$ and vanishes at both $P$ and $Q$; it has a double pole, so its divisor is $(P)+(Q)-2(\mathcal{O})$ and thus $(P)+(Q)\sim2(\mathcal{O})$. Similarly $y-y(P)$ has divisor $(P)+(Q)+(R)-3(\mathcal{O})$ for some third point $R$. Subtracting, $(R)\sim(\mathcal{O})$, which for genus 1 forces $R=\mathcal{O}$ (if $(R)-(\mathcal{O})$ were principal, the corresponding function would give an isomorphism to $\mathbb{P}^1$). Then $y-y(P)$ has a pole of order 3 at $\mathcal{O}$ and zeros only at $P,Q,\mathcal{O}$ — a contradiction unless $P=Q$.
(Cleanest version: $x$ has degree 2 as a map $E\to\mathbb{P}^1$, so its fibres have two points; $y$ separates them because $y$ takes different values on $P$ and $-P$ unless both are 2-torsion.)
1.10 The curve $u^3+v^3=1$ has genus 1 and the rational point $(1,0)$. Find its Weierstrass model.
Standard substitution: $x = \dfrac{12}{u+v}$, $y = \dfrac{36(u-v)}{u+v}$ gives $y^2 = x^3 - 432$.
? E = ellinit([0,0,0,0,-432]);
? Em = ellminimalmodel(E); Em[1..5]
% [0, 0, 1, 0, -7]
? ellglobalred(Em)[1]
% 27
? elltors(Em)
% [3, [3], [[0, 0]]]
? ellrank(Em)[1..2]
% [0, 0]
Rank 0, torsion $\mathbb{Z}/3$: the only rational points on $u^3+v^3=1$ are $(1,0)$ and $(0,1)$, plus the point at infinity. That is Fermat for exponent 3.
A reference sheet you will return to constantly. From $a_1,\dots,a_6$ define:
$$b_2=a_1^2+4a_2,\qquad b_4=2a_4+a_1a_3,\qquad b_6=a_3^2+4a_6,$$ $$b_8=a_1^2a_6+4a_2a_6-a_1a_3a_4+a_2a_3^2-a_4^2,$$ $$c_4=b_2^2-24b_4,\qquad c_6=-b_2^3+36b_2b_4-216b_6,$$ $$\Delta=-b_2^2b_8-8b_4^3-27b_6^2+9b_2b_4b_6,\qquad j=\frac{c_4^3}{\Delta}.$$Two identities bind them: $$4b_8=b_2b_6-b_4^2,\qquad 1728\,\Delta=c_4^3-c_6^2.$$
Completing the square ($y\mapsto y-\tfrac12(a_1x+a_3)$) turns the equation into $y^2=4x^3+b_2x^2+2b_4x+b_6$ — that is what the $b_i$ record. Then completing the cube gives $y^2=x^3-27c_4x-54c_6$. So the $b_i$ are the "char $\ne2$" coefficients and the $c_i$ the "char $\ne2,3$" ones.
$\operatorname{wt}(b_i)=i$, $\operatorname{wt}(c_i)=i$, $\operatorname{wt}(\Delta)=12$, $\operatorname{wt}(j)=0$. Under $(u,r,s,t)$, $$u^4c_4'=c_4,\qquad u^6c_6'=c_6,\qquad u^{12}\Delta'=\Delta,\qquad j'=j.$$ So $c_4,c_6,\Delta$ depend on the chosen equation while $j$ does not.
$E_1\cong E_2$ over $\overline K$ $\iff$ $j(E_1)=j(E_2)$. Every $j_0\in\overline K$ occurs: for $\operatorname{char}K\ne2,3$ take $$j_0\ne0,1728:\ y^2=x^3-\frac{3j_0}{j_0-1728}x-\frac{2j_0}{j_0-1728};\qquad j_0=0:\ y^2=x^3+1;\qquad j_0=1728:\ y^2=x^3+x.$$
$j=0$: $y^2=x^3+B$, automorphism group of order 6 ($\operatorname{char}\ne2,3$), CM by $\mathbb{Z}[\zeta_3]$.
$j=1728$: $y^2=x^3+Ax$, automorphisms of order 4, CM by $\mathbb{Z}[i]$.
All other $j$: $\operatorname{Aut}(E)=\{\pm1\}$.
? E = ellinit([1,2,3,4,6]);
? [E.a1, E.a2, E.a3, E.a4, E.a6]
% [1, 2, 3, 4, 6]
? [E.b2, E.b4, E.b6, E.b8]
% [9, 11, 33, 44]
? [E.c4, E.c6]
% [-183, 4293]
? E.disc
% -22887
? E.j
% 6128487/22887
? 1728*E.disc == E.c4^3 - E.c6^2
% 1
? 4*E.b8 == E.b2*E.b6 - E.b4^2
% 1
1.11 Verify $1728\Delta=c_4^3-c_6^2$ symbolically for the short form $y^2=x^3+Ax+B$.
Here $a_1=a_2=a_3=0$, $a_4=A$, $a_6=B$, so $b_2=0$, $b_4=2A$, $b_6=4B$, $b_8=-A^2$. Then $$c_4=-24\cdot2A=-48A,\qquad c_6=-216\cdot4B=-864B,$$ $$\Delta=-8(2A)^3-27(4B)^2=-64A^3-432B^2=-16(4A^3+27B^2).$$ Now $c_4^3-c_6^2 = -48^3A^3-864^2B^2=-110592A^3-746496B^2 = -1728(64A^3+432B^2)=1728\Delta$. ✓
? A=a; B=b; E=ellinit([0,0,0,A,B]);
? 1728*E.disc - (E.c4^3 - E.c6^2)
% 0
1.12 Find a curve over $\mathbb{Q}$ with $j=-3375$ and identify it.
Using the formula with $j_0=-3375$: $j_0-1728=-5103$, so $A=-3j_0/(j_0-1728)=10125/5103=125/63$ and $B=-2j_0/(j_0-1728)=6750/5103\cdot(-1)\cdots$ — messy. Easier in PARI:
? E = ellinit(ellfromj(-3375));
? Em = ellminimalmodel(E); Em[1..5]
% [0, 0, 1, -38, 90]
? ellglobalred(Em)[1]
% 49
Conductor 49. $j=-3375=-15^3$ is one of the thirteen CM $j$-invariants over $\mathbb{Q}$ — this curve has complex multiplication by the order of discriminant $-7$, i.e. $\mathbb{Z}\!\left[\frac{1+\sqrt{-7}}{2}\right]$.
1.13 Show that if $E$ has $j=0$ in characteristic $\ne2,3$ then $c_4=0$, and conversely.
$j=c_4^3/\Delta$ and $\Delta\ne0$, so $j=0\iff c_4^3=0\iff c_4=0$. In short form $c_4=-48A$, so (char $\ne2,3$) $j=0\iff A=0\iff E:y^2=x^3+B$. ✓
Then $1728\Delta=-c_6^2$, so $c_6\ne0$ automatically.
The admissible substitutions are exactly $$x=u^2x'+r,\qquad y=u^3y'+su^2x'+t,\qquad u\in K^\times,\ r,s,t\in K.$$ Under these, the coefficients transform by (Silverman's Table 3.1): $$ua_1'=a_1+2s,\qquad u^2a_2'=a_2-sa_1+3r-s^2,$$ $$u^3a_3'=a_3+ra_1+2t,\qquad u^4a_4'=a_4-sa_3+2ra_2-(t+rs)a_1+3r^2-2st,$$ $$u^6a_6'=a_6+ra_4+r^2a_2+r^3-ta_3-t^2-rta_1.$$
This is why every serious implementation stores $[a_1,a_2,a_3,a_4,a_6]$ rather than $(A,B)$, and why ellinit takes five coefficients.
Among all integral Weierstrass equations for $E/\mathbb{Q}$, one with $|\Delta|$ minimal. Over $\mathbb{Q}$ it exists and is unique up to $(u,r,s,t)$ with $u=\pm1$ and $r,s,t\in\mathbb{Z}$. Since $\Delta\mapsto u^{-12}\Delta$, minimising means finding the largest $u\in\mathbb{Z}$ with $u^{12}\mid\Delta$ (compatibly at each prime) and applying the corresponding substitution.
Kraus's criterion decides, prime by prime, whether a given $(c_4,c_6)$ pair comes from an integral model — that is the basis of Laska's and Tate's minimalisation algorithms.
? E = ellinit([0, 0, 0, -16*27*1^4, 0]); \\ deliberately non-minimal
? E.disc
% 1719926784
? Em = ellminimalmodel(E, &v);
? Em.disc
% 1024
? v \\ the change of variables [u,r,s,t]
% [6, 0, 0, 0]
? ellchangecurve(E, v) == Em
% 1
? \\ move a point across:
? ellchangepoint([12, 36], v)
Note $6^{12}\cdot1024 = 1719926784$ ✓. Always keep v: points computed on one model must be transported with ellchangepoint.
1.14 Put $y^2+y=x^3-x^2-10x-20$ into short form over $\mathbb{Q}$ and compare coefficient sizes.
? E = ellinit([0,-1,1,-10,-20]);
? [E.c4, E.c6]
% [496, 20008]
? A = -E.c4/48; B = -E.c6/864;
? [A, B]
% [-31/3, -2501/108]
? Es = ellinit([A,B]); Es.j == E.j
% 1
Short form is $y^2=x^3-\frac{31}{3}x-\frac{2501}{108}$: denominators appear. Scaling by $u=1/6$ to clear them gives $y^2=x^3-13392x-1080432$, with $\Delta = 6^{12}\cdot(-11^5)$. The original model has $\Delta=-11^5$ and tiny coefficients. Moral: the minimal model is generally not in short form; insisting on short form can inflate coefficients enormously.
1.15 Show the substitution with $u=1$, $r=0$, $s=-a_1/2$, $t=-a_3/2$ really eliminates $a_1$ and $a_3$, using the transformation table.
$ua_1'=a_1+2s = a_1+2(-a_1/2)=0$ ✓.
$u^3a_3'=a_3+ra_1+2t = a_3+0+2(-a_3/2)=0$ ✓.
And $u^2a_2' = a_2 - sa_1 + 0 - s^2 = a_2 + \frac{a_1^2}{2} - \frac{a_1^2}{4} = a_2+\frac{a_1^2}{4} = \frac{b_2}{4}$, matching the claim. Note both steps divided by 2, hence the characteristic restriction.
1.16 Over $\mathbb{F}_2$, list all curves in the form $y^2+xy=x^3+a_2x^2+a_6$ and compute their point counts.
$a_2,a_6\in\{0,1\}$ and we need $\Delta\ne0$; for this family $\Delta=a_6$, so $a_6=1$. Two curves: $(a_2,a_6)=(0,1)$ and $(1,1)$.
? E1 = ellinit([1,0,0,0,1], 2); ellcard(E1)
% 4
? E2 = ellinit([1,1,0,0,1], 2); ellcard(E2)
% 2
Hasse: $|a_2|\le2\sqrt2\approx2.83$, so $\#E\in\{1,\dots,5\}$; we get $4$ and $2$, i.e. $a_2=-1$ and $a_2=1$. Both are ordinary ($a_2$ odd, so $a_2\ne0$), consistent with $j=1/a_6\ne0$.
$E_1\cong E_2$ over $K$ if there is a change of variables $(u,r,s,t)$ with entries in $K$ carrying one Weierstrass equation to the other. Equivalently, an isomorphism of curves taking $\mathcal{O}_1$ to $\mathcal{O}_2$ (which is automatically a group isomorphism).
In short form, char $\ne2,3$: $r=s=t=0$ is forced (they would reintroduce $a_1,a_2,a_3$), leaving only $u$, and $$(A,B)\longmapsto(u^{-4}A,\ u^{-6}B).$$
$\operatorname{Aut}(E)$ is the group of isomorphisms $E\to E$ fixing $\mathcal{O}$. For char $\ne2,3$: $$\#\operatorname{Aut}(E)=\begin{cases}2 & j\ne0,1728 \quad (u=\pm1),\\ 4 & j=1728 \quad (u^4=1),\\ 6 & j=0\quad (u^6=1).\end{cases}$$ In char 2 or 3 with $j=0$ the group can have order 12 or 24.
$E'$ is a twist of $E$ over $K$ if $E'\cong E$ over $\overline K$ but not necessarily over $K$. Twists are classified by $H^1\bigl(G_K,\operatorname{Aut}(E)\bigr)$ (Galois cohomology, Lesson 55).
For $d\in K^\times$ and $E:y^2=x^3+Ax+B$, the quadratic twist is $$E^{(d)}:\ y^2=x^3+d^2Ax+d^3B,$$ equivalently the curve $dy^2=x^3+Ax+B$ after the substitution $(x,y)\mapsto(x/d,y/d^{3/2})$. $E^{(d)}\cong E$ over $K(\sqrt d)$ via $u=\sqrt d$, and $j(E^{(d)})=j(E)$.
$E^{(d)}\cong E^{(d')}$ over $K$ iff $d/d'\in(K^\times)^2$, so quadratic twists are parametrised by $K^\times/(K^\times)^2$.
$$\operatorname{rank}E\bigl(\mathbb{Q}(\sqrt d)\bigr)=\operatorname{rank}E(\mathbb{Q})+\operatorname{rank}E^{(d)}(\mathbb{Q}).$$ Proof idea: $\operatorname{Gal}(\mathbb{Q}(\sqrt d)/\mathbb{Q})$ acts on $E(\mathbb{Q}(\sqrt d))\otimes\mathbb{Q}$; the $+1$ eigenspace is $E(\mathbb{Q})\otimes\mathbb{Q}$ and the $-1$ eigenspace is $E^{(d)}(\mathbb{Q})\otimes\mathbb{Q}$.
Also $a_p(E^{(d)})=\left(\frac{d}{p}\right)a_p(E)$ for $p\nmid 2d\Delta$, so twisting flips signs of the $a_p$ at half the primes — the mechanism behind twist families as a rank laboratory.
$j=1728$, $E:y^2=x^3+Ax$: quartic twists $y^2=x^3+d\,Ax$, $d\in K^\times/(K^\times)^4$.
$j=0$, $E:y^2=x^3+B$: sextic twists $y^2=x^3+d\,B$, $d\in K^\times/(K^\times)^6$. Congruent-number curves $y^2=x^3-n^2x$ are quartic-twist relatives of $y^2=x^3-x$.
? E = ellinit([0,0,0,-1,0]); \\ y^2 = x^3 - x
? Ed = ellinit(elltwist(E, 5)); \\ twist by 5
? Ed[1..5]
? ellrank(E)[1..2]
% [0, 0]
? ellrank(Ed)[1..2]
% [1, 1]
? \\ so rank E(Q(sqrt 5)) = 0 + 1 = 1
? for(p=7,50, if(isprime(p), print(p," ",ellap(E,p)," ",ellap(Ed,p)," ",kronecker(5,p))))
You should see $a_p(E_d)=\left(\frac5p\right)a_p(E)$ at every good $p$.
1.17 Show $y^2=x^3-x$ and $y^2=x^3-4x$ are isomorphic over $\mathbb{Q}$, but $y^2=x^3-x$ and $y^2=x^3-2x$ are not.
Need $u$ with $u^{-4}(-1)=-4$, i.e. $u^4=1/4$, $u=1/\sqrt2$ — not rational. Try the other direction: $(A,B)=(-1,0)\to(-4,0)$ needs $u^{-4}=4$; $u^4 = 1/4$. Hmm, so not via $u$ alone. But $y^2=x^3-4x$ is the quadratic twist of $y^2=x^3-x$ by $d=2$ ($d^2A = 4\cdot(-1)=-4$) — and it is also the quartic twist by 4, and $4=2^2$ is a square in the quartic-twist parameter space? Let us just check numerically:
? E1=ellinit([0,0,0,-1,0]); E2=ellinit([0,0,0,-4,0]); E3=ellinit([0,0,0,-2,0]);
? [E1.j, E2.j, E3.j]
% [1728, 1728, 1728]
? ellisomat(E1)[1] \\ isogeny class
? ellglobalred(E1)[1], ellglobalred(E2)[1], ellglobalred(E3)[1]
% 32, 64, 256
Different conductors, so none of the three is $\mathbb{Q}$-isomorphic to another. All share $j=1728$, so all are quartic twists of one another over $\overline{\mathbb{Q}}$. The lesson: equal $j$ is necessary but far from sufficient over $\mathbb{Q}$; the conductor separates twists cheaply.
1.18 Use the rank-splitting formula and PARI to find $\operatorname{rank}E(\mathbb{Q}(\sqrt{-1}))$ for $E: y^2=x^3-x$.
? E = ellinit([0,0,0,-1,0]); ellrank(E)[1..2]
% [0, 0]
? Ed = ellinit(elltwist(E,-1)); Ed[1..5]
? ellrank(Ed)[1..2]
% [0, 0]
Both ranks are 0, so $\operatorname{rank}E(\mathbb{Q}(i))=0$. Note $E^{(-1)}: y^2=x^3-x$ again up to isomorphism — the curve is its own $(-1)$-twist because it has CM by $\mathbb{Z}[i]$ and $i$ acts as an automorphism. So the rank over $\mathbb{Q}(i)$ is twice the rank over $\mathbb{Q}$, which is 0.
1.19 Verify $a_p(E^{(d)})=\left(\frac dp\right)a_p(E)$ directly from the character-sum formula.
$a_p(E) = -\sum_{x\in\mathbb{F}_p}\chi(x^3+Ax+B)$ with $\chi$ the quadratic character. For $E^{(d)}$ in the form $dy^2=x^3+Ax+B$ (isomorphic over $\mathbb{F}_p$ to the standard twist model), $$\#E^{(d)}(\mathbb{F}_p)=1+\sum_x\Bigl(1+\chi\bigl(d\,(x^3+Ax+B)\bigr)\Bigr) = p+1+\chi(d)\sum_x\chi(x^3+Ax+B),$$ using multiplicativity $\chi(du)=\chi(d)\chi(u)$. Hence $a_p(E^{(d)}) = -\chi(d)\sum_x\chi(f(x)) = \chi(d)a_p(E) = \left(\frac dp\right)a_p(E)$. ✓
For $P,Q\in E$, let $\ell$ be the line through $P$ and $Q$ (the tangent at $P$ if $P=Q$). By Bézout, $\ell$ meets $E$ in a third point $R$ (with multiplicity). Define $P*Q=R$. Then $$P+Q := (P*Q)*\mathcal{O},$$ the third intersection of the line through $R$ and $\mathcal{O}$.
Since $\mathcal{O}=[0:1:0]$ lies on every vertical line, $(x,y)*\mathcal{O} = (x,-y-a_1x-a_3)$, which in short form is just $(x,-y)$: reflection in the $x$-axis. So $P+Q$ is "third intersection, then reflect".
With identity $\mathcal{O}$, inverse $-P=P*\mathcal{O}$, and $P+Q+R=\mathcal{O}$ exactly when $P,Q,R$ are collinear.
Define $\sigma:E\to\operatorname{Pic}^0(E)$ by $\sigma(P)=\bigl[(P)-(\mathcal{O})\bigr]$.
$\sigma$ is injective: if $(P)-(\mathcal{O})\sim(Q)-(\mathcal{O})$ then $(P)\sim(Q)$; a function with divisor $(P)-(Q)$ and $P\ne Q$ would be a degree-1 map $E\to\mathbb{P}^1$, i.e. an isomorphism, contradicting $g=1$.
$\sigma$ is surjective: given $D$ of degree 0, $\ell(D+(\mathcal{O}))=1$ by Riemann–Roch, so there is $f$ with $\operatorname{div}(f)\ge-D-(\mathcal{O})$; the divisor $\operatorname{div}(f)+D+(\mathcal{O})$ is effective of degree 1, hence equals $(P)$ for a unique $P$, and $D\sim(P)-(\mathcal{O})$.
$\sigma$ is a homomorphism: if $P,Q,R$ are collinear on the line $\ell=0$, then $\operatorname{div}(\ell/Z)=(P)+(Q)+(R)-3(\mathcal{O})$ (recall $Z=0$ meets $E$ thrice at $\mathcal{O}$). So $(P)+(Q)+(R)\sim3(\mathcal{O})$, i.e. $\sigma(P)+\sigma(Q)+\sigma(R)=0$, which matches $P+Q+R=\mathcal{O}$.
Therefore $+$ is transported from $\operatorname{Pic}^0(E)$, where associativity is inherited from addition of divisors. Done.
1.20 Show directly that $\operatorname{div}(\ell/Z) = (P)+(Q)+(R)-3(\mathcal{O})$ for a line $\ell$ meeting $E$ at $P,Q,R$.
$\ell/Z$ is a ratio of two linear forms, hence a rational function on $E$ of degree 0 as a divisor. Its zeros are where $\ell=0$ on $E$, which by Bézout is $(P)+(Q)+(R)$ with multiplicity. Its poles are where $Z=0$ on $E$, which is $3(\mathcal{O})$ because the line at infinity meets $E$ with multiplicity 3 at $\mathcal{O}$ (recall $\mathcal{O}$ is an inflection point).
Hence $\operatorname{div}(\ell/Z)=(P)+(Q)+(R)-3(\mathcal{O})$, and since it is principal, $(P)+(Q)+(R)\sim3(\mathcal{O})$. ✓
1.21 On $y^2=x^3-2$, compute $P+Q$ for $P=(3,5)$, $Q=(3,-5)$, and then $2P$, by hand and in PARI.
$Q=-P$, so $P+Q=\mathcal{O}$.
$2P$: $\lambda=\frac{3\cdot9+0}{2\cdot5}=\frac{27}{10}$. $x_3=\lambda^2-2x_1=\frac{729}{100}-6=\frac{129}{100}$. $y_3=\lambda(x_1-x_3)-y_1=\frac{27}{10}\left(3-\frac{129}{100}\right)-5=\frac{27}{10}\cdot\frac{171}{100}-5=\frac{4617}{1000}-5=-\frac{383}{1000}$.
? E = ellinit([0,0,0,0,-2]);
? elladd(E,[3,5],[3,-5])
% [0] \\ the point at infinity
? ellmul(E,[3,5],2)
% [129/100, -383/1000]
Note the denominators: $x$ has denominator $10^2$, $y$ has $10^3$ — the weight-2/weight-3 pattern again, and the source of the height growth law $h(2P)\approx4h(P)$.
Let $E: y^2+a_1xy+a_3y=x^3+a_2x^2+a_4x+a_6$, $P_1=(x_1,y_1)$, $P_2=(x_2,y_2)$.
Negation: $-P_1=(x_1,\ -y_1-a_1x_1-a_3)$.
If $x_1=x_2$ and $y_1+y_2+a_1x_2+a_3=0$: $P_1+P_2=\mathcal{O}$.
Otherwise set $$\lambda=\begin{cases}\dfrac{y_2-y_1}{x_2-x_1}, & x_1\ne x_2,\\[10pt] \dfrac{3x_1^2+2a_2x_1+a_4-a_1y_1}{2y_1+a_1x_1+a_3}, & x_1=x_2,\end{cases}\qquad \nu=y_1-\lambda x_1,$$ then $$x_3=\lambda^2+a_1\lambda-a_2-x_1-x_2,\qquad y_3=-(\lambda+a_1)x_3-\nu-a_3.$$
Derivation. Substitute $y=\lambda x+\nu$ into the equation. The result is a monic cubic in $x$ whose roots are $x_1,x_2,x_3'$; comparing the $x^2$ coefficient gives $x_1+x_2+x_3'=\lambda^2+a_1\lambda-a_2$. Then reflect: $x_3=x_3'$ and $y_3 = -(\lambda x_3+\nu)-a_1x_3-a_3$.
Affine addition needs one field inversion, which over $\mathbb{F}_p$ costs roughly 10–100 multiplications. Projective and Jacobian coordinates avoid inversions by carrying a denominator.
Represent $(x,y)$ as $(X:Y:Z)$ with $x=X/Z^2$, $y=Y/Z^3$ — the weights again. For $y^2=x^3+Ax+B$ the doubling formulas become $$S=4XY^2,\quad M=3X^2+AZ^4,\quad X'=M^2-2S,\quad Y'=M(S-X')-8Y^4,\quad Z'=2YZ,$$ with no division at all.
Write $x(P)=a/d^2$, $y(P)=b/d^3$ in lowest terms — always possible, by the weights. Then the doubling formula gives $d(2P)$ of size roughly $d(P)^2$, so $$h(2P)\approx4h(P).$$ This is not incidental: it is the exact statement that the height is a quadratic form up to $O(1)$, and it is what makes the canonical height (Lesson 47) exist. Practically, it is why generators of high-rank curves have hundreds of digits: they sit high in a lattice whose points grow quartically.
? E = ellinit([0,0,0,0,-2]); P = [3,5];
? for(n=1,6, my(Q=ellmul(E,P,2^n)); print(2^n, " ", sizedigit(numerator(Q[1]))))
2 3
4 9
8 33
16 129
32 513
64 2049
Digits roughly quadruple each doubling: $3,9,33,129,513,2049$ — each is about $4\times$ the previous. Exactly $h(2P)\approx4h(P)$.
1.22 Derive $x_3=\lambda^2-x_1-x_2$ for short Weierstrass form from Vieta's formulas.
Substituting $y=\lambda x+\nu$ into $y^2=x^3+Ax+B$: $$x^3 - \lambda^2x^2 + (A-2\lambda\nu)x + (B-\nu^2)=0.$$ This monic cubic has roots $x_1,x_2,x_3'$. Vieta: the sum of the roots equals minus the coefficient of $x^2$, i.e. $x_1+x_2+x_3'=\lambda^2$. So $x_3'=\lambda^2-x_1-x_2$, and reflection preserves $x$. ✓
1.23 Implement the general addition law in GP without using elladd, and verify against PARI on a curve with $a_1,a_3\ne0$.
myadd(E, P, Q) =
{ my(a1=E.a1, a2=E.a2, a3=E.a3, a4=E.a4, lam, nu, x3, y3);
if(P == [0], return(Q));
if(Q == [0], return(P));
my(x1=P[1], y1=P[2], x2=Q[1], y2=Q[2]);
if(x1 == x2 && y1 + y2 + a1*x2 + a3 == 0, return([0]));
lam = if(x1 != x2,
(y2-y1)/(x2-x1),
(3*x1^2 + 2*a2*x1 + a4 - a1*y1)/(2*y1 + a1*x1 + a3));
nu = y1 - lam*x1;
x3 = lam^2 + a1*lam - a2 - x1 - x2;
y3 = -(lam + a1)*x3 - nu - a3;
[x3, y3];
}
? E = ellinit([1,2,3,4,6]);
? P = ellratpoints(E, 20)[1]; Q = ellratpoints(E,20)[2];
? myadd(E,P,Q) == elladd(E,P,Q)
% 1
? myadd(E,P,P) == ellmul(E,P,2)
% 1
1.24 On $E:y^2=x^3+17$, the point $P=(-2,3)$ has infinite order. Compute $\hat h(P)$ and $\hat h(2P)$ in PARI and confirm the ratio is 4.
? E = ellinit([0,0,0,0,17]); P = [-2,3];
? ellisoncurve(E,P)
% 1
? h1 = ellheight(E,P)
% 0.4413...
? h2 = ellheight(E, ellmul(E,P,2))
% 1.7652...
? h2/h1
% 4.0000000000000000000
Exactly 4, to full precision — because $\hat h$ is an exact quadratic form, unlike the naive height $h$ where the relation holds only up to $O(1)$. This exactness is the whole point of the canonical height and is what makes the regulator determinant test valid.
$[m]:E\to E$, $P\mapsto \underbrace{P+\cdots+P}_{m}$ for $m\gt0$, $[0]P=\mathcal{O}$, $[-m]P=-[m]P$. It is a morphism of curves and a group homomorphism.
Define $\psi_m\in\mathbb{Z}[a_1,\dots,a_6][x,y]$ by $$\psi_0=0,\quad \psi_1=1,\quad \psi_2=2y+a_1x+a_3,$$ $$\psi_3=3x^4+b_2x^3+3b_4x^2+3b_6x+b_8,$$ $$\psi_4=\psi_2\cdot\bigl(2x^6+b_2x^5+5b_4x^4+10b_6x^3+10b_8x^2+(b_2b_8-b_4b_6)x+(b_4b_8-b_6^2)\bigr),$$ and recursively $$\psi_{2m+1}=\psi_{m+2}\psi_m^3-\psi_{m-1}\psi_{m+1}^3,\qquad \psi_2\psi_{2m}=\psi_m\bigl(\psi_{m+2}\psi_{m-1}^2-\psi_{m-2}\psi_{m+1}^2\bigr).$$
Property (2) again shows the weights: numerator and denominator of $x\circ[m]$ have degrees $m^2$ and $m^2-1$; for $y$ the exponent is 3 rather than 2. Property (4) gives $\#E[m]=m^2$ when $\gcd(m,\operatorname{char}K)=1$, since $[m]$ is then separable.
? E = ellinit([0,0,0,-1,0]); \\ y^2 = x^3 - x
? elldivpol(E, 2)
% 4*x^3 - 4*x
? elldivpol(E, 3)
% 3*x^4 - 6*x^2 - 1
? polrootsQ(elldivpol(E,3)) \\ rational 3-torsion x-coords
% [] \\ none
? factor(elldivpol(E,2))
% [x,1; x-1,1; x+1,1] * 4 \\ 2-torsion at x = 0, 1, -1
? \\ degrees:
? for(m=2,7, print(m, " ", poldegree(elldivpol(E,m))))
Note elldivpol(E,2) returns $\psi_2^2 = 4x^3+b_2x^2+2b_4x+b_6$ (the "$x$-only" version), which is PARI's convention.
elltors.1.25 Compute $\psi_3$ for $y^2=x^3+Ax+B$ from the definition and check its degree.
Here $b_2=0$, $b_4=2A$, $b_6=4B$, $b_8=-A^2$, so $$\psi_3=3x^4+0+3(2A)x^2+3(4B)x+(-A^2)=3x^4+6Ax^2+12Bx-A^2.$$ Degree $4=(3^2-1)/2$ ✓.
Sanity check: $P$ has order 3 iff $2P=-P$ iff $x(2P)=x(P)$. From $x(2P)=\frac{x^4-2Ax^2-8Bx+A^2}{4(x^3+Ax+B)}$, setting equal to $x$ and clearing gives $3x^4+6Ax^2+12Bx-A^2=0$. ✓
1.26 Find all rational 3-torsion on $y^2=x^3+1$.
$A=0,B=1$: $\psi_3=3x^4+12x = 3x(x^3+4)$. Rational roots: $x=0$ (and $x^3=-4$ has no rational root). At $x=0$: $y^2=1$, so $y=\pm1$.
? E = ellinit([0,0,0,0,1]);
? elltors(E)
% [6, [6], [[2, 3]]]
? ellorder(E,[0,1])
% 3
? ellmul(E,[0,1],3)
% [0]
So $(0,\pm1)$ have order 3. In fact the full torsion is $\mathbb{Z}/6\mathbb{Z}$, generated by $(2,3)$; the 2-torsion point is $(-1,0)$.
1.27 Verify $\deg[2]=4$ by counting preimages of a generic point on $y^2=x^3-x$ over $\overline{\mathbb{Q}}$.
$x([2]P)=\frac{x^4+2x^2+1}{4(x^3-x)}=\frac{(x^2+1)^2}{4x(x^2-1)}$. Setting this equal to a generic value $c$ gives $(x^2+1)^2 = 4cx(x^2-1)$, a quartic in $x$ with 4 roots for generic $c$. Each $x$ gives one point once $y$ is pinned by the requirement $[2]P$ has the right $y$. So $\#[2]^{-1}(\text{point}) = 4 = \deg[2]$ ✓. Equivalently $\#\ker[2]=\#E[2]=4$.
Before any theory of heights, it is worth developing intuition by hand-searching.
For $x=a/b\in\mathbb{Q}$ in lowest terms, $H(x)=\max(|a|,|b|)$ and $h(x)=\log H(x)$. For $P\in E(\mathbb{Q})$, $h(P)=h(x(P))$ and $h(\mathcal{O})=0$.
$\{P\in E(\mathbb{Q}) : h(P)\le B\}$ is finite for every $B$. Reason: there are at most $(2B'+1)^2$ rationals $a/b$ with $\max(|a|,|b|)\le B'=e^B$, and each gives at most 2 points.
This finiteness is the reason a naive search terminates, and — combined with $h(2P)\approx4h(P)$ — the reason the descent argument in Lesson 52 proves finite generation.
By the weight structure, a rational point has $x=a/d^2$, $y=b/d^3$ with $\gcd(a,d)=\gcd(b,d)=1$. So enumerate $d$ from 1 upward, and for each $d$ enumerate $a$ with $|a|\le Bd^2$, testing whether $d^6 f(a/d^2)$ is a perfect square. Stoll's ratpoints adds a sieve: for many small primes $q$, precompute which residues $a\bmod q$ can possibly make $f$ a square, and reject the rest before doing any big-integer work. That sieve is what makes the difference between $10^6$ and $10^{11}$ candidates per second.
? E = ellinit([0,0,0,-7,6]);
? ellratpoints(E, 10) \\ naive height bound 10
% [[-3,0],[-2,3],[-1,3],[0,-3],[1,0],[2,0],[3,-3],[6,-12],...]
? \\ how far can we get?
? #ellratpoints(E, 100)
? \\ time it:
? # ; ellratpoints(E, 1000); ##
Cost grows like $B^{3/2}$ in the height bound (you enumerate $d\le\sqrt B$ and $a\le Bd^2$ roughly). In practice ratpoints reaches naive height around $10^{14}$–$10^{18}$, i.e. $h\approx35$–$40$. Generators of rank-record curves have $\hat h$ in the hundreds. That gap is why 4-descent (Lesson 63) exists.
If $\Delta\gt0$ the cubic has three real roots $e_1\lt e_2\lt e_3$ and $E(\mathbb{R})$ has two components: the "egg" over $[e_1,e_2]$ and the unbounded branch over $[e_3,\infty)$. A search that only walks $x$ upward from $e_3$ will miss every point on the egg. ratpoints and ellratpoints handle both intervals; a hand-rolled search must too.
1.28 Find by hand all points with $|x|\le5$, $x\in\mathbb{Z}$, on $y^2=x^3-2$, and identify the group they generate.
Test $x=-1,\dots,5$: $x^3-2$ gives $-3,-2,-1,6,25,62,123$. Only $25$ is a square, at $x=3$. So $(3,\pm5)$.
? E = ellinit([0,0,0,0,-2]);
? ellrank(E)
% [1, 1, 0, [[3, 5]]]
? elltors(E)
% [1, [], []]
Rank 1, trivial torsion, so $E(\mathbb{Q})\cong\mathbb{Z}$ generated by $(3,5)$. This is Fermat's claim that $y^2=x^3-2$ has only the integer solutions $(3,\pm5)$ — true for integers, though there are infinitely many rational points.
1.29 On $E:y^2=x^3-7x+6$ (rank 3), find the three generators by search and verify their heights.
? E = ellinit([0,0,0,-7,6]);
? ellrank(E)
% [3, 3, 0, [[-3,0],[-2,3],[-1,3]]]
? M = ellheightmatrix(E, [[-3,0],[-2,3],[-1,3]]);
? matdet(M)
% 0.4171...
? matdet(M) != 0
% 1
Nonzero determinant proves independence, so rank $\ge3$; PARI's descent gives upper bound 3, so rank $=3$ exactly. Note that all three generators have tiny coordinates — this is a "small" rank-3 curve. Contrast with the rank-30 record, whose generators have hundreds of digits.
1.30 Write a GP loop that finds all rational points on $y^2=x^3+1$ with $x=a/d^2$, $d\le3$, $|a|\le20$.
{ for(d=1,3,
for(a=-20,20,
if(gcd(a,d)==1,
my(x = a/d^2, t = x^3+1, n = numerator(t), m = denominator(t));
if(issquare(t), print([x, sqrtint(numerator(t*m^2))/m])))));
}
You should find $x=-1,0,2$ (with $d=1$) — giving $(-1,0)$, $(0,\pm1)$, $(2,\pm3)$ — and nothing new for $d=2,3$. Since elltors(E) gives $\mathbb{Z}/6$ and ellrank(E) gives 0, these six points plus $\mathcal{O}$ are all the rational points on $y^2=x^3+1$.
A lattice $\Lambda\subset\mathbb{C}$ is a discrete subgroup of rank 2: $$\Lambda=\mathbb{Z}\omega_1+\mathbb{Z}\omega_2,\qquad \omega_1,\omega_2\in\mathbb{C}^\times,\ \ \tau:=\omega_1/\omega_2\notin\mathbb{R}.$$ We normalise so $\operatorname{Im}\tau\gt0$. The quotient $\mathbb{C}/\Lambda$ is a compact Riemann surface of genus 1 — a torus.
A meromorphic $f$ on $\mathbb{C}$ with $f(z+\omega)=f(z)$ for all $\omega\in\Lambda$. Equivalently, a meromorphic function on $\mathbb{C}/\Lambda$.
Three quick facts, all from contour integration around a fundamental parallelogram: a holomorphic elliptic function is constant; the sum of residues in a fundamental domain is 0 (so there is no elliptic function with a single simple pole); and the number of zeros equals the number of poles, counted with multiplicity.
For $k\ge3$, $\displaystyle G_k(\Lambda)=\sum_{\omega\in\Lambda\setminus\{0\}}\omega^{-k}$ (zero for odd $k$, by $\omega\mapsto-\omega$). The Weierstrass $\wp$ function is $$\wp(z;\Lambda)=\frac{1}{z^2}+\sum_{\omega\in\Lambda\setminus\{0\}}\left(\frac{1}{(z-\omega)^2}-\frac{1}{\omega^2}\right).$$ It converges absolutely and locally uniformly off $\Lambda$, is even, elliptic, and has a double pole at each lattice point and no other poles.
Its Laurent expansion at 0 is $$\wp(z)=\frac{1}{z^2}+\sum_{k\ge1}(2k+1)G_{2k+2}\,z^{2k},$$ and differentiating, $\wp'(z)=-2\sum_{\omega\in\Lambda}(z-\omega)^{-3}$, odd with triple poles.
$$\wp'(z)^2=4\wp(z)^3-g_2\wp(z)-g_3,\qquad g_2=60G_4,\quad g_3=140G_6.$$
Proof sketch. Expand both sides at $z=0$; the difference is an elliptic function that is holomorphic (all poles cancel by construction) and vanishes at $0$, hence identically zero.
$\wp$ has a double pole and $\wp'$ a triple pole — exactly the roles of $x$ and $y$. The differential equation is a Weierstrass equation. This is Riemann–Roch (Lesson 12) done analytically: $L(2(0))$ is spanned by $1,\wp$; $L(3(0))$ by $1,\wp,\wp'$; and the seven functions $1,\wp,\wp',\wp^2,\wp\wp',\wp^3,\wp'^2$ in the 6-dimensional $L(6(0))$ must satisfy a relation.
\\ PARI: periods from a curve
? E = ellinit([0,0,0,-1,0]);
? E.omega
% [5.2441..., 2.6220... + 2.6220...*I]
? ellwp(E, 0.3) \\ evaluate wp at z=0.3 for this lattice
? ellwp(E, 0.3, 1) \\ [wp(z), wp'(z)]
(* Mathematica *)
WeierstrassP[0.3, {g2, g3}]
WeierstrassInvariants[{w1, w2}] (* -> {g2, g3} *)
WeierstrassHalfPeriods[{g2, g3}] (* -> {w1/2, w2/2} *)
This is the one corner of elliptic curve theory Mathematica supports natively — because it is complex analysis, not arithmetic.
2.1 Prove that a holomorphic elliptic function is constant.
A fundamental parallelogram $D=\{a+s\omega_1+t\omega_2: s,t\in[0,1]\}$ is compact, so $|f|$ attains a maximum on $D$. By periodicity that is the maximum on all of $\mathbb{C}$. A bounded entire function is constant, by Liouville. ∎
This is why elliptic functions must have poles, and why the simplest one has a double pole: a single simple pole is forbidden because residues must sum to zero.
2.2 Show $\wp$ is elliptic. (The naive term-by-term argument fails — why, and how is it fixed?)
$\wp'$ is manifestly elliptic: $\wp'(z+\omega)=-2\sum_{\mu\in\Lambda}(z+\omega-\mu)^{-3}=\wp'(z)$ by reindexing $\mu\mapsto\mu+\omega$ (the sum converges absolutely, so reindexing is legal).
For $\wp$ itself, term-by-term reindexing fails because the $-1/\omega^2$ corrections do not shift correspondingly. Instead: $\wp(z+\omega_i)-\wp(z)$ has zero derivative, so it is a constant $c_i$. Put $z=-\omega_i/2$ and use that $\wp$ is even: $c_i=\wp(\omega_i/2)-\wp(-\omega_i/2)=0$. Hence $\wp(z+\omega_i)=\wp(z)$ for $i=1,2$, and by additivity for all of $\Lambda$. ∎
2.3 Compute $g_2,g_3,\Delta$ for the square lattice $\Lambda=\mathbb{Z}+\mathbb{Z}i$ and identify the curve.
For $\Lambda=\mathbb{Z}+\mathbb{Z}i$, multiplying by $i$ preserves $\Lambda$, so $G_6(\Lambda)=\sum\omega^{-6}=\sum(i\omega)^{-6}=i^{-6}G_6=-G_6$, forcing $G_6=0$ and hence $g_3=0$.
So the curve is $y^2=4x^3-g_2x$, i.e. $j=1728$. Numerically $g_2\approx189.0728$.
? E = ellinit([0,0,0,-1,0]); E.j
% 1728
? \\ conversely, from the lattice:
? ellwp(ellinit(ellfromj(1728)), 0.1)
$g_3=0$ is exactly the statement that the curve has CM by $\mathbb{Z}[i]$: the automorphism $z\mapsto iz$ of $\mathbb{C}/\Lambda$ becomes $(x,y)\mapsto(-x,iy)$ on the curve.
(a) For a lattice $\Lambda$, the map $$\Phi:\mathbb{C}/\Lambda\to E_\Lambda(\mathbb{C})\subset\mathbb{P}^2,\qquad z\mapsto\bigl[\wp(z):\tfrac12\wp'(z):1\bigr],\quad 0\mapsto\mathcal{O},$$ is a complex-analytic group isomorphism onto $E_\Lambda: y^2=x^3-\tfrac{g_2}{4}x-\tfrac{g_3}{4}$.
(b) Conversely, for every $E/\mathbb{C}$ there is a lattice $\Lambda$, unique up to $\Lambda\mapsto c\Lambda$, with $E\cong E_\Lambda$.
Part (b) is the deep half (it uses the modularity of $j$ as a function of $\tau$; see Lesson 24). Part (a) has two components: bijectivity and homomorphy.
Bijectivity. $\wp$ has degree 2 as a map $\mathbb{C}/\Lambda\to\mathbb{P}^1$, so each value is attained twice, at $\pm z$; the two are distinguished by the sign of $\wp'$, except at the four points $z\in\frac12\Lambda/\Lambda$ where $\wp'=0$.
Homomorphy. This is the addition theorem:
For $z_1\not\equiv\pm z_2$, $$\wp(z_1+z_2)=\frac14\left(\frac{\wp'(z_1)-\wp'(z_2)}{\wp(z_1)-\wp(z_2)}\right)^2-\wp(z_1)-\wp(z_2).$$ And the duplication formula $$\wp(2z)=\frac14\left(\frac{\wp''(z)}{\wp'(z)}\right)^2-2\wp(z).$$
Compare with $x_3=\lambda^2-x_1-x_2$ from Lesson 18: with $x=\wp$ and $y=\tfrac12\wp'$, the slope $\lambda=\frac{y_2-y_1}{x_2-x_1}=\frac12\cdot\frac{\wp'(z_2)-\wp'(z_1)}{\wp(z_2)-\wp(z_1)}$, and the formula is identical. Addition of complex numbers is the chord–tangent law.
2.4 Deduce $E[m]\cong(\mathbb{Z}/m)^2$ from uniformisation, and describe $E[2]$ geometrically.
$E[m]=\ker([m]:\mathbb{C}/\Lambda\to\mathbb{C}/\Lambda)=\{z: mz\in\Lambda\}/\Lambda=\frac1m\Lambda/\Lambda$. Since $\Lambda\cong\mathbb{Z}^2$, $\frac1m\Lambda/\Lambda\cong(\frac1m\mathbb{Z}/\mathbb{Z})^2\cong(\mathbb{Z}/m\mathbb{Z})^2$. ✓
$E[2]=\{0,\ \omega_1/2,\ \omega_2/2,\ (\omega_1+\omega_2)/2\}$. Under $\Phi$, these are $\mathcal{O}$ and the three points where $\wp'=0$, i.e. $y=0$: the roots $e_i=\wp(\omega_i/2)$ of the cubic. ✓ Consistent with Lesson 11 Exercise 1.6.
2.5 Show $e_1+e_2+e_3=0$ for $e_i=\wp(\omega_i/2)$ (with $\omega_3=\omega_1+\omega_2$).
The $e_i$ are the roots of $4x^3-g_2x-g_3$, i.e. of $x^3-\frac{g_2}{4}x-\frac{g_3}{4}$. There is no $x^2$ term, so by Vieta the sum of the roots is 0. ✓
Equivalently: the Weierstrass model coming from a lattice is automatically in short form, which is the statement $a_2=0$, i.e. $\sum e_i = 0$.
2.6 Use PARI to verify numerically that $\Phi$ is a homomorphism on $y^2=x^3-x$.
? \p 30
? E = ellinit([0,0,0,-1,0]);
? P = [-1,0]; Q = [0,0];
? zP = ellpointtoz(E,P); zQ = ellpointtoz(E,Q);
? R = elladd(E,P,Q); zR = ellpointtoz(E,R);
? (zP + zQ - zR) / E.omega[1]
% 1.0000000000000000000000000000 \\ differs by a lattice vector
? ellztopoint(E, zP+zQ) == R
% 1
$\Phi(z_P)+\Phi(z_Q)=\Phi(z_P+z_Q)$ up to a period, which is exactly what "homomorphism on $\mathbb{C}/\Lambda$" means.
$$\omega=\frac{dx}{2y+a_1x+a_3}.$$ It is holomorphic and nonvanishing on all of $E$, including $\mathcal{O}$, and is invariant under translation: $\tau_Q^*\omega=\omega$ for $\tau_Q(P)=P+Q$. It spans the 1-dimensional space of regular differentials, matching $g=1$.
$$\log_E:E(\mathbb{C})\to\mathbb{C}/\Lambda,\qquad \log_E(P)=\int_{\mathcal{O}}^{P}\omega,$$ the inverse of $\Phi$. Its inverse is the elliptic exponential $\exp_E=\Phi$. The lattice $\Lambda$ is precisely the set of periods $\oint_\gamma\omega$ over closed loops $\gamma$.
$\log_E$ is a group isomorphism onto $\mathbb{C}/\Lambda$: it converts the chord–tangent law into ordinary addition. Consequently $$\sum_i n_iP_i=\mathcal{O}\quad\Longrightarrow\quad \sum_i n_i\log_E(P_i)\in\Lambda.$$ So linear relations among points become integer relations among complex numbers, detectable by LLL. This gives a fast heuristic independence test, and — with height bounds — a rigorous one.
For $a_0,b_0\gt0$ set $a_{n+1}=\frac{a_n+b_n}{2}$, $b_{n+1}=\sqrt{a_nb_n}$. Both converge to a common limit $\mathrm{AGM}(a_0,b_0)$, quadratically: the number of correct digits doubles each step.
For $y^2=(x-e_1)(x-e_2)(x-e_3)$ with $e_1\lt e_2\lt e_3$ real, $$\omega_{\text{real}}=\frac{2\pi}{\mathrm{AGM}\bigl(\sqrt{e_3-e_1},\ \sqrt{e_3-e_2}\bigr)},\qquad \omega_{\text{imag}}=\frac{2\pi i}{\mathrm{AGM}\bigl(\sqrt{e_3-e_1},\ \sqrt{e_2-e_1}\bigr)}.$$
Quadratic convergence means 1000 digits in about 10 iterations. This is why period computations are essentially free, and why the "real period" $\Omega$ in the BSD formula is never the bottleneck.
? \p 40
? E = ellinit([0,0,0,-7,6]);
? E.omega
% [3.5952..., 1.7976... + 1.4185...*I]
? E.area \\ covolume of the lattice
? agm(1, sqrt(2))
% 1.1981402347355922074...
? P = [1,0]; z = ellpointtoz(E,P)
? ellztopoint(E, z) \\ back again
% [1.000..., 0.000...]
? \\ independence check via LLL on elliptic logs:
? pts = [[-3,0],[-2,3],[-1,3]];
? zs = apply(P -> real(ellpointtoz(E,P)), pts);
? lindep(concat(zs, real(E.omega[1])))
% ~ [...] \\ look for small integer relations
lindep finding no small relation is evidence of independence, not a proof: a genuine relation could have huge coefficients. The rigorous version needs a height bound on the coefficients of any relation, which comes from the canonical height (Lesson 50) — or one can avoid analysis entirely with the mod-$p$ method of Lesson 90.
2.7 Verify that $\omega=dx/(2y)$ is invariant under $(x,y)\mapsto(x,-y)$ composed with negation, i.e. that $[-1]^*\omega=-\omega$.
$[-1](x,y)=(x,-y)$ in short form. Pulling back: $[-1]^*\omega=\frac{d(x)}{2(-y)}=-\frac{dx}{2y}=-\omega$. ✓
More generally $[m]^*\omega=m\,\omega$, which is the differential-form shadow of $\log_E([m]P)=m\log_E(P)$ and ultimately of $\hat h(mP)=m^2\hat h(P)$ (the square appears because heights are quadratic, i.e. built from $\omega$ twice).
2.8 Compute $\mathrm{AGM}(1,\sqrt2)$ by hand to 6 digits and count iterations.
$a_0=1$, $b_0=1.414214$.
$a_1=1.207107$, $b_1=\sqrt{1.414214}=1.189207$.
$a_2=1.198157$, $b_2=\sqrt{1.207107\cdot1.189207}=1.198124$.
$a_3=1.1981405$, $b_3=1.1981402$.
$a_4=b_4=1.1981402$.
Four iterations for 7 digits. Correct digits: roughly $1,2,4,8$ — doubling each step, as promised. Gauss's constant $1/\mathrm{AGM}(1,\sqrt2)=0.8346268\ldots$
2.9 Use elliptic logarithms in PARI to test whether $(1,0)$, $(2,0)$ and $(-3,0)$ on $y^2=x^3-7x+6$ are independent.
? E = ellinit([0,0,0,-7,6]);
? apply(P->ellorder(E,P), [[1,0],[2,0],[-3,0]])
% [2, 2, 2]
All three have order 2! They are the three 2-torsion points ($y=0$ means $2P=\mathcal{O}$), so they are certainly not independent of infinite order — they generate $(\mathbb{Z}/2)^2$, and $\hat h=0$ for each.
Lesson: always check torsion before testing independence. The genuine generators of this rank-3 curve are $[-3,0]$? No — PARI's ellrank returned $[[-3,0],[-2,3],[-1,3]]$, but $[-3,0]$ has $y=0$... in fact for this curve $x^3-7x+6=(x-1)(x-2)(x+3)$, so all three of $1,2,-3$ give 2-torsion. Re-running ellrank gives non-torsion generators such as $[0,\pm\sqrt6]$—not rational—so use:
? G = ellrank(E)[4]; apply(P->ellorder(E,P), G)
? matdet(ellheightmatrix(E, select(P->ellorder(E,P)==0, G)))
The moral stands: the height matrix is singular precisely when torsion sneaks into your list, since $\hat h(\text{torsion})=0$.
Let $E:y^2=f(x)=x^3+Ax+B$ with $A,B\in\mathbb{R}$. The real locus is $\{(x,y): f(x)\ge0\}$, so its shape is determined by the number of real roots of $f$ — equivalently by the sign of $\Delta$.
| $\Delta\lt0$ | $\Delta\gt0$ | |
|---|---|---|
| real roots of $f$ | one, $e_1$ | three, $e_1\lt e_2\lt e_3$ |
| $\{f\ge0\}$ | $[e_1,\infty)$ | $[e_1,e_2]\cup[e_3,\infty)$ |
| shape | one unbounded branch | an oval ("egg") plus an unbounded branch |
| $E(\mathbb{R})$ | $\cong\mathbb{R}/\mathbb{Z}$ | $\cong\mathbb{R}/\mathbb{Z}\times\mathbb{Z}/2\mathbb{Z}$ |
| components $c_\infty$ | 1 | 2 |
| lattice | rhombic ($\omega_2=\bar\omega_1$) | rectangular ($\omega_1\in\mathbb{R}$, $\omega_2\in i\mathbb{R}$) |
$$\Omega=\int_{E(\mathbb{R})}\left|\frac{dx}{2y+a_1x+a_3}\right|.$$
Conventions differ: some authors take $\Omega$ to be the least positive real period $\omega_1$, others $c_\infty\cdot\omega_1$ (i.e. including the egg). PARI's E.omega[1] is $\omega_1$; the BSD formula as usually stated uses $\Omega=c_\infty\,\omega_1$ or absorbs $c_\infty$ into the Tamagawa product. Check which convention your source uses before comparing numbers.
When $\Delta\gt0$, small rational points frequently sit on the egg, the bounded component over $[e_1,e_2]$. A search that enumerates $x$ upward from $e_3$ misses them entirely. Any hand-rolled search must enumerate both intervals; ellratpoints does.
? E = ellinit([0,0,0,-7,6]);
? E.disc
% 246016 \\ positive: two components
? E.roots
% [2.0000..., 1.0000..., -3.0000...] \\ e3, e2, e1 (PARI orders descending)
? E.omega
% [3.5952..., 1.7976... + 1.4185...*I]
? \\ a point on the egg (x between -3 and 1):
? ellratpoints(E, 5)
? select(P -> P[1] <= 1, ellratpoints(E,20))
When $\Delta\gt0$, the identity component (the unbounded branch, containing $\mathcal{O}$) is $\cong\mathbb{R}/\mathbb{Z}$ and the egg is the nontrivial coset. Consequently: egg + egg = branch, egg + branch = egg. If $P$ is on the egg then $2P$ is on the unbounded branch. This is a real-place analogue of the component group that appears in Tamagawa numbers (Lesson 39).
2.10 Sketch $y^2=x^3-x$ and $y^2=x^3-x+1$ and identify which has an egg.
$y^2=x^3-x=x(x-1)(x+1)$: three real roots $-1,0,1$, so $\Delta=64\gt0$. Egg over $[-1,0]$, branch over $[1,\infty)$. Two components.
$y^2=x^3-x+1$: $\Delta=-16(4(-1)^3+27)=-16\cdot23=-368\lt0$. One real root ($\approx-1.3247$), one component, no egg.
? [ellinit([0,0,0,-1,0]).disc, ellinit([0,0,0,-1,1]).disc]
% [64, -368]
2.11 On $y^2=x^3-x$, verify that the sum of two egg points lies on the unbounded branch.
? E = ellinit([0,0,0,-1,0]);
? P = [-1,0]; Q = [0,0]; \\ both on the egg (x in [-1,0])
? elladd(E,P,Q)
% [1, 0] \\ x = 1: on the unbounded branch
? \\ another pair, non-torsion example on a different curve:
? F = ellinit([0,0,0,-7,6]); pts = select(P->P[1]<=1, ellratpoints(F,20));
? R = elladd(F, pts[1], pts[2]); R[1] >= 2
% 1
Consistent with the group structure $\mathbb{R}/\mathbb{Z}\times\mathbb{Z}/2$: the egg is the nonidentity coset, and nonidentity + nonidentity = identity coset.
2.12 Compute $\Omega$ for $y^2=x^3-x$ two ways: from E.omega and from the AGM formula.
? \p 30
? E = ellinit([0,0,0,-1,0]);
? E.omega[1]
% 5.24411510858423962092967917 (approximately)
? e = E.roots; e1 = e[3]; e2 = e[2]; e3 = e[1]; \\ ascending: e1<e2<e3
? 2*Pi/agm(sqrt(e3-e1), sqrt(e3-e2))
% 5.24411510858423962092967917
They agree. For this curve $e_1=-1,e_2=0,e_3=1$, so the AGM is $\mathrm{AGM}(\sqrt2,1)=1.198140\ldots$ and $2\pi/1.198140=5.24412$. ✓
Uniformisation says elliptic curves over $\mathbb{C}$ = lattices up to scaling. Let us make that moduli space explicit, because it is where modular forms come from.
Scale $\Lambda=\mathbb{Z}\omega_1+\mathbb{Z}\omega_2$ by $1/\omega_2$: every lattice is homothetic to $\Lambda_\tau=\mathbb{Z}\tau+\mathbb{Z}$ with $\tau\in\mathbb{H}=\{\operatorname{Im}\tau\gt0\}$.
$\Lambda_\tau=\Lambda_{\tau'}$ up to scaling iff $\tau'=\gamma\tau$ for some $$\gamma=\begin{pmatrix}a&b\\c&d\end{pmatrix}\in\mathrm{SL}_2(\mathbb{Z}),\qquad \gamma\tau=\frac{a\tau+b}{c\tau+d}.$$ Hence $$\{\text{elliptic curves}/\mathbb{C}\}/\cong \;\;\longleftrightarrow\;\; \mathbb{H}/\mathrm{SL}_2(\mathbb{Z}).$$
A meromorphic $f$ on $\mathbb{H}$ with $f(\gamma\tau)=f(\tau)$ for all $\gamma\in\mathrm{SL}_2(\mathbb{Z})$, meromorphic at the cusp $\tau\to i\infty$. More generally, a modular form of weight $k$ satisfies $f(\gamma\tau)=(c\tau+d)^kf(\tau)$ and is holomorphic everywhere including the cusp.
The Eisenstein series are modular forms: $G_k(\Lambda_{\gamma\tau})=(c\tau+d)^kG_k(\Lambda_\tau)$, so $G_4$ has weight 4 and $G_6$ weight 6. Then $g_2$ has weight 4, $g_3$ weight 6, $\Delta=g_2^3-27g_3^2$ has weight 12, and $$j(\tau)=1728\,\frac{g_2^3}{g_2^3-27g_3^2}$$ has weight 0 — a genuine modular function.
$j:\mathbb{H}/\mathrm{SL}_2(\mathbb{Z})\to\mathbb{C}$ is a bijection. Its $q$-expansion, with $q=e^{2\pi i\tau}$, is $$j(\tau)=\frac1q+744+196884q+21493760q^2+\cdots$$
? \ps 6
? ellj(x) \\ j as a q-series in x = q
% x^-1 + 744 + 196884*x + 21493760*x^2 + 864299970*x^3 + ...
? eta(x)^24 \\ the Delta cusp form
? \\ from tau numerically:
? ellj(0.5 + 0.8*I)
2.13 Verify $j(i)=1728$ and $j(\rho)=0$ for $\rho=e^{2\pi i/3}$, and relate to Lesson 15.
? \p 20
? ellj(I)
% 1728.0000000000000000
? ellj(exp(2*Pi*I/3))
% -0.0000000000000000000 + 0.E-20*I
$\tau=i$: the lattice $\mathbb{Z}i+\mathbb{Z}$ is the square lattice, invariant under multiplication by $i$; hence $g_3=0$ and $j=1728$. CM by $\mathbb{Z}[i]$.
$\tau=\rho$: the hexagonal lattice, invariant under multiplication by $\zeta_6$; hence $g_2=0$ and $j=0$. CM by $\mathbb{Z}[\zeta_3]$.
These are exactly the two exceptional $j$-values with extra automorphisms from Lesson 15.
2.14 Show $\mathrm{SL}_2(\mathbb{Z})$ is generated by $S=\begin{pmatrix}0&-1\\1&0\end{pmatrix}$ and $T=\begin{pmatrix}1&1\\0&1\end{pmatrix}$, and describe their action.
$T\tau=\tau+1$ (horizontal translation) and $S\tau=-1/\tau$ (inversion in the unit circle composed with reflection). The standard fundamental domain is $\mathcal{F}=\{|\tau|\ge1,\ |\operatorname{Re}\tau|\le\tfrac12\}$.
Generation sketch: given any $\tau$, use $T^{\pm1}$ to bring $\operatorname{Re}\tau$ into $[-\frac12,\frac12]$. If $|\tau|\lt1$ apply $S$, which increases $\operatorname{Im}\tau$ (since $\operatorname{Im}(-1/\tau)=\operatorname{Im}\tau/|\tau|^2$). Repeat. Since $\operatorname{Im}$ of the orbit takes a maximum (discreteness), the process terminates in $\mathcal{F}$. Hence $\langle S,T\rangle$ acts transitively onto $\mathcal{F}$, which forces $\langle S,T\rangle=\mathrm{SL}_2(\mathbb{Z})$. ∎
All practical rank work rests on computing $a_p$ for many primes, so this lesson and the next are load-bearing.
For $q$ odd, $\chi:\mathbb{F}_q\to\{-1,0,1\}$ with $\chi(0)=0$, $\chi(u)=1$ if $u$ is a nonzero square, $-1$ otherwise. For $q=p$ prime this is the Legendre symbol $\left(\frac{\cdot}{p}\right)$. It is multiplicative: $\chi(uv)=\chi(u)\chi(v)$.
For $y^2=f(x)$ the number of $y$ solving a given $x$ is $1+\chi(f(x))$. Summing and adding $\mathcal{O}$:
$$\#E(\mathbb{F}_q)=q+1+\sum_{x\in\mathbb{F}_q}\chi\bigl(f(x)\bigr),\qquad a_q:=q+1-\#E(\mathbb{F}_q)=-\sum_{x\in\mathbb{F}_q}\chi\bigl(f(x)\bigr).$$
For $E/\mathbb{Q}$ with a fixed minimal model and $p\nmid\Delta$, $a_p:=p+1-\#\tilde E(\mathbb{F}_p)$ where $\tilde E$ is the reduction. For $p\mid N$ we set $a_p=1,-1,0$ for split multiplicative, non-split multiplicative and additive reduction respectively (Lesson 66 explains why).
| Method | Complexity | When to use |
|---|---|---|
| character sum | $O(q)$ field ops | $p\lesssim10^7$; the sieve workhorse |
| baby-step giant-step (Shanks–Mestre) | $O(q^{1/4})$ | $p$ up to ~$10^{20}$ |
| Schoof | $O(\log^8q)$ | theoretical |
| Schoof–Elkies–Atkin | $O(\log^4q)$ | cryptographic sizes |
For high-rank searching you need $a_p$ for all $p\le X$ (with $X\sim10^3$–$10^5$) on millions of curves. The right implementation:
Asymptotics are irrelevant here — throughput is everything, and the $O(p)$ method with tables beats SEA by orders of magnitude in this regime.
? E = ellinit([0,0,0,-7,6]);
? ellap(E, 101)
% 3
? \\ vector of a_p for all p up to 100:
? [ellap(E,p) | p <- primes(25), E.disc % p != 0]
? \\ over an extension field:
? F = ellinit([0,0,0,-7,6], 5); ellcard(F)
? ellcard(ellinit([0,0,0,-7,6], ffgen(5^3))) \\ #E(F_125)
2.15 Compute $\#E(\mathbb{F}_5)$ for $y^2=x^3+1$ by hand and check with PARI.
Squares mod 5: $0,1,4$. Compute $f(x)=x^3+1$ for $x=0..4$: $1,2,4,3,0$ (since $2^3=8\equiv3$, $3^3=27\equiv2$, $4^3=64\equiv4$; so $f=1,2,3,3,0$). Let me redo: $x=0:1$; $x=1:2$; $x=2:8+1=9\equiv4$; $x=3:27+1=28\equiv3$; $x=4:64+1=65\equiv0$.
$\chi$ values: $\chi(1)=1$, $\chi(2)=-1$, $\chi(4)=1$, $\chi(3)=-1$, $\chi(0)=0$. Sum $=1-1+1-1+0=0$. So $\#E=5+1+0=6$ and $a_5=0$.
? ellap(ellinit([0,0,0,0,1]), 5)
% 0
$a_5=0$: supersingular at 5, consistent with $5\equiv2\pmod3$ and CM by $\mathbb{Z}[\zeta_3]$.
2.16 Write a fast GP routine computing $a_p$ by character sum with a precomputed table, and time it against ellap.
fastap(A, B, p) =
{ my(s = 0, chi = vector(p, i, kronecker(i-1, p)));
for(x = 0, p-1, s += chi[ (x^3 + A*x + B) % p + 1 ]);
-s;
}
? fastap(-7, 6, 1009)
% -22
? ellap(ellinit([0,0,0,-7,6]), 1009)
% -22
? # ; for(i=1,100, fastap(-7,6,1009)); ##
? # ; for(i=1,100, ellap(ellinit([0,0,0,-7,6]),1009)); ##
ellap wins in GP because it is compiled C using better algorithms; the point of writing it out is that in your own compiled sieve, the table method with the character array hoisted out of the loop is what you want — recomputing chi per curve, as above, is the mistake.
2.17 For $E:y^2=x^3-x$, compute $a_p$ for $p\le50$ and find the pattern.
? E = ellinit([0,0,0,-1,0]);
? for(i=1,15, my(p=prime(i)); if(E.disc%p, print(p," ",ellap(E,p))))
3 0
5 -2
7 0
11 0
13 6
17 2
19 0
23 0
29 -10
31 0
37 -2
41 10
43 0
47 0
$a_p=0$ exactly when $p\equiv3\pmod4$. This curve has $j=1728$ and CM by $\mathbb{Z}[i]$; primes inert in $\mathbb{Q}(i)$ (those $\equiv3\bmod4$) are supersingular. For split primes $p\equiv1\pmod4$, write $p=a^2+b^2$ with $a$ odd and $a+b\equiv1\pmod4$; then $a_p=2a$. Check $p=13=9+4$: $a=3,b=2$, $a+b=5\equiv1$ ✓, $a_p=6$ ✓.
Why this matters: half the $a_p$ vanishing makes the Mestre–Nagao sum (Lesson 87) badly biased. CM curves must be excluded from rank sieves.
For $E/\mathbb{F}_q$, $\phi:E\to E$, $\phi(x,y)=(x^q,y^q)$, $\phi(\mathcal{O})=\mathcal{O}$. It is a morphism (since $u\mapsto u^q$ is a field homomorphism fixing $\mathbb{F}_q$) of degree $q$, and it is purely inseparable.
Its fixed points are exactly $E(\mathbb{F}_q)$, since $\alpha^q=\alpha\iff\alpha\in\mathbb{F}_q$. Because $\phi-1$ is separable, $$\#E(\mathbb{F}_q)=\#\ker(\phi-1)=\deg(\phi-1).$$
In $\operatorname{End}(E)$, $$\phi^2-a_q\phi+q=0,\qquad a_q=q+1-\#E(\mathbb{F}_q).$$
Proof sketch. The degree map is a positive-definite quadratic form on $\operatorname{End}(E)$ with associated bilinear form $\langle\alpha,\beta\rangle=\deg(\alpha+\beta)-\deg\alpha-\deg\beta$. Then $$\deg(\phi-1)=\deg\phi-\langle\phi,1\rangle+\deg 1 = q - \langle\phi,1\rangle + 1,$$ so $\langle\phi,1\rangle=a_q$ by definition. Positive-definiteness of $\deg$ applied to $m\phi-n$ gives $\deg(m\phi-n)=m^2q-mna_q+n^2\ge0$ for all integers $m,n$, whence the discriminant condition $a_q^2-4q\le0$.
$$|a_q|\le2\sqrt q,\qquad\text{equivalently}\qquad \bigl|\#E(\mathbb{F}_q)-(q+1)\bigr|\le2\sqrt q.$$
Writing $\phi$'s eigenvalues as $\alpha,\bar\alpha$ with $\alpha\bar\alpha=q$ and $\alpha+\bar\alpha=a_q$: the bound says $|\alpha|=\sqrt q$, so $|a_q|=|\alpha+\bar\alpha|\le2\sqrt q$. Writing $a_q=2\sqrt q\cos\theta_q$ defines the Frobenius angle $\theta_q\in[0,\pi]$.
$$Z(E/\mathbb{F}_q;T)=\exp\left(\sum_{n\ge1}\#E(\mathbb{F}_{q^n})\frac{T^n}{n}\right)=\frac{1-a_qT+qT^2}{(1-T)(1-qT)}=\frac{(1-\alpha T)(1-\bar\alpha T)}{(1-T)(1-qT)}.$$
Rationality, the functional equation $Z(1/(qT))=Z(T)$, and $|\alpha|=\sqrt q$ (the "Riemann hypothesis for curves") are the Weil conjectures in the genus-1 case. Substituting $T=q^{-s}$, the numerator becomes the local L-factor $1-a_qq^{-s}+q^{1-2s}$ of Lesson 67, and $|\alpha|=\sqrt q$ says its zeros lie on $\operatorname{Re}(s)=\tfrac12$.
$$\#E(\mathbb{F}_{q^n})=q^n+1-(\alpha^n+\bar\alpha^n).$$ So one value $a_q$ determines every $\#E(\mathbb{F}_{q^n})$. Set $s_n=\alpha^n+\bar\alpha^n$; then $s_0=2$, $s_1=a_q$, $s_{n+1}=a_qs_n-qs_{n-1}$.
For a non-CM curve over $\mathbb{Q}$, the angles $\theta_p$ equidistribute in $[0,\pi]$ with density $\frac2\pi\sin^2\theta$ (Taylor et al., 2008–11). Consequently $a_p$ is symmetric about 0 on average, and $\sum_{p\le X}a_p\log p/p$ has no drift — for a rank-0 curve. Rank shows up as a systematic negative drift, which is precisely what the Mestre–Nagao sieve detects. For a CM curve the distribution is different (half the $\theta_p$ concentrate at $\pi/2$), which is why CM must be excluded.
2.18 For $E:y^2=x^3+1$ over $\mathbb{F}_5$ ($a_5=0$), compute $\#E(\mathbb{F}_{25})$ and $\#E(\mathbb{F}_{125})$.
$s_0=2$, $s_1=0$, $s_{n+1}=0\cdot s_n-5s_{n-1}=-5s_{n-1}$. So $s_2=-10$, $s_3=0$, $s_4=50$.
$\#E(\mathbb{F}_{25})=25+1-(-10)=36$. $\#E(\mathbb{F}_{125})=125+1-0=126$.
? ellcard(ellinit([0,0,0,0,1], ffgen(5^2)))
% 36
? ellcard(ellinit([0,0,0,0,1], ffgen(5^3)))
% 126
Note $36=6^2$: for a supersingular curve over $\mathbb{F}_p$ with $a_p=0$, $E(\mathbb{F}_{p^2})\cong(\mathbb{Z}/(p+1))^2$.
2.19 Verify Hasse's bound empirically for $y^2=x^3-7x+6$ at all $p\lt200$, and plot the normalised $a_p/(2\sqrt p)$.
? E = ellinit([0,0,0,-7,6]);
? v = [ [p, ellap(E,p), ellap(E,p)/(2*sqrt(p))] | p <- primes(46), E.disc % p != 0 ];
? \\ all normalised values in [-1,1]?
? #select(t -> abs(t[3]) > 1, v)
% 0
? \\ mean of the normalised values:
? vecsum([t[3] | t <- v]) / #v
All lie in $[-1,1]$ ✓. The mean should be noticeably negative for this rank-3 curve — that negative drift is the Mestre–Nagao signal. Compare with a rank-0 curve like ellinit([0,0,1,-1,0]) where the mean hovers near 0.
2.20 Prove that if $E/\mathbb{F}_p$ has $a_p=0$ then $\#E(\mathbb{F}_p)=p+1$ and $E[p]=\{\mathcal{O}\}$.
$\#E(\mathbb{F}_p)=p+1-a_p=p+1$ immediately.
For the second claim: $\phi^2=-p=[-p]$ in $\operatorname{End}(E)$, so $[p]=-\phi^2$. Since $\phi$ is purely inseparable of degree $p$, $\phi^2$ is purely inseparable of degree $p^2$, hence $[p]$ is purely inseparable and $\#\ker[p]=1$, i.e. $E[p]=\{\mathcal{O}\}$. That is the definition of supersingular. ∎
$$E(\mathbb{F}_q)\cong\mathbb{Z}/n_1\mathbb{Z}\times\mathbb{Z}/n_2\mathbb{Z},\qquad n_2\mid n_1,\quad n_2\mid q-1.$$ It is cyclic iff $n_2=1$.
Why at most two factors: $E[m]\cong(\mathbb{Z}/m)^2$ for $m$ prime to $q$, so no subgroup of $E(\overline{\mathbb{F}_q})$ needs three generators. Why $n_2\mid q-1$: if $E[n_2]\subseteq E(\mathbb{F}_q)$ then by the Weil pairing (Lesson 34) $\mu_{n_2}\subseteq\mathbb{F}_q$, i.e. $n_2\mid q-1$.
$E/\mathbb{F}_q$ ($q=p^k$) is supersingular if $p\mid a_q$; equivalently $E[p]=\{\mathcal{O}\}$; equivalently $\operatorname{End}(E)$ is an order in a quaternion algebra. Otherwise it is ordinary, and then $E[p^n]\cong\mathbb{Z}/p^n$ and $\operatorname{End}(E)$ is an order in an imaginary quadratic field.
For $q=p$ prime, an integer $a$ occurs as $a_p$ of some $E/\mathbb{F}_p$ iff $|a|\le2\sqrt p$. So every value in the Hasse interval is attained — the group orders $\#E(\mathbb{F}_p)$ sweep out all of $[p+1-2\sqrt p,\ p+1+2\sqrt p]$.
Since every value in the Hasse interval occurs, and (Sato–Tate) occurs with predictable frequency, you can meaningfully ask: for which residues $t\bmod p$ does the family $\mathcal{E}_t$ have unusually many points mod $p$? Precomputing this residue table for each small $p$ and restricting $t$ by CRT is the congruence sieve of Lesson 88. Deuring–Waterhouse guarantees the table is not degenerate.
? E = ellinit([0,0,0,-7,6], 101);
? ellcard(E)
% 105
? ellgroup(E)
% [105] \\ cyclic of order 105
? ellgroup(E, 1) \\ also return generators
? F = ellinit([0,0,0,0,1], 7);
? ellcard(F), ellgroup(F)
% 12, [6, 2] \\ Z/6 x Z/2
? \\ order of a specific point:
? ellorder(E, ellgenerators(E)[1])
This lesson is where the certification method of Lesson 90 gets its raw material. Given points $P_1,\dots,P_k\in E(\mathbb{Q})$ and a good prime $p$:
Every genuine relation over $\mathbb{Q}$ reduces to a relation mod $p$, so $L\subseteq L_p$ for all good $p$. Intersecting over several primes and getting $\{0\}$ proves independence — with no real arithmetic at all.
2.21 Find a prime $p$ for which $E:y^2=x^3+1$ over $\mathbb{F}_p$ is non-cyclic, and explain.
? for(i=3,20, my(p=prime(i), F=ellinit([0,0,0,0,1],p));
if(#ellgroup(F)==2, print(p, " ", ellgroup(F))))
7 [6, 2]
13 [6, 6]
19 [6, 3]
31 [6, 6]
...
At $p=7$: $\#E=12$, structure $\mathbb{Z}/6\times\mathbb{Z}/2$. Non-cyclic requires $n_2\ge2$, hence $E[2]\subseteq E(\mathbb{F}_p)$, i.e. $x^3+1$ splits mod $p$ — true when $p\equiv1\pmod3$ or when the factorisation works out; and $n_2\mid p-1$ forces $2\mid p-1$, automatic for odd $p$. At $p=13$ we even get $\mathbb{Z}/6\times\mathbb{Z}/6$: full 6-torsion is rational mod 13, so $\mu_6\subset\mathbb{F}_{13}$, i.e. $6\mid12$ ✓.
2.22 Implement the relation lattice $L_p$ in GP for two points and one prime.
relmod(E, pts, p) =
{ my(Ep = ellinit(E[1..5], p), G, gens, n, M);
G = ellgroup(Ep, 1); \\ [order, [n1,n2], [g1,g2]]
n = G[2]; gens = G[3];
M = matrix(#n, #pts, i, j,
elllog(Ep, [Mod(pts[j][1],p), Mod(pts[j][2],p)], gens[i], n[i]));
\\ relations a with M*a = 0 mod (n1, n2):
matkerint(concat(M, matdiagonal(n)));
}
? E = ellinit([0,0,0,-7,6]);
? relmod(E, [[-3,0],[-2,3]], 101)
The output columns span (a superset of) the relation lattice modulo 101. Intersect the results for several primes with matintersect; if the intersection is trivial, the points are independent. In practice PARI's elllog needs the point expressed with Mod coordinates and can fail if a point reduces to the identity — filter those primes out.
2.23 Verify Deuring's theorem experimentally: for $p=23$, find curves realising several distinct values of $a_p$.
? p = 23; v = List();
? for(A=0,p-1, for(B=0,p-1,
if(Mod(4*A^3+27*B^2,p) != 0,
listput(v, ellap(ellinit([0,0,0,A,B],p))))));
? vecsort(Set(Vec(v)))
% [-9, -8, -7, ..., 8, 9]
$2\sqrt{23}\approx9.59$, so the Hasse interval permits $a\in[-9,9]$ — and every one of those 19 values is attained. ✓ Deuring's theorem in action.
A nonconstant morphism $\varphi:E_1\to E_2$ of elliptic curves with $\varphi(\mathcal{O}_1)=\mathcal{O}_2$. (By convention the constant map $\mathcal{O}$ is also called an isogeny, of degree 0.) $E_1$ and $E_2$ are isogenous if such a $\varphi$ exists.
Any isogeny satisfies $\varphi(P+Q)=\varphi(P)+\varphi(Q)$.
Why. $\varphi$ induces $\varphi_*:\operatorname{Pic}^0(E_1)\to\operatorname{Pic}^0(E_2)$, which is a homomorphism by construction; the identification of $E_i$ with $\operatorname{Pic}^0(E_i)$ via $P\mapsto[(P)-(\mathcal{O}_i)]$ then transports it. The condition $\varphi(\mathcal{O}_1)=\mathcal{O}_2$ is exactly what makes the two identifications compatible.
$\varphi$ induces an injection of function fields $\varphi^*:\overline K(E_2)\hookrightarrow\overline K(E_1)$. Then $\deg\varphi=[\overline K(E_1):\varphi^*\overline K(E_2)]$. The extension splits into a separable part and a purely inseparable part: $\deg\varphi=\deg_s\varphi\cdot\deg_i\varphi$. If $\varphi$ is separable then $\deg\varphi=\#\ker\varphi$.
In characteristic 0 every isogeny is separable, so $\deg\varphi=\#\ker\varphi$ always. In characteristic $p$, Frobenius has $\deg=p$ but trivial kernel — it is purely inseparable.
For every finite subgroup $G\subset E(\overline K)$ stable under $G_K$, there is an elliptic curve $E/G$ and a separable isogeny $\varphi:E\to E/G$ with $\ker\varphi=G$, unique up to isomorphism of the target. Vélu's formulas give both explicitly.
Let $E:y^2=x^3+Ax+B$ and $G$ a finite subgroup. Split $G\setminus\{\mathcal{O}\}=G_2\sqcup R\sqcup(-R)$ where $G_2$ is the 2-torsion in $G$ and $R$ picks one of each $\pm$ pair. For $Q\in S:=G_2\cup R$ set $$g_Q^x=3x_Q^2+A,\quad g_Q^y=-2y_Q,\quad v_Q=\begin{cases}g_Q^x&Q\in G_2\\ 2g_Q^x&\text{else}\end{cases},\quad u_Q=(g_Q^y)^2.$$ Then with $v=\sum_{Q\in S}v_Q$ and $w=\sum_{Q\in S}(u_Q+x_Qv_Q)$, $$E/G:\ y^2=x^3+(A-5v)x+(B-7w),$$ $$\varphi(P)=\left(x_P+\sum_{Q\in S}\left[\frac{v_Q}{x_P-x_Q}+\frac{u_Q}{(x_P-x_Q)^2}\right],\ \ y_P-\sum_{Q\in S}\left[u_Q\frac{2y_P}{(x_P-x_Q)^3}+v_Q\frac{\cdots}{\cdots}\right]\right).$$
The exact $y$-formula is messy; what matters is that it is completely explicit and implemented everywhere.
? E = ellinit([0,0,0,-1,0]); \\ y^2 = x^3 - x, full 2-torsion
? \\ isogeny with kernel generated by (0,0):
? [F, phi] = ellisogeny(E, [0,0]);
? F \\ coefficients of the target curve
% [0, 0, 0, 4, 0] \\ y^2 = x^3 + 4x
? phi \\ the rational maps
? ellisogenyapply(phi, [1,0])
? \\ the whole isogeny class over Q:
? M = ellisomat(E);
? M[2] \\ matrix of isogeny degrees
? #M[1] \\ number of curves in the class
If $\varphi:E_1\to E_2$ is an isogeny over $\mathbb{Q}$ then $\operatorname{rank}E_1(\mathbb{Q})=\operatorname{rank}E_2(\mathbb{Q})$, because $\ker\varphi$ is finite so $\varphi\otimes\mathbb{Q}:E_1(\mathbb{Q})\otimes\mathbb{Q}\to E_2(\mathbb{Q})\otimes\mathbb{Q}$ is an isomorphism. Torsion, Ш, Tamagawa numbers and the regulator all can change; the rank cannot. Practically: compute the rank on whichever curve of the isogeny class is easiest, e.g. the one with the smallest 2-Selmer group.
2.24 Compute the isogeny class of the conductor-11 curve and check all members have the same $a_p$.
? E = ellinit([0,-1,1,-10,-20]);
? M = ellisomat(E);
? #M[1]
% 3
? M[2] \\ degree matrix: 1,5,5 etc.
? for(i=1,3, print(apply(p->ellap(ellinit(M[1][i]),p), [2,3,7,13])))
[-2, -1, -2, 4]
[-2, -1, -2, 4]
[-2, -1, -2, 4]
Identical $a_p$ ✓ — isogenous curves have the same $L$-function, hence the same analytic rank and (under BSD) the same rank. The class $\{11a1,11a2,11a3\}$ is linked by 5-isogenies. Their torsion differs: $\mathbb{Z}/5$, $\mathbb{Z}/5$, trivial.
2.25 Verify Vélu's formula for the 2-isogeny of $y^2=x^3-x$ with kernel $\{\mathcal{O},(0,0)\}$ by hand.
$G=\{\mathcal{O},(0,0)\}$, so $G_2=\{(0,0)\}$, $R=\emptyset$, $S=\{(0,0)\}$. With $A=-1,B=0$, $x_Q=0,y_Q=0$: $$g_Q^x=3\cdot0+(-1)=-1,\quad g_Q^y=0,\quad v_Q=g_Q^x=-1,\quad u_Q=0.$$ So $v=-1$, $w=u_Q+x_Qv_Q=0$, and $$E/G:\ y^2=x^3+(-1-5(-1))x+(0-0)=x^3+4x.$$ ✓ Matches PARI.
The map is $x\mapsto x+\frac{-1}{x-0}+0=x-\frac1x=\frac{x^2-1}{x}$. Compare with the classical 2-isogeny formula $\varphi(x,y)=\left(\frac{y^2}{x^2},\ \frac{y(b-x^2)}{x^2}\right)$ for $y^2=x^3+ax^2+bx$: here $a=0,b=-1$ and $\frac{y^2}{x^2}=\frac{x^3-x}{x^2}=\frac{x^2-1}{x}$ ✓.
2.26 Show that if $\varphi:E_1\to E_2$ is a separable isogeny of degree $m$ then $\varphi$ is surjective on $\overline K$-points.
A nonconstant morphism of smooth projective curves is surjective (its image is closed and irreducible, of dimension 1, hence everything). Alternatively: $\varphi$ is a finite map of degree $m$, so every fibre has exactly $m$ points counted with multiplicity, and for separable $\varphi$ generic fibres have $m$ distinct points; since $\varphi$ is a homomorphism, every fibre is a coset of $\ker\varphi$ and hence has exactly $m$ points. In particular no fibre is empty. ∎
This is why the sequence $0\to\ker\varphi\to E_1(\overline K)\to E_2(\overline K)\to0$ is exact — the starting point of descent by isogeny (Lesson 57).
For every isogeny $\varphi:E_1\to E_2$ of degree $m$ there is a unique isogeny $\hat\varphi:E_2\to E_1$ with $$\hat\varphi\circ\varphi=[m]_{E_1},\qquad \varphi\circ\hat\varphi=[m]_{E_2}.$$ Moreover $\deg\hat\varphi=m$, $\widehat{\hat\varphi}=\varphi$, $\widehat{\varphi+\psi}=\hat\varphi+\hat\psi$, and $\widehat{[m]}=[m]$.
Existence: $\varphi(E_1[m])\subseteq E_2[m]$ and one checks $\ker[m]_{E_1}\subseteq\ker(\text{something})$; concretely $\hat\varphi$ is the isogeny with kernel $\varphi(E_1[m])$. Uniqueness follows from $\deg$ being a quadratic form.
Let $E:y^2=x^3+ax^2+bx$ (so $T=(0,0)\in E[2]$ is rational), with $\Delta_E=16b^2(a^2-4b)\ne0$. Set $$E':y^2=x^3-2ax^2+(a^2-4b)x,$$ $$\varphi:E\to E',\qquad \varphi(x,y)=\left(\frac{y^2}{x^2},\ \frac{y(b-x^2)}{x^2}\right),\qquad \varphi(\mathcal{O})=\varphi(T)=\mathcal{O}',$$ $$\hat\varphi:E'\to E,\qquad \hat\varphi(X,Y)=\left(\frac{Y^2}{4X^2},\ \frac{Y\bigl((a^2-4b)-X^2\bigr)}{8X^2}\right).$$ Then $\ker\varphi=\{\mathcal{O},T\}$, $\hat\varphi\varphi=[2]_E$, and $E''=(E')'\cong E$.
This single map is the engine of descent by 2-isogeny (Lesson 57), the most hands-on rank computation available. It requires only one rational 2-torsion point and reduces the rank to counting squarefree divisors of $b$ and $a^2-4b$ that pass a local test. Everything about congruent numbers, and Fermat's descent, is this map.
? a = 0; b = -1; \\ E: y^2 = x^3 - x
? E = ellinit([0,a,0,b,0]);
? [Ep, phi] = ellisogeny(E, [0,0]);
? Ep
% [0, 0, 0, 4, 0] \\ E': y^2 = x^3 + 4x (a'=-2a=0, b'=a^2-4b=4)
? Epc = ellinit(Ep);
? [Epp, psi] = ellisogeny(Epc, [0,0]);
? Epp \\ should be isomorphic to E
% [0, 0, 0, -16, 0] \\ = twist/scaling of y^2=x^3-x
? ellisomat(E)[2] \\ degrees in the isogeny class
$E''$ is $y^2=x^3-16x$, which is $E$ after $x\mapsto4x$, $y\mapsto8y$ — i.e. $\hat\varphi\varphi=[2]$ up to the identification.
By Mazur's isogeny theorem, a $\mathbb{Q}$-rational isogeny of prime degree $\ell$ between curves over $\mathbb{Q}$ has $$\ell\in\{2,3,5,7,11,13,17,19,37,43,67,163\}.$$ The last five occur for exactly one $j$-invariant each (all CM). So isogeny classes over $\mathbb{Q}$ are small — usually of size 1, 2, 3, 4, 6 or 8.
2.27 Verify $\hat\varphi\circ\varphi=[2]$ for the 2-isogeny on $y^2=x^3-x$ at a specific point.
Take $E:y^2=x^3-x$ ($a=0,b=-1$) and a non-torsion point on a twist... $E$ itself has rank 0, so use $E:y^2=x^3-25x$ (congruent number 5) with $P=(-4,6)$.
? E = ellinit([0,0,0,-25,0]); P = [-4,6];
? ellisoncurve(E,P)
% 1
? [Ep, phi] = ellisogeny(E, [0,0]);
? Epc = ellinit(Ep);
? Q = ellisogenyapply(phi, P)
? [E2, psi] = ellisogeny(Epc, [0,0]);
? R = ellisogenyapply(psi, Q)
? \\ compare with 2P on E, after the identification E'' = E:
? ellmul(E, P, 2)
$R$ equals $2P$ up to the isomorphism $E''\cong E$ ($x\mapsto4x,y\mapsto8y$). Applying ellchangecurve with $[u,r,s,t]=[1/2,0,0,0]$ makes the comparison exact.
2.28 Find a curve over $\mathbb{Q}$ with a rational 37-isogeny.
? E = ellinit([0,0,1,-1,0]); \\ 37a1, rank 1
? ellisomat(E)[2]
% [1] \\ no isogenies
? \\ the 37-isogeny curve is 1225h1:
? E = ellinit([1,1,1,-8,6]);
? M = ellisomat(E); M[2]
% [1, 37; 37, 1]
? E.j
The two curves of conductor 1225 with a 37-isogeny have $j$-invariants $-9317$ and $-162677523113838677$. These are the only $j$-invariants over $\mathbb{Q}$ admitting a rational 37-isogeny (Mazur). Searching the LMFDB for "isogeny degree 37" confirms just one isogeny class of each conductor in a short list.
2.29 Prove $\deg[m]=m^2$ using the dual.
Take $\varphi=[m]$. Then $\hat{[m]}=[m]$ (a property in the theorem), so $[m]\circ[m]=[m^2]$ and $\deg$ is multiplicative: $$\deg[m]\cdot\deg[m]=\deg[m^2].$$ Also $[m]\circ\widehat{[m]}=[m\cdot?]$... cleaner: use that $\deg$ is a quadratic form on $\operatorname{End}(E)$ with $\deg(\alpha)=\alpha\hat\alpha$. For $\alpha=[m]$, $\hat\alpha=[m]$, so $\deg[m]=[m][m]=[m^2]$, which as an integer is $m^2$. ∎
Concretely this also matches $\#E[m]=m^2$ in characteristic 0, where $[m]$ is separable.
$\operatorname{End}(E)=\{\text{isogenies }E\to E\}\cup\{0\}$, a ring under pointwise addition and composition. It always contains $\mathbb{Z}$ via $m\mapsto[m]$. $\operatorname{End}_K(E)$ denotes endomorphisms defined over $K$.
$\operatorname{End}(E)$ (over $\overline K$) is one of:
(An order in a number field $F$ is a subring that is a finitely generated $\mathbb{Z}$-module of full rank, e.g. $\mathbb{Z}[\sqrt{-5}]$ or $\mathbb{Z}[\frac{1+\sqrt{-7}}2]$.)
Over $\mathbb{C}$ this is transparent: $\operatorname{End}(\mathbb{C}/\Lambda)=\{\alpha\in\mathbb{C}:\alpha\Lambda\subseteq\Lambda\}$. Generically only integers preserve a lattice; occasionally $\Lambda$ has extra multiplicative symmetry, and then $\alpha$ satisfies a quadratic equation with negative discriminant.
A curve over $\mathbb{Q}$ has CM iff its $j$-invariant is one of $$0,\ 1728,\ -3375,\ 8000,\ 54000,\ 287496,\ -32768,\ -884736,\ -884736000,$$ $$16581375,\ -147197952000,\ -262537412640768000,\ \text{and } 2^45^3 11^3 = 1\,262\,000\;(\text{disc} -28).$$ These correspond to the imaginary quadratic orders of class number 1, with discriminants $-3,-4,-7,-8,-11,-12,-16,-19,-27,-28,-43,-67,-163$.
For a CM curve with CM by an order in $\mathbb{Q}(\sqrt{-d})$: $$a_p=0 \iff p \text{ is inert in } \mathbb{Q}(\sqrt{-d}),$$ which happens for exactly half of all primes. So half the terms of the Mestre–Nagao sum vanish identically, and the sum's distribution is completely different from the non-CM case. A CM curve of rank 0 can score like a non-CM curve of positive rank, or vice versa. Rank searches must detect and exclude CM families. The test is cheap: check whether $j$ is in the list above, or check whether $a_p=0$ for suspiciously many small $p$.
? E = ellinit([0,0,0,0,1]); \\ j = 0
? ellcm(E) \\ CM discriminant, 0 if none
% -3
? ellinit([0,0,0,-1,0]) . j
% 1728
? ellcm(ellinit([0,0,0,-1,0]))
% -4
? ellcm(ellinit([0,0,0,-7,6]))
% 0 \\ no CM
? \\ empirical test: how many a_p vanish?
? E = ellinit([0,0,0,0,1]);
? #select(p -> ellap(E,p)==0, primes([5,200])) / #primes([5,200]) * 1.0
% 0.5... \\ half: CM signature
2.30 Exhibit the CM endomorphism of $y^2=x^3+Ax$ explicitly and verify it squares to $[-1]$.
Define $\iota(x,y)=(-x,\,iy)$ where $i^2=-1$. Check it lands on the curve: $(iy)^2=-y^2=-(x^3+Ax)=(-x)^3+A(-x)$ ✓.
$\iota^2(x,y)=\iota(-x,iy)=(x,\,i\cdot iy)=(x,-y)=[-1](x,y)$ ✓.
So $\mathbb{Z}[\iota]\cong\mathbb{Z}[i]\subseteq\operatorname{End}(E)$. Note $\iota$ is defined over $\mathbb{Q}(i)$, not $\mathbb{Q}$ — a general fact: CM endomorphisms of a curve over $\mathbb{Q}$ are never all rational, since $\operatorname{End}_\mathbb{Q}(E)=\mathbb{Z}$ for $E/\mathbb{Q}$.
2.31 Compare the Mestre–Nagao sum $\sum_{p\le X}a_p\log p/p$ for a CM rank-0 curve and a non-CM rank-0 curve. What goes wrong?
MN(E, X) = my(s = 0.0);
forprime(p = 5, X, if(E.disc % p, s += ellap(E,p)*log(p)/p)); s;
? Ecm = ellinit([0,0,0,0,1]); \\ CM by Z[zeta_3], rank 0
? Encm = ellinit([0,0,1,-1,0]); \\ 37a1 -- actually rank 1
? Er0 = ellinit([0,-1,1,0,0]); \\ 11a3, rank 0, no CM
? [MN(Ecm,10000), MN(Er0,10000)]
The CM curve's sum is dominated by the half of primes with $a_p=0$ contributing nothing, and the surviving half has $a_p$ from a much thinner distribution. Its variance is halved and its behaviour under truncation is quite different, so the empirical threshold you calibrate on non-CM curves misfires. Since a rank sieve keeps the most negative few in $10^6$, a systematically shifted subpopulation floods the results with false positives. Fix: filter with ellcm(E) != 0 before scoring, or exclude CM $j$-invariants at family-design time.
2.32 Show $\operatorname{End}(E)$ has no zero divisors, hence is an integral domain.
If $\alpha,\beta\ne0$ then both are isogenies, hence surjective with finite kernel. So $\alpha\circ\beta$ is surjective, hence nonconstant, hence $\ne0$. ∎
Combined with $\deg$ being a positive-definite quadratic form and $\operatorname{End}(E)$ being a finitely generated $\mathbb{Z}$-module (torsion-free, of rank $\le4$), one gets the classification: rank 1 gives $\mathbb{Z}$, rank 2 an imaginary quadratic order, rank 4 a quaternion order. Rank 3 is impossible, and rank 2 with real quadratic is impossible because $\deg$ is positive definite.
$$E[m]=\{P\in E(\overline K):[m]P=\mathcal{O}\}=\ker[m],\qquad E_{\text{tors}}=\bigcup_{m\ge1}E[m].$$
Let $\operatorname{char}K=p$ (possibly 0).
Proof for $p\nmid m$. $[m]$ is separable (its effect on the invariant differential is $[m]^*\omega=m\omega\ne0$), so $\#E[m]=\#\ker[m]=\deg[m]=m^2$. Also $E[m]$ is killed by $m$ and needs at most 2 generators (over $\mathbb{C}$ it is $\frac1m\Lambda/\Lambda$; in general because $E[\ell]$ for prime $\ell$ has order $\ell^2$ and is killed by $\ell$, so it is $(\mathbb{Z}/\ell)^2$). Hence $E[m]\cong(\mathbb{Z}/m)^2$. ∎
$P=(x,y)$ satisfies $2P=\mathcal{O}$ iff $P=-P$ iff $2y+a_1x+a_3=0$. In short form: $y=0$. Hence $$E[2]=\{\mathcal{O}\}\cup\{(e_i,0):f(e_i)=0\},$$ with $e_1,e_2,e_3$ the roots of $x^3+Ax+B$. Over $\mathbb{Q}$:
| Factorisation of $f$ over $\mathbb{Q}$ | $E(\mathbb{Q})[2]$ |
|---|---|
| irreducible | trivial |
| one rational root | $\mathbb{Z}/2\mathbb{Z}$ |
| splits completely | $(\mathbb{Z}/2\mathbb{Z})^2$ |
Descent by 2-isogeny needs one rational 2-torsion point (Lesson 57). Full 2-descent works regardless but is far easier when $f$ splits. And the rank formula $$\dim_{\mathbb{F}_2}\mathrm{Sel}^{(2)}=r+\dim_{\mathbb{F}_2}E(\mathbb{Q})[2]+\dim_{\mathbb{F}_2}\text{Ш}[2]$$ carries $\dim E(\mathbb{Q})[2]$ explicitly, so you always need to know it.
? E = ellinit([0,0,0,-7,6]); \\ x^3-7x+6 = (x-1)(x-2)(x+3)
? elltors(E)
% [4, [2,2], [[1,0],[2,0]]] \\ order 4, structure (Z/2)^2, generators
? factor(x^3 - 7*x + 6)
% [x-1,1; x-2,1; x+3,1]
? apply(P -> ellorder(E,P), [[1,0],[2,0],[-3,0]])
% [2, 2, 2]
? elltors(ellinit([0,0,0,0,1]))
% [6, [6], [[2,3]]] \\ Z/6
3.1 Find all $E:y^2=x^3+Ax$ with $(\mathbb{Z}/2)^2\subseteq E(\mathbb{Q})$.
$f(x)=x(x^2+A)$ splits over $\mathbb{Q}$ iff $-A$ is a square, say $A=-c^2$. Then $f=x(x-c)(x+c)$ and $E[2]=\{\mathcal{O},(0,0),(c,0),(-c,0)\}\subseteq E(\mathbb{Q})$.
? for(c=1,5, print(c, " ", elltors(ellinit([0,0,0,-c^2,0]))[2]))
1 [2, 2]
2 [2, 2]
3 [2, 2]
4 [2, 2]
5 [2, 2]
These are exactly the congruent-number curves $y^2=x^3-n^2x$! Every one has full rational 2-torsion, which is why descent by 2-isogeny works so smoothly on the congruent number problem.
3.2 Show that $E[m]\cong(\mathbb{Z}/m)^2$ forces $\mu_m\subseteq K$ if $E[m]\subseteq E(K)$. (Anticipates the Weil pairing.)
The Weil pairing $e_m:E[m]\times E[m]\to\mu_m$ is nondegenerate and Galois-equivariant. If all of $E[m]$ is $K$-rational then for $\sigma\in G_K$ and any $P,Q\in E[m]$, $$\sigma\bigl(e_m(P,Q)\bigr)=e_m(\sigma P,\sigma Q)=e_m(P,Q),$$ so $e_m(P,Q)\in K$. Nondegeneracy means $e_m$ is surjective onto $\mu_m$, so $\mu_m\subseteq K$. ∎
Consequence for $K=\mathbb{Q}$: $\mu_m\subseteq\mathbb{Q}$ only for $m=1,2$. So a curve over $\mathbb{Q}$ can have full $m$-torsion rational only for $m\le2$ — a first, cheap constraint towards Mazur.
3.3 Use division polynomials to find all rational 5-torsion on $y^2+y=x^3-x^2$ (curve 11a3).
? E = ellinit([0,-1,1,0,0]);
? p5 = elldivpol(E, 5);
? poldegree(p5)
% 12 \\ = (25-1)/2
? polrootsQ(p5)
% [0, 1]
? \\ lift to points:
? elltors(E)
% [5, [5], [[0,0]]]
? ellorder(E, [0,0])
% 5
? [ellmul(E,[0,0],k) | k <- [1..5]]
$x=0$ and $x=1$ give the four points of order 5: $(0,0),(0,-1),(1,0),(1,-1)$. Together with $\mathcal{O}$ they form $\mathbb{Z}/5\mathbb{Z}$. Conductor 11 is the smallest conductor over $\mathbb{Q}$, and this curve realises the largest prime torsion allowed by Mazur below 7.
For $m$ prime to $\operatorname{char}K$ there is a map $$e_m:E[m]\times E[m]\longrightarrow\mu_m\subset\overline K^\times$$ which is:
Let $T\in E[m]$. The divisor $m(T)-m(\mathcal{O})$ has degree 0 and sums to $mT-m\mathcal{O}=\mathcal{O}$ in the group, so it is principal: $m(T)-m(\mathcal{O})=\operatorname{div}(f_T)$ for some $f_T$. Also, choosing $T'$ with $mT'=T$, the divisor $\sum_{R\in E[m]}\bigl((T'+R)-(R)\bigr)$ is principal, $=\operatorname{div}(g_T)$, and one checks $g_T^m=f_T\circ[m]$ up to constant.
Now for $S\in E[m]$, $$\frac{g_T(X+S)}{g_T(X)}$$ has $m$-th power equal to $\frac{f_T([m]X+[m]S)}{f_T([m]X)}=1$, so it is a constant $m$-th root of unity. Define $e_m(S,T)$ to be that constant.
Evaluating $e_m$ efficiently is Miller's algorithm: build $f_T$ by a double-and-add recursion, accumulating line functions. It runs in $O(\log m)$ curve operations and is the foundation of all pairing-based cryptography. PARI: ellweilpairing(E, P, Q, m).
? E = ellinit([0,0,0,-1,0], 13); \\ over F_13
? ellcard(E)
% 20
? T = elltors(ellinit([0,0,0,-1,0]))[3]; \\ rational 2-torsion
? \\ over F_13 pick 2-torsion points:
? P = [0,0]; Q = [1,0];
? ellweilpairing(E, P, Q, 2)
% Mod(12, 13) \\ = -1, a primitive 2nd root of unity
? ellweilpairing(E, P, P, 2)
% Mod(1, 13) \\ alternating
3.4 Deduce $\det\bar\rho_{E,m}=\chi_{\text{cyc}}$ from Galois equivariance.
Pick a basis $P,Q$ of $E[m]$, so $\sigma P=aP+cQ$, $\sigma Q=bP+dQ$ with $\bar\rho(\sigma)=\begin{pmatrix}a&b\\c&d\end{pmatrix}$. Set $\zeta=e_m(P,Q)$, a primitive $m$-th root of unity by nondegeneracy. Then by bilinearity and alternation, $$e_m(\sigma P,\sigma Q)=e_m(aP+cQ,\ bP+dQ)=e_m(P,Q)^{ad}e_m(Q,P)^{cb}=\zeta^{ad-bc}=\zeta^{\det\bar\rho(\sigma)}.$$ Equivariance says this equals $\sigma(\zeta)=\zeta^{\chi_{\text{cyc}}(\sigma)}$. Since $\zeta$ is primitive, $\det\bar\rho(\sigma)\equiv\chi_{\text{cyc}}(\sigma)\pmod m$. ∎
3.5 Show that if $E/\mathbb{Q}$ has a rational point of order 3, then $\mathbb{Q}(E[3])$ contains $\mathbb{Q}(\sqrt{-3})$.
By the Weil pairing, $\mathbb{Q}(E[3])\supseteq\mathbb{Q}(\mu_3)=\mathbb{Q}(\zeta_3)=\mathbb{Q}(\sqrt{-3})$ — this holds whether or not there is a rational 3-torsion point, since $E[3]$ generates $\mu_3$ under the pairing. ✓
Consequently $[\mathbb{Q}(E[3]):\mathbb{Q}]$ is even, and $\bar\rho_{E,3}$ cannot have image in $\mathrm{SL}_2(\mathbb{F}_3)$ — the determinant is the surjective cyclotomic character.
3.6 Compute the Weil pairing on the full 3-torsion of $y^2=x^3+1$ over $\mathbb{F}_7$ and verify nondegeneracy.
? E = ellinit([0,0,0,0,1], 7);
? ellcard(E)
% 12
? ellgroup(E, 1)
% [12, [6,2], [g1, g2]]
? \\ 3-torsion: multiply generators to get order-3 elements
? G = ellgroup(E,1)[3];
? P = ellmul(E, G[1], 2); \\ order 3 if g1 has order 6
? ellorder(E, P)
% 3
? \\ need a second independent 3-torsion point; E[3] may not be rational over F_7
? ellweilpairing(E, P, P, 3)
% Mod(1, 7)
Over $\mathbb{F}_7$, $\mu_3\subset\mathbb{F}_7$ since $3\mid6=\#\mathbb{F}_7^\times$, so full 3-torsion can be rational; from the group structure $\mathbb{Z}/6\times\mathbb{Z}/2$ we see $E(\mathbb{F}_7)[3]\cong\mathbb{Z}/3$ only, so the second 3-torsion generator lives over $\mathbb{F}_{49}$. Pairing $P$ with a point of $E[3]$ over $\mathbb{F}_{49}$ gives a primitive cube root of unity, confirming nondegeneracy.
This lesson supplies the language in which descent and modularity are both stated.
$G_\mathbb{Q}=\operatorname{Gal}(\overline{\mathbb{Q}}/\mathbb{Q})$ acts on $E(\overline{\mathbb{Q}})$ coordinatewise. Because the group law is given by rational functions with coefficients in $\mathbb{Q}$, this action is by group automorphisms, and it preserves $E[m]$.
Choosing a $\mathbb{Z}/m$-basis of $E[m]\cong(\mathbb{Z}/m)^2$ gives $$\bar\rho_{E,m}:G_\mathbb{Q}\longrightarrow\operatorname{GL}_2(\mathbb{Z}/m\mathbb{Z}),$$ well defined up to conjugation. Its kernel cuts out the field $\mathbb{Q}(E[m])$, so $\operatorname{Gal}(\mathbb{Q}(E[m])/\mathbb{Q})\hookrightarrow\operatorname{GL}_2(\mathbb{Z}/m)$.
$$T_\ell E=\varprojlim_n E[\ell^n]\cong\mathbb{Z}_\ell^2,\qquad V_\ell E=T_\ell E\otimes_{\mathbb{Z}_\ell}\mathbb{Q}_\ell,$$ with transition maps $[\ell]:E[\ell^{n+1}]\to E[\ell^n]$. This gives $\rho_{E,\ell}:G_\mathbb{Q}\to\operatorname{GL}_2(\mathbb{Z}_\ell)$.
For $p\nmid m\Delta$ (so $E$ has good reduction and $p\nmid m$), $\bar\rho_{E,m}$ is unramified at $p$ and $$\operatorname{tr}\bar\rho_{E,m}(\operatorname{Frob}_p)\equiv a_p\ (\bmod\ m),\qquad \det\bar\rho_{E,m}(\operatorname{Frob}_p)\equiv p\ (\bmod\ m).$$ So the characteristic polynomial of $\operatorname{Frob}_p$ is $X^2-a_pX+p$ — exactly the characteristic polynomial of the geometric Frobenius from Lesson 27.
It places elliptic curves inside the general framework of 2-dimensional Galois representations. Modularity (Lesson 70) is the statement that $\rho_{E,\ell}$ arises from a weight-2 modular form; Serre's conjecture, Fermat's Last Theorem and much of modern number theory live here. For our purposes the payoff is that $L(E,s)$ has analytic continuation, which is what makes conditional rank bounds possible at all.
If $E/\mathbb{Q}$ has no CM then $\bar\rho_{E,\ell}$ is surjective onto $\operatorname{GL}_2(\mathbb{F}_\ell)$ for all but finitely many $\ell$, and $\rho_{E,\ell}$ has open image in $\operatorname{GL}_2(\mathbb{Z}_\ell)$ for all $\ell$. For CM curves the image is contained in the normaliser of a Cartan subgroup — much smaller.
? E = ellinit([0,0,1,-1,0]); \\ 37a1
? \\ the mod-l representation's image, via the l-division field:
? f3 = elldivpol(E, 3); polgalois(f3) \\ Galois group of the 3-division poly
? \\ nonsurjective primes (needs a helper; Sage has E.galois_representation())
? \\ quick check: for surjective mod-l, a_p mod l should hit all traces
? l = 5; Set([ellap(E,p) % l | p <- primes([7,500])])
% [0, 1, 2, 3, 4] \\ all residues: consistent with surjectivity
The short exact sequence of $G_\mathbb{Q}$-modules $$0\longrightarrow E[m]\longrightarrow E(\overline{\mathbb{Q}})\xrightarrow{\ [m]\ }E(\overline{\mathbb{Q}})\longrightarrow0$$ (surjectivity because $\overline{\mathbb{Q}}$ is algebraically closed) is the entire content of Phase 5. Taking Galois cohomology of it produces the descent map and the Selmer group.
3.7 For $E:y^2=x^3-x$, compute the image of $\bar\rho_{E,2}$ and explain why it is not surjective.
$E[2]$ has all three nontrivial points rational ($x=0,\pm1$), so $G_\mathbb{Q}$ acts trivially: $\bar\rho_{E,2}$ is the trivial representation, image $\{I\}$, far from $\operatorname{GL}_2(\mathbb{F}_2)\cong S_3$.
In general $\operatorname{im}\bar\rho_{E,2}\cong\operatorname{Gal}$ of the splitting field of the cubic $f$: trivial if $f$ splits, $\mathbb{Z}/2$ if $f$ has exactly one rational root, $\mathbb{Z}/3$ if $f$ is irreducible with square discriminant, and $S_3$ (surjective) if $f$ is irreducible with non-square discriminant.
? polgalois(x^3 - x) \\ splits: trivial
? polgalois(x^3 - x - 1) \\ [6,-1,1,"S3"]: surjective mod 2
? issquare(poldisc(x^3-x-1))
% 0
3.8 Show that $\operatorname{tr}\bar\rho_{E,m}(\operatorname{Frob}_p)\equiv a_p$ follows from Lesson 27.
For $p$ of good reduction and $p\nmid m$, reduction gives a $G_{\mathbb{Q}_p}$-equivariant isomorphism $E[m]\cong\tilde E[m]$ (injectivity from the formal group, Lesson 37; surjectivity by counting, both have $m^2$ elements). The Frobenius element acts on $\tilde E[m]$ as the geometric Frobenius $\phi$, which by Lesson 27 satisfies $\phi^2-a_p\phi+p=0$. So the matrix of $\operatorname{Frob}_p$ on $E[m]$ satisfies the same equation mod $m$, giving trace $a_p$ and determinant $p$. ∎
3.9 Use the trace identity to compute $a_p\bmod3$ for $y^2=x^3+1$ from the 3-division polynomial.
$\psi_3=3x^4+12x=3x(x^3+4)$. Its rational root $x=0$ gives the rational 3-torsion $(0,\pm1)$, so $\bar\rho_{E,3}$ has a fixed vector: the matrix is $\begin{pmatrix}1&*\\0&\chi(p)\end{pmatrix}$ with $\det\equiv p$. Hence $$a_p\equiv 1+p\pmod3.$$
? E = ellinit([0,0,0,0,1]);
? for(i=3,15, my(p=prime(i)); print(p, " ", ellap(E,p)%3, " ", (1+p)%3))
5 0 0
7 2 2
11 0 0
13 2 2
...
✓ This is the general principle: a rational $\ell$-torsion point makes $\bar\rho_{E,\ell}$ reducible, giving a congruence $a_p\equiv1+p\pmod\ell$ — the source of Mazur's Eisenstein-ideal argument.
We now specialise to $E/\mathbb{Q}$ and study it through its reductions, which is how all computation proceeds.
Fix a minimal Weierstrass model with $a_i\in\mathbb{Z}$. Reducing coefficients mod $p$ gives a curve $\tilde E/\mathbb{F}_p$, possibly singular. Reduction of points: write $P=[X:Y:Z]$ with $X,Y,Z\in\mathbb{Z}$ coprime, and set $\tilde P=[\tilde X:\tilde Y:\tilde Z]$.
Over $\mathbb{Q}_p$ define $$E_0(\mathbb{Q}_p)=\{P:\tilde P\in\tilde E^{\text{ns}}(\mathbb{F}_p)\},\qquad E_1(\mathbb{Q}_p)=\{P:\tilde P=\tilde{\mathcal{O}}\}.$$ These are subgroups with $$0\to E_1(\mathbb{Q}_p)\to E_0(\mathbb{Q}_p)\to\tilde E^{\text{ns}}(\mathbb{F}_p)\to0,$$ and $E(\mathbb{Q}_p)/E_0(\mathbb{Q}_p)$ is finite of order $c_p$, the Tamagawa number.
Set $z=-x/y$ and $w=-1/y$ near $\mathcal{O}$. The Weierstrass equation becomes $w=z^3+a_1zw+a_2z^2w+\cdots$, which can be solved recursively for $w$ as a power series in $z$ with $\mathbb{Z}[a_i]$ coefficients. The group law then becomes a formal power series $$F(z_1,z_2)=z_1+z_2-a_1z_1z_2-a_2(z_1^2z_2+z_1z_2^2)+\cdots\in\mathbb{Z}[a_i][[z_1,z_2]],$$ the formal group $\hat E$. For any complete local ring with maximal ideal $\mathfrak{m}$, $\hat E(\mathfrak m)$ is $\mathfrak m$ with the group law $F$.
$E_1(\mathbb{Q}_p)\cong\hat E(p\mathbb{Z}_p)$ via $P\mapsto z(P)=-x(P)/y(P)$. And for $p\ge3$ (more precisely whenever $p\gt e+1$ with $e$ the ramification index, so always for $\mathbb{Q}_p$ with $p\ge3$), $\hat E(p\mathbb{Z}_p)$ is torsion-free — in fact isomorphic to $(\mathbb{Z}_p,+)$ via the formal logarithm.
For $p\ge3$ of good reduction, $$E(\mathbb{Q})_{\text{tors}}\hookrightarrow\tilde E(\mathbb{F}_p).$$ Proof: the kernel of reduction restricted to torsion is $E_1(\mathbb{Q}_p)_{\text{tors}}=\hat E(p\mathbb{Z}_p)_{\text{tors}}=0$.
Algorithmic payoff: $\#E(\mathbb{Q})_{\text{tors}}$ divides $\gcd_p\#\tilde E(\mathbb{F}_p)$ over good $p\ge3$. Two or three primes usually pin it down.
Reduction is wildly non-injective on the free part — $E(\mathbb{Q})$ is infinite and $\tilde E(\mathbb{F}_p)$ is finite. That failure is exactly what makes rank hard. But the relation lattices $L_p$ from Lesson 29 still constrain the free part, and intersecting them over many $p$ can prove independence (Lesson 90).
? E = ellinit([0,0,0,0,-2]); \\ y^2 = x^3 - 2
? g = 0;
? forprime(p=5, 50, if(E.disc % p, g = gcd(g, p+1-ellap(E,p))));
? g
% 1
? elltors(E)
% [1, [], []] \\ trivial torsion, confirmed
? \\ so (3,5) has infinite order:
? ellorder(E, [3,5])
% 0
3.10 Show $\#E(\mathbb{Q})_{\text{tors}}$ divides $\gcd$ of $\#\tilde E(\mathbb{F}_p)$ for $y^2=x^3+1$ using $p=5,7,11$, and compare with the true torsion.
From Lesson 0 Exercise 0.4: $\#\tilde E(\mathbb{F}_5)=6$, $\#\tilde E(\mathbb{F}_7)=12$, $\#\tilde E(\mathbb{F}_{11})=12$. $\gcd(6,12,12)=6$.
? elltors(ellinit([0,0,0,0,1]))
% [6, [6], [[2, 3]]]
Torsion is exactly $\mathbb{Z}/6$, matching the bound with equality. Note that adding more primes cannot reduce the bound below 6, since $6\mid\#\tilde E(\mathbb{F}_p)$ for every good $p$ — the rational 6-torsion forces it.
3.11 Compute the first terms of the formal group law for $y^2=x^3+Ax+B$.
With $a_1=a_2=a_3=0$, $a_4=A$, $a_6=B$: the relation $w=z^3+Az^5w^2+Bz^6w^3+\cdots$ solves to $$w(z)=z^3+Az^7+Bz^9+O(z^{11}).$$ The formal group law starts $$F(z_1,z_2)=z_1+z_2-2A(z_1^4z_2+z_1z_2^4)-\cdots$$ (no quadratic or cubic terms since $a_1=a_2=0$).
? \ps 12
? E = ellinit([0,0,0,3,5]);
? ellformalw(E) \\ w as a series in z
? ellformaladd(E) \\ the formal group law F(z1,z2)
? ellformallog(E) \\ the formal logarithm
3.12 Explain why the injectivity of reduction on torsion can fail at $p=2$.
The formal group $\hat E(2\mathbb{Z}_2)$ can have 2-torsion. The formal logarithm $\log_{\hat E}(z)=z+\sum_{n\ge2}\frac{c_n}{n}z^n$ has denominators; it converges and is an isomorphism onto $(p\mathbb{Z}_p,+)$ only when $p\gt2$ (more generally $v(p)\lt p-1$). At $p=2$ the argument breaks and $\hat E(2\mathbb{Z}_2)$ may contain a point of order 2.
? E = ellinit([0,0,0,-1,0]); \\ full 2-torsion
? \\ mod 2 the curve is singular (Delta = 64), so this is not a good prime anyway.
? \\ try a curve with good reduction at 2:
? F = ellinit([0,0,1,-1,0]); \\ 37a1, Delta = 37
? ellcard(ellinit([0,0,1,-1,0], 2))
% 5
? elltors(F)
% [1, [], []]
Here it happens to work, but the theorem is only guaranteed for $p\ge3$, so a careful implementation of "torsion by gcd" skips $p=2$ — as PARI's does.
Fix the minimal model. $E$ has at $p$:
$E$ is semistable at $p$ if the reduction is good or multiplicative, and semistable if this holds at every $p$.
The names come from the group of smooth points (Lesson 12): $$\tilde E^{\text{ns}}(\mathbb{F}_p)\cong\begin{cases}\mathbb{F}_p^\times&\text{split multiplicative, order }p-1,\\ \ker\bigl(N:\mathbb{F}_{p^2}^\times\to\mathbb{F}_p^\times\bigr)&\text{non-split, order }p+1,\\ \mathbb{F}_p^+&\text{additive, order }p.\end{cases}$$ which gives $a_p=1,-1,0$ respectively.
Additive reduction can always be removed by a quadratic (or higher) twist over an extension: $E$ acquires good or multiplicative reduction over a ramified extension. This is the semistable reduction theorem. Consequently additive primes are "less serious" arithmetically than they look — but they still cost you: the conductor exponent is $\ge2$ there, and every conditional rank bound scales with $\log N$.
The Néron model $\mathcal{E}/\mathbb{Z}_p$ is the smooth group scheme over $\mathbb{Z}_p$ with generic fibre $E/\mathbb{Q}_p$ that is universal for smooth $\mathbb{Z}_p$-schemes: $\mathcal{E}(\mathbb{Z}_p)=E(\mathbb{Q}_p)$. Its special fibre $\mathcal{E}_s$ may be disconnected; its identity component $\mathcal{E}_s^0$ corresponds to $E_0(\mathbb{Q}_p)$, and the component group is $$\Phi_p=\mathcal{E}_s/\mathcal{E}_s^0,\qquad c_p:=\#\Phi_p(\mathbb{F}_p).$$
So $c_p$, the Tamagawa number, is the index $[E(\mathbb{Q}_p):E_0(\mathbb{Q}_p)]$. It appears as a factor in the strong BSD formula (Lesson 74).
? E = ellminimalmodel(ellinit([0,0,0,-7,6]));
? E.disc
% 246016 = 2^10 * 241
? factor(E.disc)
? elllocalred(E, 2)
% [10, -1, [1,0,0,0], 4] \\ [f_p, Kodaira code, change of vars, c_p]
? elllocalred(E, 241)
? ellglobalred(E)
% [N, v, prod c_p, ...]
? \\ classify:
? for(i=1,3, my(p=factor(E.disc)[i,1]);
print(p, " f=", elllocalred(E,p)[1], " c=", elllocalred(E,p)[4],
" c4 div? ", E.c4 % p == 0))
3.13 Determine the reduction type of $y^2+y=x^3-x^2-10x-20$ at 11.
? E = ellinit([0,-1,1,-10,-20]);
? E.disc
% -161051
? factor(-161051)
% [-1,1; 11,5]
? E.c4
% 496
? 496 % 11
% 1 \\ nonzero: multiplicative
? elllocalred(E, 11)
% [1, 5, [1,0,0,0], 5] \\ f=1, type I_5, c_11 = 5
? ellrootno(E, 11)
% -1 \\ local root number -1: split multiplicative
$v_{11}(\Delta)=5$, $11\nmid c_4$, so multiplicative reduction of type $\mathrm{I}_5$. Since $c_{11}=5=n$, it is split multiplicative (for non-split $\mathrm{I}_n$, $c_p\in\{1,2\}$). Hence $a_{11}=1$.
3.14 Find a curve with additive reduction at 3 and verify $a_3=0$.
? E = ellminimalmodel(ellinit([0,0,0,0,1])); \\ y^2 = x^3 + 1
? E.disc
% -432 = -2^4 * 3^3
? [E.c4 % 3, E.disc % 3]
% [0, 0] \\ both divisible: additive
? elllocalred(E,3)
% [3, 3, [...], 1] \\ f_3 = 3, Kodaira code 3 = type III?
? ellap(E, 3)
% 0
$c_4=0$ for this curve ($j=0$), so $3\mid c_4$ trivially: additive reduction at both 2 and 3. $a_3=0$ ✓, consistent with the additive rule. Note $f_3=3\gt2$, indicating wild ramification at 3 — expected since $3$ is a small prime and the curve has $j=0$.
3.15 Show that a twist can turn additive into good reduction. Take $y^2=x^3-4$ and twist appropriately.
? E = ellinit([0,0,0,0,-4]);
? ellglobalred(E)[1]
% 1728 = 2^6 * 3^3
? elllocalred(E,2)[1], elllocalred(E,3)[1] \\ conductor exponents
? \\ sextic twist by 2 (since j=0):
? F = ellminimalmodel(ellinit([0,0,0,0,-4*2^3]));
? ellglobalred(F)[1]
Twisting a $j=0$ curve $y^2=x^3+B$ by $d$ sends $B\mapsto dB$ (a sextic twist). Choosing $d$ to make $B$ a perfect sixth power times a unit reduces the conductor. In general the semistable reduction theorem guarantees good/multiplicative reduction after a finite extension; over $\mathbb{Q}$ itself one can often only reduce the conductor exponent, not eliminate it. The clean statement is: additive reduction at $p\ge5$ always becomes good or multiplicative over a ramified quadratic extension of $\mathbb{Q}_p$.
Bad reduction has finer structure than node-versus-cusp: the special fibre of the minimal regular model (a blow-up of the Weierstrass model) is a configuration of curves, and Kodaira classified the possibilities.
$$\mathrm{I}_0,\quad \mathrm{I}_n\ (n\ge1),\quad \mathrm{II},\ \mathrm{III},\ \mathrm{IV},\quad \mathrm{I}_0^*,\ \mathrm{I}_n^*\ (n\ge1),\quad \mathrm{IV}^*,\ \mathrm{III}^*,\ \mathrm{II}^*.$$ $\mathrm{I}_0$ is good reduction; $\mathrm{I}_n$ ($n\ge1$) is multiplicative; all starred types and $\mathrm{II},\mathrm{III},\mathrm{IV}$ are additive.
Two numbers attached to each type will recur:
| Type | PARI code | $m_v$ | $c_p$ | $v(\Delta)$ | $f_p$ |
|---|---|---|---|---|---|
| $\mathrm{I}_0$ | 1 | 1 | 1 | 0 | 0 |
| $\mathrm{I}_n$ split | $4+n$ | $n$ | $n$ | $n$ | 1 |
| $\mathrm{I}_n$ non-split | $4+n$ | $n$ | $\gcd(n,2)$ | $n$ | 1 |
| $\mathrm{II}$ | 2 | 1 | 1 | 2 | 2 |
| $\mathrm{III}$ | 3 | 2 | 2 | 3 | 2 |
| $\mathrm{IV}$ | 4 | 3 | 1 or 3 | 4 | 2 |
| $\mathrm{I}_0^*$ | $-1$ | 5 | 1, 2 or 4 | 6 | 2 |
| $\mathrm{I}_n^*$ | $-4-n$ | $n+5$ | 2 or 4 | $6+n$ | 2 |
| $\mathrm{IV}^*$ | $-4$ | 7 | 1 or 3 | 8 | 2 |
| $\mathrm{III}^*$ | $-3$ | 8 | 2 | 9 | 2 |
| $\mathrm{II}^*$ | $-2$ | 9 | 1 | 10 | 2 |
(The $f_p$ column is for $p\ge5$; at $p=2,3$ wild ramification adds $\delta_p\ge0$.)
A mechanical procedure taking $E/\mathbb{Q}_p$ to: the minimal model, the Kodaira type, $c_p$, and the conductor exponent $f_p$. Roughly eleven steps of the form "is this coefficient divisible by $p$? If so, translate $(x,y)$ and repeat." It always terminates. Implemented as elllocalred in PARI, E.local_data(p) in Sage.
The Shioda–Tate formula (Lesson 80) for an elliptic surface reads $$\operatorname{rank}\mathcal{E}(\overline k(t))=\rho(S)-2-\sum_v(m_v-1).$$ So each reducible bad fibre eats rank. A $\mathrm{II}^*$ fibre costs 8, an $\mathrm{I}_2$ fibre costs 1, and an $\mathrm{I}_1$ or $\mathrm{II}$ fibre costs nothing. This is the single most important design constraint when constructing high-rank families: keep the discriminant squarefree.
kodaira(code) = if(code == 1, "I0",
if(code == 2, "II", if(code == 3, "III", if(code == 4, "IV",
if(code > 4, concat("I", code-4),
if(code == -1, "I0*", if(code == -2, "II*",
if(code == -3, "III*", if(code == -4, "IV*",
concat(concat("I", -code-4), "*"))))))))));
? E = ellminimalmodel(ellinit([0,0,0,-7,6]));
? fordiv(ellglobalred(E)[1], d, if(isprime(d),
my(L = elllocalred(E,d));
print(d, " ", kodaira(L[2]), " c=", L[4], " f=", L[1])))
3.16 Find a curve with a $\mathrm{II}^*$ fibre and compute how much rank it would cost on a surface.
? \\ search small curves for Kodaira type II* (code -2)
? for(a=-5,5, for(b=-5,5,
if(4*a^3+27*b^2,
my(E = ellminimalmodel(ellinit([0,0,0,a,b])));
fordiv(ellglobalred(E)[1], d, if(isprime(d),
if(elllocalred(E,d)[2] == -2,
print([a,b], " at p=", d)))))));
$y^2=x^3+1$ at $p=2$: $v_2(\Delta)=4$... let us take a cleaner one. $y^2 = x^3 + p^5$ for $p\ge5$ gives $v_p(\Delta)=10$ and type $\mathrm{II}^*$. Then $m_v=9$, so on an elliptic surface such a fibre contributes $m_v-1=8$ to the Shioda–Tate sum — the entire rank budget of a rational elliptic surface ($\rho=10$, budget $10-2=8$). A single $\mathrm{II}^*$ fibre forces generic rank 0.
3.17 Verify $c_p=n$ for split $\mathrm{I}_n$ on the conductor-11 curve, and check $\prod c_p$ against ellglobalred.
? E = ellinit([0,-1,1,-10,-20]);
? elllocalred(E,11)
% [1, 5, [1,0,0,0], 5]
? ellglobalred(E)
% [11, [1,0,0,0], 5] \\ third entry is the product of Tamagawa numbers
? valuation(E.disc, 11)
% 5
Type $\mathrm{I}_5$, $c_{11}=5=v_{11}(\Delta)$ ✓, and the global Tamagawa product is 5 since 11 is the only bad prime.
Cross-check with BSD: for this curve $L(E,1)=\Omega\cdot\frac{\#\text{Ш}\cdot\prod c_p}{(\#E(\mathbb{Q})_{\text{tors}})^2}=\Omega\cdot\frac{1\cdot5}{25}=\Omega/5$. Confirm with elllseries(E,1)/E.omega[1].
3.18 Write a GP function that, given $E$, returns the multiset $\{m_v\}$ over all bad primes.
mvals(E) =
{ my(N = ellglobalred(E)[1], res = List());
fordiv(N, d, if(isprime(d),
my(c = elllocalred(E,d)[2], m);
m = if(c == 1, 1,
if(c == 2, 1, if(c == 3, 2, if(c == 4, 3,
if(c > 4, c - 4,
if(c == -1, 5, if(c == -2, 9, if(c == -3, 8,
if(c == -4, 7, -c - 4 + 5)))))))));
listput(res, [d, m])));
Vec(res);
}
? mvals(ellminimalmodel(ellinit([0,0,0,-7,6])))
The Shioda–Tate cost is then vecsum(apply(t->t[2]-1, mvals(E))). On a rational elliptic surface, generic rank $=8$ minus this sum.
$$N=\prod_p p^{f_p},\qquad f_p=\begin{cases}0&\text{good reduction},\\ 1&\text{multiplicative},\\ 2&\text{additive},\ p\ge5,\\ 2+\delta_p&\text{additive},\ p=2,3,\end{cases}$$ with $0\le\delta_2\le6$ and $0\le\delta_3\le3$ measuring wild ramification. Hence $f_2\le8$ and $f_3\le5$.
The conceptual definition: $f_p=\epsilon_p+\delta_p$ where $\epsilon_p=\dim V_\ell E-\dim(V_\ell E)^{I_p}$ measures how much of the Galois representation is killed by the inertia group $I_p$, and $\delta_p$ is the Swan conductor. Additive reduction kills both dimensions ($\epsilon=2$), multiplicative kills one ($\epsilon=1$), good kills none.
Almost every analytic method scales with $N$:
This is why the 2026 rank-30 curve gets an upper bound of 31 rather than 30 directly, and needs the parity trick to close the gap.
? E = ellinit([0,-1,1,-10,-20]);
? ellglobalred(E)[1]
% 11 \\ smallest conductor over Q
? factor(E.disc)
% [-1,1; 11,5] \\ same primes, bigger exponents
? \\ conductor of a big curve:
? F = ellminimalmodel(ellinit([0,0,0,-10^20, 10^30]));
? sizedigit(ellglobalred(F)[1])
? sizedigit(F.disc)
? \\ semistable?
? issquarefree(ellglobalred(E)[1])
% 1
There is no elliptic curve over $\mathbb{Q}$ of conductor $\lt11$ — a theorem (Tate; Ogg), equivalent to the statement that there are no weight-2 cusp forms of level $\lt11$. Conductor 11 has one isogeny class of three curves. The LMFDB lists all curves of conductor up to $500\,000$.
3.19 Find all curves of conductor 11 and 15 in PARI (with pari-elldata installed).
? ellsearch(11)
% [["11a1", [0,-1,1,-10,-20], ...],
["11a2", [0,-1,1,-7820,-263580], ...],
["11a3", [0,-1,1,0,0], ...]]
? #ellsearch(15)
% 8 \\ eight curves, one isogeny class
? apply(c -> elltors(ellinit(c[2]))[2], ellsearch(15))
Conductor 15 has a single isogeny class of 8 curves linked by 2- and 4-isogenies, with torsion subgroups ranging over $\mathbb{Z}/2$, $\mathbb{Z}/4$, $\mathbb{Z}/8$ and $\mathbb{Z}/2\times\mathbb{Z}/4$ etc. — a nice illustration that torsion varies within an isogeny class while rank does not.
3.20 Show $N$ is an isogeny invariant by comparing $a_p$ across an isogeny class.
Isogenous curves have isomorphic $V_\ell E$ as Galois representations (an isogeny induces an isomorphism after tensoring with $\mathbb{Q}_\ell$, since the kernel is finite). The conductor is defined purely in terms of $V_\ell E$ and inertia, so it is the same. ∎
? M = ellisomat(ellinit([0,-1,1,-10,-20]))[1];
? apply(c -> ellglobalred(ellinit(c))[1], M)
% [11, 11, 11]
By contrast the discriminants differ: $-11^5$, $-11$, $-11^5$ etc.
3.21 Estimate how many $a_n$ you would need to compute $L(E,1)$ for a curve of conductor $10^{100}$, and comment.
The rapidly convergent series (Lesson 73) needs $n$ up to roughly $\sqrt N\cdot(\text{a few})$, so $n\sim10^{50}$. Computing $a_p$ for $10^{50}$ primes is impossible by many orders of magnitude — the number of atoms in the observable universe is about $10^{80}$, so $10^{50}$ operations at $10^{9}$/second would take $10^{41}$ seconds, versus $10^{17}$ seconds since the Big Bang.
Hence: for record curves, direct L-value computation is out of the question, and the only route to an upper bound is the explicit-formula inequality of Lesson 76, whose cost depends on a chosen parameter rather than on $N$.
Let $E:y^2=x^3+Ax+B$ with $A,B\in\mathbb{Z}$. If $P=(x,y)\in E(\mathbb{Q})$ is torsion and $P\ne\mathcal{O}$, then $x,y\in\mathbb{Z}$, and either $y=0$ (so $2P=\mathcal{O}$) or $y^2\mid\Delta$ (equivalently $y\mid\operatorname{disc}(f)$ up to the standard factor).
Integrality follows from the formal group: torsion points lie outside $E_1(\mathbb{Q}_p)$ for every $p\ge3$, and a separate argument handles $p=2$. The divisibility follows because $2P$ is also torsion hence integral, and the duplication formula forces $y\mid\Delta$.
It requires factoring $\Delta$. For a curve with a 150-digit discriminant that is infeasible. Use the reduction method instead, which never factors anything large.
Steps 1 and 3 are both fast; step 3's polynomials have degree $(\ell^2-1)/2\le24$.
torsbound(E, np) =
{ my(g = 0, cnt = 0);
forprime(p = 3, 10^6,
if(E.disc % p != 0,
g = gcd(g, p + 1 - ellap(E,p)); cnt++;
if(cnt >= np, break)));
g;
}
? E = ellinit([0,0,0,-7,6]);
? torsbound(E, 5)
% 4
? elltors(E)
% [4, [2,2], [[1,0],[2,0]]]
? \\ a big curve: bound is instant, no factoring
? F = ellminimalmodel(ellinit([0,0,0,-10^30+3, 10^45+7]));
? torsbound(F, 8)
3.22 Use Nagell–Lutz by hand to show $(3,5)$ on $y^2=x^3-2$ is non-torsion.
$\Delta=-16\cdot27\cdot4=-1728$. If $(3,5)$ were torsion then $y=5$ and $y^2=25$ must divide $\Delta=-1728$. But $1728=2^6\cdot27$, so $5\nmid1728$. Contradiction: $(3,5)$ has infinite order. ∎
? E = ellinit([0,0,0,0,-2]);
? E.disc
% -1728
? 25 % 1728, 1728 % 25
% 25, 3 \\ 25 does not divide 1728
? ellorder(E,[3,5])
% 0
3.23 Find a curve with torsion $\mathbb{Z}/2\times\mathbb{Z}/8$ (the largest of Mazur's groups by order).
? \\ search conductor range
? for(N=15, 300, if(#ellsearch(N),
for(i=1, #ellsearch(N),
my(c = ellsearch(N)[i][2], T = elltors(ellinit(c))[2]);
if(T == [2,8], print(N, " ", c)))));
210 [1, 1, 0, -1274, 16510]
...
Curve 210e1 or similar has $E(\mathbb{Q})_{\text{tors}}\cong\mathbb{Z}/2\times\mathbb{Z}/8$, order 16 — the maximum permitted by Mazur. Its rank is 0. Note the general pattern: large torsion tends to force small rank, which is why the rank records per torsion group drop as the torsion grows.
3.24 Show that the "torsion by gcd" bound can fail to be sharp, and find an example.
The bound is $\#E(\mathbb{Q})_{\text{tors}}\mid\gcd_p\#\tilde E(\mathbb{F}_p)$. The gcd can be a proper multiple: it detects only what is forced by counting.
? E = ellinit([0,0,1,-1,0]); \\ 37a1
? torsbound(E, 3) \\ few primes: a weak bound
? torsbound(E, 20) \\ more primes
% 1
? elltors(E)
% [1, [], []]
With few primes the gcd may be, say, 6 or 12 while the true torsion is trivial. Adding primes drives the gcd down. It always converges to a multiple of the truth, and in practice 5–10 primes suffice; but there is no a priori bound on how many are needed without invoking Mazur.
For $E/\mathbb{Q}$, $E(\mathbb{Q})_{\text{tors}}$ is isomorphic to exactly one of: $$\mathbb{Z}/n\mathbb{Z}\ (1\le n\le10,\ n=12),\qquad \mathbb{Z}/2\mathbb{Z}\times\mathbb{Z}/2m\mathbb{Z}\ (1\le m\le4).$$ Each of these 15 groups occurs for infinitely many curves.
Note the gaps: no rational points of order 11, 13, or $\ge14$.
$Y_1(N)=\mathbb{H}/\Gamma_1(N)$ parametrises pairs $(E,P)$ with $P$ of exact order $N$; $X_1(N)$ is its compactification by cusps. Similarly $Y_0(N)=\mathbb{H}/\Gamma_0(N)$ parametrises $(E,C)$ with $C$ cyclic of order $N$, and $X_0(N)$ is its compactification. Both are smooth projective curves defined over $\mathbb{Q}$.
"$E/\mathbb{Q}$ has a rational point of order $N$" $\iff$ "$X_1(N)$ has a non-cuspidal rational point". So Mazur's theorem is a statement about rational points on a specific list of curves. For $N\le10$ and $N=12$, $X_1(N)$ has genus 0 with rational points — so infinitely many curves. For $N=11,13,14,15,16,18$ the genus is 1 or 2, and for larger $N$ the genus grows.
| $N$ | 11 | 13 | 14 | 15 | 16 | 17 | 18 |
|---|---|---|---|---|---|---|---|
| genus $X_1(N)$ | 1 | 2 | 1 | 1 | 2 | 5 | 2 |
For $N=11,14,15$ the curve $X_1(N)$ has genus 1 with rank 0 — only cusps are rational. For genus $\ge2$, Faltings gives finiteness but Mazur needed effective arguments.
Mazur's proof for the hard cases uses the Eisenstein ideal in the Hecke algebra acting on $J_0(N)$, showing that a rational point would force an unattainable congruence. It reshaped the subject.
| Torsion | Rank | |
|---|---|---|
| Possible values | known exactly (15 groups) | unknown |
| Computation | fast, unconditional, always terminates | no known algorithm |
| Uniform bound | $\le16$ | not known to exist |
| Over number fields | uniformly bounded by degree (Merel, 1996) | open |
Dujella's tables give, for each of Mazur's 15 groups $T$, the largest known rank of a curve with $E(\mathbb{Q})_{\text{tors}}\cong T$. Prescribing torsion confines the curve to a modular curve, shrinking the parameter space and lowering achievable rank. Current records fall roughly from 30 (trivial torsion) down to single digits for the largest torsion groups. Elkies–Klagsbrun's 2020 paper broke five of these records at once.
3.25 Verify empirically that no curve of small conductor has a point of order 11.
? bad = 0;
? for(N=11, 2000, my(v = ellsearch(N));
for(i=1, #v, my(T = elltors(ellinit(v[i][2]))[1]);
if(T % 11 == 0, bad++; print(N, " ", v[i][1]))));
? bad
% 0
No curve has 11-torsion, as Mazur guarantees. Similarly none has order 13 or $\ge17$. The largest torsion you will find is 16, from $\mathbb{Z}/2\times\mathbb{Z}/8$.
3.26 Find the parametrised family of curves with a rational 5-torsion point.
$X_1(5)$ has genus 0, so there is a rational parametrisation (the Tate normal form): $$E_t:\ y^2+(1-t)xy-t\,y=x^3-t\,x^2,\qquad P=(0,0)\ \text{of order }5.$$
? f(t) = ellinit([1-t, -t, -t, 0, 0]);
? for(t=2,6, my(E=f(t)); if(E, print(t, " ", elltors(E)[2], " ", ellorder(E,[0,0]))))
2 [5] 5
3 [5] 5
4 [5] 5
...
Every specialisation with $\Delta\ne0$ has a point of order 5. These universal families are exactly what one specialises when hunting rank records with prescribed torsion — the extra constraint is why those records are lower.
3.27 Explain why $X_1(N)$ having genus 0 with a rational point implies infinitely many curves with $N$-torsion.
A genus-0 curve over $\mathbb{Q}$ with a rational point is isomorphic to $\mathbb{P}^1_\mathbb{Q}$ (Lesson 9), so it has infinitely many rational points, parametrised by a rational function of one variable $t$. Excluding the finitely many cusps, every other rational point corresponds to a genuine pair $(E,P)$ with $P$ of order $N$, defined over $\mathbb{Q}$. Different $t$ give non-isomorphic $E$ for all but finitely many collisions, so infinitely many curves. ∎
This holds for $N\le10$ and $N=12$, and for the $\mathbb{Z}/2\times\mathbb{Z}/2m$ cases with $m\le4$ (where the relevant modular curve $X_1(2,2m)$ also has genus 0). That is precisely Mazur's list.
A brief but useful detour: the free part of $E(\mathbb{Q})$ is infinite, yet the integral points are always finite. This gives another handle on curves and another sanity check on rank computations.
For $E/\mathbb{Q}$ given by an integral Weierstrass equation, the set $$\{P\in E(\mathbb{Q}):x(P)\in\mathbb{Z}\}$$ is finite.
Siegel's original proof used Diophantine approximation (Thue–Siegel) and was ineffective — it gave no bound on the size of the points. Baker's theory of linear forms in logarithms made it effective, and the modern method (David, Hajdu–Herendi, Stroeker–Tzanakis) combines elliptic logarithms with LLL to produce complete lists.
? E = ellinit([0,0,0,-7,6]);
? ellratpoints(E, 100) \\ small rational points
? \\ PARI does not ship a full S-integral point routine; Sage does:
? \\ sage: E.integral_points()
? \\ but you can enumerate directly for moderate bounds:
? v = List(); for(x = -100, 1000, if(issquare(x^3-7*x+6, &y), listput(v,[x,y])));
? Vec(v)
% [[-3,0],[-2,3],[-1,3],[0,3],[1,0],[2,0],[3,3],[6,12],[14,52],[21,96],[37,225],
[67,548],[218,3219],[3583,214506],...]
There is a heuristic link: curves of high rank tend to have many integral points, because the Mordell–Weil lattice is dense and short vectors give small coordinates. Records for the number of integral points track rank records loosely. Conversely, spotting an unusual number of integral points in a family is a (weak) signal of high rank — and unlike Mestre–Nagao sums it is not fooled by CM. In practice it is too slow for large-scale sieving but useful as a confirmation heuristic.
Silverman: the number of integral points is bounded by $C^{1+r+\text{rank of }\text{Ш}}$ for an absolute constant $C$; more refined results (Alpöge; Alpöge–Ho; Bhargava–Ho) bound the average number of integral points over all curves, and the higher moments. Note: Levent Alpöge, one of the discoverers of the rank-30 curve, works precisely in this area.
3.28 Find all integral points on $y^2=x^3-2$ with $|x|\le10^4$ and compare with the known answer.
? v = List(); for(x=-2, 10^4, if(issquare(x^3-2, &y), listput(v,[x,y])));
? Vec(v)
% [[3, 5]]
Only $(3,\pm5)$. This is Fermat's claim, proved rigorously by descent in $\mathbb{Z}[\sqrt{-2}]$ (a UFD): from $y^2+2=x^3$, factor as $(y+\sqrt{-2})(y-\sqrt{-2})=x^3$; the factors are coprime, so each is a cube, and expanding $y+\sqrt{-2}=(a+b\sqrt{-2})^3$ gives $b(3a^2-2b^2)=1$, forcing $b=\pm1$, $a=\pm1$, $y=\pm5$, $x=3$. ∎
3.29 On the rank-3 curve $y^2=x^3-7x+6$, count integral points with $|x|\le10^6$ and comment on the rank correlation.
? c = 0; for(x=-3, 10^6, if(issquare(x^3-7*x+6), c++)); c
% ~ 18-20
Roughly twenty integral points for a rank-3 curve with small coefficients — considerably more than the one or two typical of a rank-0 or rank-1 curve. The heuristic $\#\{\text{integral points}\}\approx C^{r}$ predicts growth exponential in the rank, matching Silverman's bound. For a rank-30 curve with 150-digit coefficients, though, the constant $C$ is dwarfed by the size of the coefficients, and integral points are not a practical detector at that scale.
3.30 Explain why Siegel's theorem is compatible with $E(\mathbb{Q})$ being infinite.
Because the denominators grow. Write $x(P)=a/d^2$; then $h(P)\approx\log\max(|a|,d^2)$ and $\hat h(nP)=n^2\hat h(P)$, so $d(nP)$ grows like $e^{cn^2}$. Only finitely many multiples can have $d=1$.
Concretely on $y^2=x^3-2$ with $P=(3,5)$: $2P=(129/100,-383/1000)$, $3P$ has a 3-digit denominator, and every $nP$ with $n\ge2$ is non-integral. The single integral point is $\pm P$ itself. ✓ Siegel's theorem is the statement that this "denominators eventually appear and never go away" behaviour is universal.
Heights measure arithmetic size. To define them properly we need every absolute value on $\mathbb{Q}$ at once.
$M_\mathbb{Q}=\{\infty\}\cup\{\text{primes}\}$. The associated normalised absolute values are $$|x|_\infty=\text{usual absolute value},\qquad |x|_p=p^{-v_p(x)}.$$
Every nontrivial absolute value on $\mathbb{Q}$ is equivalent to $|\cdot|_\infty$ or to some $|\cdot|_p$.
$$\prod_{v\in M_\mathbb{Q}}|x|_v=1\qquad\text{for all }x\in\mathbb{Q}^\times.$$
Proof. Write $x=\pm\prod_pp^{e_p}$. Then $|x|_p=p^{-e_p}$ and $|x|_\infty=\prod_pp^{e_p}$. The product telescopes to 1. ∎
Define, for $P=[x_0:\cdots:x_n]\in\mathbb{P}^n(\mathbb{Q})$ with $x_i\in\mathbb{Z}$ coprime, $$H(P)=\prod_{v\in M_\mathbb{Q}}\max_i|x_i|_v.$$ Rescaling $P$ by $\lambda\in\mathbb{Q}^\times$ multiplies each factor by $|\lambda|_v$, and by the product formula the total is unchanged. So $H$ is well defined on projective space — that is exactly what the product formula buys.
For a number field $K$ the places are the archimedean ones (one per real embedding, one per conjugate pair of complex embeddings) and the non-archimedean ones (one per prime ideal $\mathfrak p$ of $\mathcal{O}_K$). With normalisations $|x|_v=|\sigma_v(x)|^{n_v}$ where $n_v\in\{1,2\}$ for archimedean $v$, and $|x|_{\mathfrak p}=\mathrm{N}(\mathfrak p)^{-v_{\mathfrak p}(x)}$, the product formula again holds.
? valuation(60/7, 2)
% 2
? valuation(60/7, 7)
% -1
? \\ verify the product formula for 60/7:
? x = 60/7;
? abs(x) * prod(i=1, 4, my(p=prime(i)); p^(-valuation(x,p)))
% 1
? \\ p-adic absolute value directly:
? p = 7; p^(-valuation(x,p))
% 7
4.1 Verify the product formula for $x=-98/45$.
$-98/45=-2\cdot7^2/(3^2\cdot5)$. So $|x|_2=1/2$, $|x|_3=9$, $|x|_5=5$, $|x|_7=1/49$, all others 1, and $|x|_\infty=98/45$.
Product: $\frac{98}{45}\cdot\frac12\cdot9\cdot5\cdot\frac1{49}=\frac{98\cdot45}{45\cdot2\cdot49}=\frac{98}{98}=1$ ✓.
4.2 Show that for $x=a/b\in\mathbb{Q}$ in lowest terms, $\prod_v\max(1,|x|_v)=\max(|a|,|b|)$.
At $v=\infty$: $\max(1,|a/b|)=\max(|b|,|a|)/|b|$.
At $v=p$: $\max(1,|a/b|_p)=\max(1,p^{v_p(b)-v_p(a)})$. Since $\gcd(a,b)=1$, at most one of $v_p(a),v_p(b)$ is positive. If $p\mid b$ this equals $p^{v_p(b)}$; otherwise 1. So $\prod_p\max(1,|x|_p)=\prod_{p\mid b}p^{v_p(b)}=|b|$.
Total: $\frac{\max(|a|,|b|)}{|b|}\cdot|b|=\max(|a|,|b|)=H(x)$ ✓ — the naive height, recovered as a product over all places.
4.3 Show $|\cdot|_p$ satisfies the ultrametric inequality with equality when $v_p(x)\ne v_p(y)$.
Suppose $v_p(x)=a\lt b=v_p(y)$. Write $x=p^au$, $y=p^bw$ with $u,w$ $p$-units. Then $x+y=p^a(u+p^{b-a}w)$ and $u+p^{b-a}w\equiv u\not\equiv0\pmod p$, so $v_p(x+y)=a$ exactly. Hence $|x+y|_p=p^{-a}=\max(|x|_p,|y|_p)$ ✓.
The inequality can only be strict when the valuations are equal — the "isosceles triangle" property of non-archimedean geometry, and the reason $p$-adic analysis is so much cleaner than real analysis.
For $P=[x_0:\cdots:x_n]$ with $x_i\in\mathbb{Z}$, $\gcd(x_0,\dots,x_n)=1$: $$H(P)=\max_i|x_i|,\qquad h(P)=\log H(P).$$ Equivalently $H(P)=\prod_v\max_i|x_i|_v$ for any choice of coordinates, by the product formula.
Identify $t=a/b\in\mathbb{Q}$ with $[a:b]\in\mathbb{P}^1$. Then $H(t)=\max(|a|,|b|)$ for $a/b$ in lowest terms.
For any $B$ and $n$, $\{P\in\mathbb{P}^n(\mathbb{Q}):H(P)\le B\}$ is finite. Indeed $$\#\{P\in\mathbb{P}^n(\mathbb{Q}):H(P)\le B\}\sim\frac{2^n}{\zeta(n+1)}\,B^{n+1}\quad(B\to\infty).$$ For $\mathbb{P}^1$: about $\frac{12}{\pi^2}B^2$ rationals of height $\le B$.
If $F:\mathbb{P}^n\to\mathbb{P}^m$ is a morphism given by homogeneous forms of degree $d$, then $$h\bigl(F(P)\bigr)=d\,h(P)+O(1),$$ with the implied constant depending only on $F$. This is the single technical fact that generates every height inequality on elliptic curves.
Why. The upper bound $h(F(P))\le d\,h(P)+O(1)$ is the triangle inequality applied to the coefficients. The lower bound uses the Nullstellensatz: since $F$ has no common zero, there are forms $g_{ij}$ with $\sum_j g_{ij}F_j=x_i^{e}$ for some $e$, which reverses the estimate.
$F:\mathbb{P}^1\to\mathbb{P}^1$, $[X:Y]\mapsto[X^2:Y^2]$, so $t\mapsto t^2$. Then $H(t^2)=H(t)^2$ exactly: if $t=a/b$ in lowest terms then $t^2=a^2/b^2$ is also in lowest terms, so $\max(a^2,b^2)=\max(|a|,|b|)^2$. Here $d=2$ and the $O(1)$ is 0.
Contrast $t\mapsto t^2+1=(a^2+b^2)/b^2$: still degree 2, but now $\gcd(a^2+b^2,b^2)$ may exceed 1 (e.g. $a=b=1$), so the $O(1)$ is genuinely needed.
ht(t) = my(a = numerator(t), b = denominator(t)); max(abs(a), abs(b));
? ht(129/100)
% 129
? log(ht(129/100)) * 1.0
% 4.8598...
? \\ counting rationals of bounded height:
? c = 0; for(a=-100,100, for(b=1,100, if(gcd(a,b)==1, c++)));
? c
% ~ 12200
? 12/Pi^2 * 100^2 * 2 \\ predicted (a in [-B,B], b in [1,B])
% ~ 24317 / 2
4.4 Count rationals $a/b$ with $H\le10$ and compare with $\frac{12}{\pi^2}\cdot100$.
? c = 0; for(a=-10,10, for(b=1,10, if(gcd(abs(a),b)==1, c++)));
? c
% 67
? 12/Pi^2 * 10^2
% 121.58
The asymptotic constant is for $\#\{H(P)\le B\}$ in $\mathbb{P}^1(\mathbb{Q})$, counting $[a:b]$ up to sign, so the comparison needs care with normalisation (and $B=10$ is small). The order of magnitude — quadratic in $B$ — is the point: there are $\asymp B^2$ rationals of height $\le B$, hence only finitely many. That finiteness is Northcott.
4.5 Prove $h(t^n)=n\,h(t)$ exactly for $t\in\mathbb{Q}^\times$.
$t=a/b$ in lowest terms $\Rightarrow$ $t^n=a^n/b^n$ in lowest terms (since $\gcd(a,b)=1\Rightarrow\gcd(a^n,b^n)=1$). Hence $H(t^n)=\max(|a|^n,|b|^n)=\max(|a|,|b|)^n=H(t)^n$, so $h(t^n)=n\,h(t)$. ∎
This is the model for what we want on elliptic curves: $\hat h([m]P)=m^2\hat h(P)$. The exponent is 2 rather than 1 because $x\circ[m]$ has degree $m^2$ as a map $\mathbb{P}^1\to\mathbb{P}^1$ (Lesson 19).
4.6 Show that $h(t+1)\le h(t)+\log2$ and find when equality holds.
$t=a/b$ lowest terms $\Rightarrow t+1=(a+b)/b$, also in lowest terms (any common factor of $a+b$ and $b$ divides $a$). So $$H(t+1)=\max(|a+b|,|b|)\le\max(|a|+|b|,|b|)\le2\max(|a|,|b|)=2H(t).$$ Equality needs $|a+b|=|a|+|b|=2\max(|a|,|b|)$, i.e. $a$ and $b$ of the same sign and $|a|=|b|$; with $\gcd=1$ that means $a=b=1$, so $t=1$ and $t+1=2$: $H=1\to H=2$ ✓.
$$h(P)=h\bigl(x(P)\bigr)=\log\max\bigl(|a|,|d^2|\bigr)\ \ \text{for }x(P)=a/d^2,\qquad h(\mathcal{O})=0.$$ Some authors use $h(P)=h([x_0:x_1])$ with $x=x_0/x_1$; identical.
There are constants $C_1,C_2,C_3$ depending only on $E$ such that for all $P,Q\in E(\mathbb{Q})$:
(2) follows from (1) with $Q=P$ and $h(\mathcal{O})=0$; it also follows directly from the degree-4 map $x\mapsto x([2]P)$ via the functoriality of Lesson 44.
The map $\sigma:E\times E\to\mathbb{P}^2$, $(P,Q)\mapsto\bigl[1:x(P+Q)+x(P-Q):x(P+Q)x(P-Q)\bigr]$ is given by polynomials in $x(P),x(Q)$: $$x(P+Q)+x(P-Q)=\frac{2(x_P+x_Q)(A+x_Px_Q)+4B}{(x_P-x_Q)^2},$$ $$x(P+Q)\,x(P-Q)=\frac{(x_Px_Q-A)^2-4B(x_P+x_Q)}{(x_P-x_Q)^2}.$$ Both are symmetric of bidegree $(2,2)$, so applying the functoriality estimate gives (1).
These formulas involve only $x$-coordinates — no $y$, no sign ambiguity. That is why the height, which only sees $x$, satisfies a clean quadratic relation. The price is the $O(1)$: the numerators and denominators above are not automatically coprime.
naiveh(E, P) = if(P == [0], 0.0, log(max(abs(numerator(P[1])), abs(denominator(P[1])))));
? E = ellinit([0,0,0,-7,6]);
? G = [[-2,3],[-1,3],[0,-3]]; \\ some points
? \\ measure the duplication defect:
? for(i=1,3, my(P=G[i]); print(naiveh(E,ellmul(E,P,2)) - 4*naiveh(E,P)))
? \\ and the canonical height for comparison:
? for(i=1,3, my(P=G[i]); print([naiveh(E,P), ellheight(E,P)]))
You should see the defect $h(2P)-4h(P)$ bounded but nonzero, while $\hat h(2P)-4\hat h(P)$ is exactly 0 to full precision.
Given (2) and the finiteness of $E(\mathbb{Q})/2E(\mathbb{Q})$ (Lesson 51), Mordell–Weil follows: pick coset representatives $Q_1,\dots,Q_n$; write $P=2P'+Q_i$; then $$h(P')\le\tfrac14h(P)+C'$$ so iterating contracts the height geometrically down to a fixed bound. Everything below that bound is finite (Northcott), and together with the $Q_i$ it generates.
4.7 Verify the duplication estimate numerically on $y^2=x^3-2$ with $P=(3,5)$ for $n=1,\dots,5$.
? E = ellinit([0,0,0,0,-2]); P = [3,5];
? for(n=0,4, my(Q = ellmul(E,P,2^n));
print(2^n, " h=", naiveh(E,Q), " hhat=", ellheight(E,Q)))
1 h=1.0986 hhat=0.9309
2 h=4.8598 hhat=3.7236
4 h=19.2295 hhat=14.8945
8 h=75.9 ... hhat=59.578
16 h=303.7 ... hhat=238.31
$\hat h$ quadruples exactly: $0.9309\to3.7236\to14.8945\to59.578\to238.31$, each precisely $4\times$. The naive height quadruples only approximately, with a bounded defect. ✓
4.8 Show directly that $x(P)=a/d^2$ with $\gcd(a,d)=1$, for $P\in E(\mathbb{Q})$ on an integral model.
Write $x=m/n$, $y=r/s$ in lowest terms. From $y^2=x^3+Ax+B$: $$\frac{r^2}{s^2}=\frac{m^3+Amn^2+Bn^3}{n^3}.$$ So $s^2n^3\mid$ stuff; comparing $p$-adic valuations at a prime $p\mid n$: $v_p(y^2)=v_p(x^3)$ since the other terms have larger valuation ($v_p(x)\lt0$ so $v_p(x^3)=3v_p(x)\lt v_p(Ax)$). Hence $2v_p(y)=3v_p(x)$, so $v_p(x)$ is even and $v_p(y)$ is a multiple of 3 — precisely $v_p(x)=-2k$, $v_p(y)=-3k$.
Therefore $n=d^2$ and $s=d^3$ for a common $d$. ∎ Once again the weights $\operatorname{wt}(x)=2$, $\operatorname{wt}(y)=3$.
4.9 Estimate $C_2$ for $y^2=x^3-7x+6$ empirically over many points.
? E = ellinit([0,0,0,-7,6]);
? pts = select(P -> ellorder(E,P)==0, ellratpoints(E, 500));
? v = apply(P -> abs(naiveh(E,ellmul(E,P,2)) - 4*naiveh(E,P)), pts);
? vecmax(v)
You get a modest number (a few units). The theoretical bound (Silverman's explicit height difference bound, Math. Comp. 1990) gives $$-\tfrac1{12}h(j)-\tfrac1{12}\log|\Delta|-c\le\hat h(P)-\tfrac12h(P)\le\tfrac1{12}h(j)+\cdots$$ which for this curve is around 2–3. Such explicit bounds are what make saturation (Lesson 50) and integral-point searches rigorous.
Tate's observation: the $O(1)$ in $h(2P)=4h(P)+O(1)$ can be averaged away.
$$\hat h(P)=\lim_{n\to\infty}\frac{h(2^nP)}{4^n}.$$
The limit exists. Let $C=C_2$ from the duplication estimate. For $m\gt n$, $$\left|\frac{h(2^mP)}{4^m}-\frac{h(2^nP)}{4^n}\right|\le\sum_{k=n}^{m-1}\left|\frac{h(2^{k+1}P)}{4^{k+1}}-\frac{h(2^kP)}{4^k}\right|\le\sum_{k=n}^{m-1}\frac{C}{4^{k+1}}\le\frac{C}{3\cdot4^n},$$ so the sequence is Cauchy. Moreover $|\hat h(P)-h(P)|\le C/3$: the two heights differ by a bounded amount.
Proof of (4). If $P$ is torsion, $\{h(nP)\}$ is a finite set, so $h(2^nP)/4^n\to0$. Conversely if $\hat h(P)=0$ then $\hat h(nP)=n^2\cdot0=0$ for all $n$, so $h(nP)$ is bounded, so $\{nP\}$ is finite by Northcott, so $P$ has finite order. ∎
(3) says $\hat h$ is a quadratic form on $E(\mathbb{Q})$; (4) says it is positive definite modulo torsion. Hence $\hat h$ extends to a positive-definite quadratic form on the real vector space $$E(\mathbb{Q})\otimes\mathbb{R}\cong\mathbb{R}^r,$$ inside which $E(\mathbb{Q})/\text{tors}$ sits as a full-rank lattice — the Mordell–Weil lattice. Rank questions become lattice questions.
Silverman's AEC defines $\hat h$ so that $\hat h\approx\tfrac12h$. PARI, Sage, Magma and most literature on rank records use $\hat h\approx h$. The two differ by a factor of 2, so regulators differ by $2^r$. Always check before comparing published values. PARI's convention: ellheight returns the "arithmetic" normalisation.
? \p 50
? E = ellinit([0,0,0,0,-2]); P = [3,5];
? ellheight(E, P)
% 0.93094...
? ellheight(E, ellmul(E,P,3)) / ellheight(E,P)
% 9.0000000000000000000000000000000000000000000000000
? ellheight(E, ellmul(E,P,7)) / ellheight(E,P)
% 49.000000000000000000000000000000000000000000000000
? \\ torsion has height 0:
? F = ellinit([0,0,0,-1,0]);
? ellheight(F, [0,0])
% 0.E-57
4.10 Prove property (2) from the definition.
First for $m=2$: $\hat h(2P)=\lim\frac{h(2^{n+1}P)}{4^n}=4\lim\frac{h(2^{n+1}P)}{4^{n+1}}=4\hat h(P)$ ✓.
For general $m$, use the parallelogram law (3), which follows from the quasi-parallelogram law by the same averaging. A function satisfying the exact parallelogram law with $\hat h(\mathcal{O})=0$ is a quadratic form, and every quadratic form satisfies $q(mP)=m^2q(P)$: expand $q(mP)$ by induction using $q((m+1)P)+q((m-1)P)=2q(mP)+2q(P)$, giving $q(mP)=m^2q(P)$ by solving the recursion with $q(0)=0$, $q(P)=q(P)$. ∎
4.11 Show that $\hat h$ is the unique function with $\hat h=h+O(1)$ and $\hat h(2P)=4\hat h(P)$.
Suppose $f$ and $g$ both satisfy the two conditions. Then $\delta=f-g$ is bounded (both differ from $h$ by $O(1)$) and satisfies $\delta(2P)=4\delta(P)$. Hence $|\delta(P)|=4^{-n}|\delta(2^nP)|\le4^{-n}\cdot\sup|\delta|\to0$. So $\delta\equiv0$. ∎
Uniqueness is why every algorithm computing $\hat h$ — Tate's series, the AGM/sigma method, the local decomposition — produces the same number.
4.12 Compute $\hat h$ for the generator of $y^2=x^3-25x$ (congruent number 5) and predict $\hat h(5P)$.
? \p 30
? E = ellinit([0,0,0,-25,0]);
? ellrank(E)
% [1, 1, 0, [[-4, 6]]]
? h = ellheight(E, [-4,6])
% 1.51758...
? ellheight(E, ellmul(E,[-4,6],5))
% 37.939...
? % / h
% 25.0000000000000000000000000000
$\hat h(5P)=25\,\hat h(P)$ exactly ✓. The point $5P$ has coordinates with dozens of digits — the canonical height is measuring exactly that growth.
The defining limit converges slowly and with poor error control. The practical algorithm decomposes $\hat h$ into local contributions, one per place.
$$\hat h(P)=\sum_{v\in M_\mathbb{Q}}\lambda_v(P)=\lambda_\infty(P)+\sum_p\lambda_p(P),$$ where each local height $\lambda_v:E(\mathbb{Q}_v)\setminus\{\mathcal{O}\}\to\mathbb{R}$ is:
All but finitely many $\lambda_p$ vanish.
Let $p$ be a prime, $E$ given by a minimal model at $p$, and $P\in E(\mathbb{Q}_p)$. Then (in the "arithmetic" normalisation) $$\lambda_p(P)=\tfrac12\max\bigl(0,\ -v_p(x(P))\bigr)\log p\ +\ (\text{correction if }P\text{ reduces to a singular point}).$$
Concretely:
For split multiplicative reduction of type $\mathrm{I}_n$ at $p$, the component group is $\mathbb{Z}/n$, and if $P$ reduces to component $k$ (with $0\le k\le n-1$), $$\lambda_p(P)=\frac12\cdot\frac{k(n-k)}{n}\log p + \tfrac12\max\bigl(0,-v_p(x(P))\bigr)\log p .$$ The function $k\mapsto k(n-k)/n$ is the classic "quadratic on the component group" — the same expression that appears in the theory of Néron models and in the local height of a Tate curve.
Every non-archimedean local height is an exact rational multiple of $\log p$. There is no approximation, no error bound, no precision loss — just Tate's algorithm to get the type and the component, then a table lookup. All the analytic difficulty lives at $v=\infty$.
? E = ellminimalmodel(ellinit([0,0,0,-7,6]));
? P = [-2,3];
? ellheight(E, P)
% 0.5077...
? \\ PARI does not expose lambda_p directly, but the sum is checkable:
? \\ local data at bad primes:
? fordiv(ellglobalred(E)[1], d, if(isprime(d), print(d, " ", elllocalred(E,d))))
? \\ valuation of x at bad primes:
? fordiv(ellglobalred(E)[1], d, if(isprime(d), print(d, " ", valuation(P[1], d))))
4.13 Compute $\lambda_p$ at all good primes for $P=(129/100,-383/1000)$ on $y^2=x^3-2$.
$x(P)=129/100=129/(2^2\cdot5^2)$. So $v_2(x)=-2$ and $v_5(x)=-2$, all other $v_p(x)\ge0$.
$\Delta=-1728=-2^6\cdot3^3$, so the bad primes are 2 and 3. At $p=5$ (good reduction): $$\lambda_5(P)=\tfrac12\cdot2\cdot\log5=\log5\approx1.6094.$$ At $p=2$ the reduction is bad, so there is a correction term; at $p=3$, $v_3(x)=0$ so the "denominator" part vanishes but a component correction may not.
? E = ellinit([0,0,0,0,-2]);
? ellheight(E, [129/100, -383/1000])
% 3.7237...
? 4 * ellheight(E, [3,5])
% 3.7237...
Consistency check ✓: $P=2\cdot(3,5)$ so $\hat h(P)=4\hat h((3,5))$.
4.14 Verify the sum-over-places decomposition by comparing $\hat h$ to $\sum_p\lambda_p$ plus a numerical $\lambda_\infty$.
For a point $P$ with $x(P)\in\mathbb{Z}$ and all primes good, every $\lambda_p=0$, so $\hat h(P)=\lambda_\infty(P)$. Take $E:y^2=x^3-2$ and $P=(3,5)$: $x=3$ is integral, and 2, 3 are the bad primes with $v(x)\ge0$.
? E = ellinit([0,0,0,0,-2]);
? ellheight(E,[3,5])
% 0.93094...
So $\lambda_\infty((3,5))\approx0.931$, up to the bad-prime corrections at 2 and 3 (which for this point turn out to vanish). A more interesting check: for $2P=(129/100,\ldots)$, the $\lambda_5$ contribution $\log5=1.609$ is a large chunk of $\hat h=3.724$ — the denominators dominate the height, exactly as the theory predicts.
4.15 On a curve with $\mathrm{I}_5$ reduction at 11, compute the possible values of the component-group contribution.
$n=5$, so $k\in\{0,1,2,3,4\}$ and $\frac{k(5-k)}{5}$ takes values $0,\ \frac45,\ \frac65,\ \frac65,\ \frac45$. Times $\tfrac12\log11\approx1.199$: $$0,\quad 0.959,\quad 1.439,\quad 1.439,\quad 0.959.$$
Symmetric in $k\mapsto n-k$ ✓ (as it must be, since $\lambda_p(-P)=\lambda_p(P)$ and negation reverses the component). The maximum is at the "middle" components.
? E = ellinit([0,-1,1,-10,-20]); \\ conductor 11, I_5 at 11
? elllocalred(E,11)
% [1, 5, [1,0,0,0], 5]
? for(k=0,4, print(k, " ", k*(5-k)/5 * 0.5 * log(11)))
All the analysis is here. Two standard algorithms, both with rigorous error bounds.
Define $z=1/x(P)$ and, from the duplication formula, a sequence $$t_0=z,\qquad t_{n+1}=\text{(explicit rational function of }t_n).$$ Then $$\lambda_\infty(P)=\tfrac12\log|x(P)|+\tfrac18\sum_{n\ge0}4^{-n}\log|\,\text{something}(t_n)\,|,$$ where the summand involves $z^4$-type expressions. Concretely, with $\mu(z)=z^4+\ldots$ and $\nu(z)$ from the duplication formula, one gets a series whose $n$-th term is $O(4^{-n})$ with an explicit constant.
Cost: $d$ digits in $O(d)$ iterations. Error: the tail is bounded explicitly by $\frac{C}{3\cdot4^N}$. This is what mwrank uses.
$$\sigma(z;\Lambda)=z\prod_{\omega\in\Lambda\setminus0}\left(1-\frac z\omega\right)e^{z/\omega+z^2/(2\omega^2)},\qquad \zeta(z)=\frac{\sigma'(z)}{\sigma(z)},\qquad \wp=-\zeta'.$$ $\sigma$ is odd, entire, with simple zeros exactly on $\Lambda$, and quasi-periodic: $\sigma(z+\omega)=\pm e^{\eta(\omega)(z+\omega/2)}\sigma(z)$ where $\eta$ is the quasi-period map.
$$\lambda_\infty(P)=-\log\bigl|\sigma(z_P)\bigr|+\tfrac12\,\eta_1\,\frac{(\operatorname{Im}z_P)^2}{\operatorname{Im}\tau}\cdot(\ldots)+\tfrac1{12}\log|\Delta|,$$ where $z_P=\log_E(P)$ is the elliptic logarithm. The exact normalisation varies by source; the structure is: evaluate the elliptic logarithm (AGM, quadratic convergence), evaluate $\sigma$ by its $q$-series (exponentially convergent), combine.
Cost: $d$ digits in $O(\log d)$ AGM steps plus $O(d/\log(1/|q|))$ terms of the $\sigma$ series. Quadratically convergent overall. This is what PARI uses.
The entire point of computing $\hat h$ is to certify that a determinant is nonzero. An approximation without a proven error bound proves nothing. Use:
A practical proxy: compute at precision $d$ and $2d$ and check the determinant's leading digits agree and are far from 0. That is evidence, not proof; for a published record you want the ball-arithmetic version.
? E = ellinit([0,0,0,-7,6]);
? G = [[-2,3],[-1,3],[0,-3]];
? \p 38
? d1 = matdet(ellheightmatrix(E, G))
? \p 100
? d2 = matdet(ellheightmatrix(E, G))
? abs(d1 - d2) \\ should be tiny
? \\ how close to zero is the determinant, relative to the entries?
? M = ellheightmatrix(E,G); matdet(M) / vecmax(abs(Vec(M)))^3
4.16 Compute $\hat h$ at two precisions and estimate the achieved accuracy.
? E = ellinit([0,0,0,0,-2]); P = [3,5];
? \p 20
? h20 = ellheight(E,P)
? \p 60
? h60 = ellheight(E,P)
? abs(h20 - h60)
% ~ 1e-20
The low-precision value is accurate to about its stated precision, as expected. PARI's height routine internally raises precision as needed. For record-sized curves you should explicitly set \p well above the number of digits in the coordinates — a good rule is $\text{digits}(\text{coords})/2 + 50$.
4.17 Verify the quasi-periodicity of $\sigma$ numerically.
? \p 30
? E = ellinit([0,0,0,-1,0]);
? w = E.omega; eta = E.eta;
? z = 0.3 + 0.1*I;
? s1 = ellsigma(E, z + w[1]);
? s2 = ellsigma(E, z) * exp(eta[1]*(z + w[1]/2));
? s1 / s2
% -1.0000000000... \\ the sign in sigma(z+w) = -e^{...} sigma(z)
The ratio is $\pm1$ as the quasi-periodicity law predicts (the sign is $-1$ when $\omega\notin2\Lambda$). This relation is exactly what makes $\log|\sigma|$ fail to be $\Lambda$-periodic by a quadratic correction — and that correction is why $\lambda_\infty$ has the $\eta_1(\operatorname{Im}z)^2$ term.
4.18 Estimate how many decimal digits you need to certify a $30\times30$ height matrix has nonzero determinant, for entries of size ~100.
Rough analysis: if each entry has absolute error $\epsilon$ and magnitude $M$, the determinant's error is roughly $n!\,\epsilon M^{n-1}$ in the worst case, but a better estimate uses the condition number: $|\delta\det|\lesssim\det\cdot\kappa\cdot n\epsilon/M$ where $\kappa$ is the condition number of $M$.
With $n=30$, $M\approx100$, and a Gram matrix whose determinant might be as small as $10^{-5}$ times $M^{30}$, you want $\epsilon\lesssim10^{-30}$ relative. Practical recipe: work at 100–200 digits, use ball arithmetic, and confirm the enclosure of $\det$ excludes 0. Since AGM-based height computation costs $O(d\log d)$, 200 digits is essentially free — there is no reason to economise.
? \p 200
? \\ then matdet(ellheightmatrix(E, thirty_points)) and check the magnitude
This is the single most important computational criterion in the course.
$$\langle P,Q\rangle=\tfrac12\bigl(\hat h(P+Q)-\hat h(P)-\hat h(Q)\bigr).$$ By the parallelogram law this is symmetric and $\mathbb{Z}$-bilinear, and $\langle P,P\rangle=\hat h(P)$. It extends to a positive-definite $\mathbb{R}$-bilinear form on $E(\mathbb{Q})\otimes\mathbb{R}$.
For $P_1,\dots,P_k\in E(\mathbb{Q})$, the Gram (height) matrix is $M=\bigl(\langle P_i,P_j\rangle\bigr)_{1\le i,j\le k}$. If $P_1,\dots,P_r$ is a $\mathbb{Z}$-basis of $E(\mathbb{Q})/\text{tors}$, then $\operatorname{Reg}(E)=\det M$.
$$\det M\ne0\iff P_1,\dots,P_k\ \text{are $\mathbb{Z}$-linearly independent modulo torsion}\implies \operatorname{rank}E(\mathbb{Q})\ge k.$$
Proof. $M$ is the Gram matrix of a positive-semidefinite form. If $\sum a_iP_i$ is torsion with $a\ne0$ then $a^{\mathsf T}Ma=\hat h(\sum a_iP_i)=0$, so $M$ is singular. Conversely, if $M$ is singular pick $a\in\mathbb{R}^k$ with $Ma=0$; then $a^{\mathsf T}Ma=0$, and positive-definiteness on the span forces a genuine relation. ∎
This is precisely how "rank $\ge30$" is certified: thirty points, a $30\times30$ matrix of canonical heights with rigorous error bounds, one determinant. Nothing conjectural enters.
$(E(\mathbb{Q})/\text{tors},\ \langle\cdot,\cdot\rangle)$ is a positive-definite lattice of rank $r$ and determinant $\operatorname{Reg}(E)$. Its covolume is $\sqrt{\operatorname{Reg}(E)}$.
If $P_1,\dots,P_r$ generate only a finite-index subgroup $\Gamma\subseteq E(\mathbb{Q})/\text{tors}$, then $$\det M=[\,E(\mathbb{Q})/\text{tors}:\Gamma\,]^2\cdot\operatorname{Reg}(E).$$ Saturation means enlarging $\Gamma$ to the full group. Algorithm: for each prime $\ell$ up to an explicit bound (Siksek; Stoll), test whether any $\sum a_iP_i$ with $a\in(\mathbb{Z}/\ell)^r\setminus\{0\}$ is divisible by $\ell$ in $E(\mathbb{Q})$; if so, replace a generator. The bound on $\ell$ comes from an explicit height-difference estimate plus the shortest-vector length.
For rank records, saturation is usually skipped: a lower bound on the rank does not need it, and only the exact group structure does.
By Minkowski/Hermite, the shortest nonzero vector of a rank-$r$ lattice of covolume $V$ has length $\lesssim\gamma_r^{1/2}V^{1/r}$. So $$\min_{P\ne0}\hat h(P)\lesssim\gamma_r\operatorname{Reg}(E)^{1/r}.$$ High rank with small regulator means many small points. That is exactly the signature record hunters look for, and it is why high-rank curves are findable at all: the extra generators, though large in absolute terms, are small relative to what a random rank-30 lattice would give.
? \p 60
? E = ellinit([0,0,0,-7,6]);
? G = ellrank(E)[4];
? G = select(P -> ellorder(E,P) == 0, G); \\ drop torsion!
? M = ellheightmatrix(E, G)
? d = matdet(M)
? d != 0
% 1
? \\ eigenvalues should all be positive:
? matdet(M) > 0 && matdet(M[1..2,1..2]) > 0 && M[1,1] > 0
% 1 \\ Sylvester's criterion: positive definite
4.19 Show $\langle\cdot,\cdot\rangle$ is bilinear given the parallelogram law.
Symmetry is clear from $\hat h(P-Q)=\hat h(Q-P)$. For additivity in the first slot, we must show $$\langle P_1+P_2,Q\rangle=\langle P_1,Q\rangle+\langle P_2,Q\rangle.$$ Apply the parallelogram law four times: to $(P_1+P_2,Q)$, $(P_1,Q)$, $(P_2,Q)$, and $(P_1,P_2)$, and to $(P_1+Q,P_2)$ and $(P_1-Q,P_2)$. Adding the last two: $$\hat h(P_1+P_2+Q)+\hat h(P_1-P_2+Q)+\hat h(P_1+P_2-Q)+\hat h(P_1-P_2-Q)=2\hat h(P_1+Q)+2\hat h(P_1-Q)+4\hat h(P_2).$$ Combining with the law applied to $(P_1,P_2)$ and simplifying gives the result. (Standard: any function satisfying the parallelogram identity with $f(0)=0$ is a quadratic form, and its polarisation is bilinear.) ∎
4.20 On $y^2=x^3-7x+6$, compute the Gram matrix and the regulator, and check the index formula with a deliberately non-saturated set.
? \p 40
? E = ellinit([0,0,0,-7,6]);
? G = select(P->ellorder(E,P)==0, ellrank(E)[4]);
? R = matdet(ellheightmatrix(E, G))
% 0.4171...
? \\ now deliberately use 2*P1, P2, P3 -- index 2
? G2 = [ellmul(E,G[1],2), G[2], G[3]];
? matdet(ellheightmatrix(E, G2)) / R
% 4.0000000000000000000000000000000000000
Index 2 gives determinant $2^2=4$ times the regulator ✓. This is exactly how saturation is detected in practice: if your computed determinant is $k^2$ times the "expected" regulator, your generators span an index-$k$ subgroup.
4.21 Estimate the shortest vector of a rank-30 Mordell–Weil lattice with regulator $10^{20}$.
Covolume $V=\sqrt{\operatorname{Reg}}=10^{10}$, rank $r=30$. Minkowski's bound: $\lambda_1^2\lesssim\gamma_{30}V^{2/30}$ where the Hermite constant $\gamma_{30}\approx4$–$5$. So $$\min\hat h\lesssim5\cdot(10^{10})^{2/30}=5\cdot10^{2/3}\approx5\cdot4.64\approx23.$$
So the smallest generators should have $\hat h\approx20$, corresponding to $x$-coordinates with roughly $20/\log10\approx9$–$20$ digits — reachable by direct search. The largest generators of such a lattice, by contrast, can have $\hat h$ in the hundreds, needing 4-descent. That split — some generators cheap, some very expensive — is exactly the practical situation for record curves.
For an elliptic curve $E$ over a number field $K$ and any $m\ge2$, the group $E(K)/mE(K)$ is finite.
$\mathbb{Q}$ under addition has $\mathbb{Q}/2\mathbb{Q}=0$ but is not finitely generated. Heights supply the missing ingredient (next lesson). But weak Mordell–Weil is the hard half arithmetically, and it is where descent lives.
Let $L=K(E[m])$, a finite extension. If $E(L)/mE(L)$ is finite then so is $E(K)/mE(K)$: the kernel of $E(K)/mE(K)\to E(L)/mE(L)$ is killed by an argument using $H^1(\operatorname{Gal}(L/K),E(L)[m])$, which is finite. So assume $E[m]\subseteq E(K)$ and $\mu_m\subseteq K$.
$$\kappa:E(K)\times G_K\longrightarrow E[m],\qquad \kappa(P,\sigma)=\sigma(Q)-Q,\ \text{ where }mQ=P.$$
Well defined: two choices of $Q$ differ by $T\in E[m]$, which is $G_K$-fixed, so $\sigma(Q+T)-(Q+T)=\sigma Q-Q$. Lands in $E[m]$: $m(\sigma Q-Q)=\sigma(mQ)-mQ=\sigma P-P=\mathcal{O}$. Bilinear: clear in $P$; in $\sigma$ it is the cocycle relation, which is additive because the action on $E[m]$ is trivial.
Kernels:
$L/K$ is abelian of exponent $m$, and it is unramified outside $$S=\{\mathfrak p:\text{bad reduction}\}\cup\{\mathfrak p\mid m\}\cup\{\text{archimedean places}\}.$$
Abelian of exponent $m$: because $\operatorname{Gal}(L/K)$ embeds into $\operatorname{Hom}(E(K)/mE(K),E[m])$, which is abelian killed by $m$. Unramifiedness: at a prime of good reduction not dividing $m$, reduction is injective on $E[m]$, so the inertia group acts trivially on the division points.
For a number field $K$, a finite set $S$ of places, and $m\ge2$, there are only finitely many abelian extensions $L/K$ of exponent $m$ unramified outside $S$; their compositum is finite over $K$.
The proof: enlarge $S$ so $\mathcal{O}_{K,S}$ is a PID; then $L\subseteq K\bigl(\sqrt[m]{\mathcal{O}_{K,S}^\times}\bigr)$ by Kummer theory, and $\mathcal{O}_{K,S}^\times/(\mathcal{O}_{K,S}^\times)^m$ is finite by Dirichlet's unit theorem. The enlargement of $S$ to reach a PID uses finiteness of the class group. ∎
Weak Mordell–Weil rests on exactly two facts from algebraic number theory: the class group is finite and the unit group is finitely generated. Everything else is bookkeeping. That is why practical descent computations are dominated by bnfinit-style class-group and unit computations — and why they become infeasible for record curves.
? \\ For K = Q, m = 2, S = {2, 3, 11, infinity}:
? \\ Q(S,2) = squarefree integers supported on S, together with -1:
? S = [2,3,11];
? QS2 = [ prod(i=1,#S, S[i]^bittest(k,i-1)) * (-1)^bittest(k,#S)
| k <- [0 .. 2^(#S+1)-1] ];
? #QS2
% 16 \\ = 2^(|S|+1)
? Set(QS2)
This 16-element group is the ambient space for a 2-descent on a curve with bad reduction at 2, 3, 11 — the descent map's image is a subgroup of it, cut out by local conditions.
4.22 Show that the left kernel of $\kappa$ is exactly $mE(K)$.
($\supseteq$) If $P=mP_0$ with $P_0\in E(K)$, choose $Q=P_0$; then $\sigma Q-Q=\sigma P_0-P_0=\mathcal{O}$ for all $\sigma$ ✓.
($\subseteq$) If $\kappa(P,\sigma)=\mathcal{O}$ for all $\sigma$, then for any $Q$ with $mQ=P$ we have $\sigma Q=Q$ for all $\sigma\in G_K$, so $Q\in E(K)$ and $P=mQ\in mE(K)$ ✓. ∎
4.23 Compute $\mathbb{Q}(S,2)$ for $S=\{2,5\}$ and give its order.
$\mathbb{Q}(S,2)=\{d\in\mathbb{Q}^\times/(\mathbb{Q}^\times)^2 : v_p(d)\equiv0\bmod2\ \forall p\notin S\}$, i.e. squarefree integers whose prime factors lie in $S$, times $\pm1$: $$\{\pm1,\pm2,\pm5,\pm10\},\qquad \#=8=2^{|S|+1}.$$ As a group it is $(\mathbb{Z}/2)^3$, generated by $-1,2,5$. ✓
In a 2-descent on a curve with bad reduction only at 2 and 5, the image of the descent map is a subgroup of this — so the 2-Selmer rank is at most 3, giving $r\le3-\dim E(\mathbb{Q})[2]$ before any local conditions are imposed.
4.24 Explain why $L/K$ is unramified outside $S$, at a prime of good reduction $\mathfrak p\nmid m$.
Let $I_{\mathfrak p}$ be the inertia group at a prime above $\mathfrak p$ in $\overline K$. For $P\in E(K)$ and $Q$ with $mQ=P$, and $\sigma\in I_{\mathfrak p}$: reducing mod $\mathfrak p$, $\sigma$ acts trivially on the residue field, so $\widetilde{\sigma Q}=\widetilde Q$, hence $\widetilde{\sigma Q-Q}=\tilde{\mathcal{O}}$.
But $\sigma Q-Q\in E[m]$, and reduction is injective on $E[m]$ at a prime of good reduction with $\mathfrak p\nmid m$ (the kernel of reduction is the formal group, which has no $m$-torsion). So $\sigma Q-Q=\mathcal{O}$, i.e. $\sigma$ fixes $Q$. Since this holds for all such $Q$, $I_{\mathfrak p}$ acts trivially on $L$: unramified ✓. ∎
For any elliptic curve $E$ over a number field $K$, $$E(K)\cong\mathbb{Z}^r\times E(K)_{\text{tors}}$$ with $r\ge0$ finite and $E(K)_{\text{tors}}$ finite.
Let $A$ be an abelian group and $h:A\to\mathbb{R}_{\ge0}$ a function such that:
Then $A$ is finitely generated.
Proof. Let $Q_1,\dots,Q_n$ be coset representatives for $A/2A$. Given $P=P_0$, write $P_0=2P_1+Q_{i_1}$, $P_1=2P_2+Q_{i_2}$, and so on. From (1) and (2), $$4h(P_{j+1})\le h(2P_{j+1})+C=h(P_j-Q_{i_{j+1}})+C\le2h(P_j)+C'+C,$$ so $$h(P_{j+1})\le\tfrac12h(P_j)+\tfrac{C''}{4}.$$ Iterating, $h(P_j)\le2^{-j}h(P_0)+C''/2$, so eventually $h(P_j)\le1+C''/2=:B$. Then $$P_0=2^jP_j+\sum_{k=1}^{j}2^{k-1}Q_{i_k},$$ so $P_0$ lies in the group generated by $\{Q_i\}$ together with the finite set $\{P:h(P)\le B\}$. ∎
Take $A=E(K)$, $h$ the naive height. Condition (1) is the translation inequality (Lesson 46), (2) is the duplication inequality, (3) is Northcott, and (4) is weak Mordell–Weil (Lesson 51). Done.
Two gaps:
Since Ш is not known to be finite, the first gap cannot be closed unconditionally. That is the theme of Phase 5.
Two parallel procedures:
They meet iff Ш is finite. Since Ш's finiteness is open, this is not an algorithm — but it terminates in practice for most curves.
? E = ellinit([0,0,0,-7,6]);
? ellrank(E)
% [3, 3, 0, [...]] \\ lower = upper = 3: rank determined
? \\ a harder curve where they differ:
? F = ellinit([0,0,1,-79,342]);
? ellrank(F)
% [2, 4, 0, [...]] \\ gap of 2 = dim Sha[2]
? \\ third component 's': 2^s divides #Sha[2] under BSD assumptions
? ellrank(F, 1) \\ effort flag: search harder
4.25 Fill in the step "$h(2P_{j+1})=h(P_j-Q_{i_{j+1}})$" in the descent lemma proof.
By construction $P_j=2P_{j+1}+Q_{i_{j+1}}$, so $2P_{j+1}=P_j-Q_{i_{j+1}}$ ✓. Then applying condition (1) with $Q=-Q_{i_{j+1}}$: $$h(2P_{j+1})=h(P_j-Q_{i_{j+1}})\le2h(P_j)+C_{-Q_{i_{j+1}}}.$$ Setting $C'=\max_i C_{-Q_i}$ (finite, since there are finitely many cosets) gives the uniform bound used. ∎
4.26 Find a curve where PARI's ellrank returns unequal bounds, and interpret.
? \\ curves with nontrivial Sha[2]:
? for(N=571, 600, my(v = ellsearch(N));
for(i=1,#v, my(E=ellinit(v[i][2]), R=ellrank(E));
if(R[1] != R[2], print(v[i][1], " ", R[1..2]))));
Curve 571a1 is the classic example: $\mathrm{Sel}^{(2)}$ has dimension 2 but the rank is 0, so $\dim\text{Ш}[2]=2$ and $\#\text{Ш}=4$. PARI reports rank bounds $[0,2]$. Under BSD the truth is 0.
Note the gap is even. That is forced by the Cassels pairing (Lesson 61): Ш carries a nondegenerate alternating form, so $\dim_{\mathbb{F}_2}\text{Ш}[2]$ is even when Ш$[2^\infty]$ is finite.
4.27 Explain precisely what is unconditional in "the rank-30 curve has rank 30".
Unconditional: rank $\ge30$. Thirty explicit points $P_1,\dots,P_{30}\in E(\mathbb{Q})$, a $30\times30$ canonical-height Gram matrix computed with rigorous error bounds, determinant provably nonzero. By Lesson 50 this proves $\mathbb{Z}$-independence, hence $\operatorname{rank}\ge30$.
Conditional (on GRH and BSD): rank $\le30$. Bober's explicit-formula method under GRH gives analytic rank $\le31$; the root number is $+1$ so the analytic rank is even, hence $\le30$; and BSD converts analytic rank to algebraic rank.
Not claimed: that rank $=30$ unconditionally. The largest unconditionally determined rank remains 20 (Elkies–Klagsbrun 2020), where descent closed the gap.
A practical loose end: how do you turn "these $k$ points are independent" into "these $k$ points generate"?
A subgroup $\Gamma\subseteq E(\mathbb{Q})$ of finite index is $\ell$-saturated if $\Gamma=E(\mathbb{Q})\cap\frac1\ell\Gamma$, i.e. no element of $\Gamma$ is $\ell$ times a point of $E(\mathbb{Q})\setminus\Gamma$. It is saturated if it is $\ell$-saturated for every prime $\ell$.
If $Q\in E(\mathbb{Q})$ and $\ell Q\in\Gamma$ with $Q\notin\Gamma$, then $\hat h(Q)=\hat h(\ell Q)/\ell^2$ is small. Combining with a lower bound $\hat h(Q)\ge\mu$ for all non-torsion $Q$ (an explicit height lower bound, from Silverman's height-difference estimate or from a Lehmer-type bound), one gets $$\ell^2\le\frac{\max_{\gamma\in\Gamma,\ \gamma\ \text{short}}\hat h(\gamma)}{\mu},$$ so only finitely many $\ell$ need testing.
There are explicit constants such that for all $P\in E(\mathbb{Q})$, $$-\tfrac1{12}h(j)-\tfrac1{12}\log|\Delta|-0.973\ \le\ \hat h(P)-\tfrac12h(P)\ \le\ \tfrac1{12}h(j)+\tfrac1{12}\log|\Delta|+1.07,$$ (in Silverman's normalisation; adjust by a factor 2 for PARI's). This makes searching $\{\hat h\le B\}$ into searching $\{h\le 2B+\text{const}\}$, which is a concrete finite region.
? E = ellinit([0,0,0,-7,6]);
? G = select(P->ellorder(E,P)==0, ellrank(E)[4]);
? \\ deliberately unsaturate:
? G2 = [ellmul(E,G[1],3), G[2], G[3]];
? matdet(ellheightmatrix(E,G2)) / matdet(ellheightmatrix(E,G))
% 9.000... \\ index 3
? \\ detect it: is 3*P1 divisible by 3 within the group? yes, trivially.
? \\ the real test is whether some combination is divisible:
? P = ellmul(E, G2[1], 1);
? elldivpol(E, 3); \\ 3-division polynomial for the divisibility test
? \\ Sage: E.saturation([P1,P2,P3])
PARI does not expose a saturation routine directly; mwrank (via Sage's E.gens()) does saturation automatically, and Sage's E.saturation(pts) is the standard interface.
Saturation is needed to know $E(\mathbb{Q})$ exactly. It is not needed to prove $\operatorname{rank}\ge k$ — independence suffices. Record claims are lower bounds, so saturation is typically omitted, and the published "generators" may generate a finite-index subgroup. That is a legitimate and clearly stated weakening.
4.28 Show that if $\Gamma$ has index $n$ in $E(\mathbb{Q})/\text{tors}$ then $\det(\text{Gram}_\Gamma)=n^2\operatorname{Reg}(E)$.
Let $B$ be a basis of $E(\mathbb{Q})/\text{tors}$ and $B'$ a basis of $\Gamma$. Then $B'=BT$ for an integer matrix $T$ with $|\det T|=[E(\mathbb{Q})/\text{tors}:\Gamma]=n$. The Gram matrices satisfy $$M'=T^{\mathsf T}MT\ \Rightarrow\ \det M'=(\det T)^2\det M=n^2\operatorname{Reg}(E).\qquad\blacksquare$$
This is the standard covolume-scaling fact for sublattices, and the practical detector for non-saturation: a determinant that is a perfect square times something "nicer" suggests an index.
4.29 Estimate the largest prime $\ell$ needing testing for a curve with $\hat h(P_i)\le5$ and $\mu=0.01$.
If $\ell Q\in\Gamma$ with $\hat h(\ell Q)\le\max$ of the Gram diagonal, say 5, then $\hat h(Q)=5/\ell^2$. For $Q$ non-torsion we need $\hat h(Q)\ge\mu=0.01$, so $\ell^2\le500$, $\ell\le22$. Test $\ell\in\{2,3,5,7,11,13,17,19\}$.
In rank $r$ the relevant quantity is the largest $\hat h$ of a reduced basis vector, so LLL-reducing the Mordell–Weil lattice first sharply reduces the prime list. Getting good $\mu$ (via Cremona–Prickett–Siksek's explicit lower bound) is the other half.
4.30 Use the height-difference bound to convert $\hat h\le3$ into a naive search bound for $y^2=x^3-7x+6$.
? E = ellinit([0,0,0,-7,6]);
? [E.j, E.disc]
% [j-value, 246016]
? hj = log(max(abs(numerator(E.j)), abs(denominator(E.j))));
? bound = 2*3 + (1/6)*hj + (1/6)*log(abs(E.disc)) + 2.2
? exp(bound) \\ naive height bound H
You get $H$ around $10^4$–$10^6$, which ellratpoints(E, bound) can search directly. Note how quickly this blows up: doubling the $\hat h$ target squares $H$. That exponential relationship is why searching for large generators is hopeless without descent-assisted coverings (Lesson 89).
Descent produces auxiliary curves. This lesson says what they are.
A torsor for $E/K$ is a pair $(C,\mu)$ where $C$ is a smooth projective genus-1 curve over $K$ and $$\mu:C\times E\longrightarrow C$$ is a morphism defined over $K$ that is a simply transitive group action: $\mu(p,\mathcal{O})=p$, $\mu(\mu(p,P),Q)=\mu(p,P+Q)$, and for any $p,q\in C(\overline K)$ there is a unique $P\in E(\overline K)$ with $\mu(p,P)=q$. Two torsors are equivalent if there is a $K$-isomorphism commuting with the actions.
A torsor is "$E$ with the origin forgotten". Over $\overline K$ every torsor is trivial: pick any $p_0\in C(\overline K)$ and the map $P\mapsto\mu(p_0,P)$ is an isomorphism $E\to C$. The whole question is whether a rational base point exists.
$$\{\text{torsors for }E/K\}/\!\sim\ \ \longleftrightarrow\ \ H^1(G_K,E),$$ with the trivial class corresponding to $E$ itself. Moreover $$C(K)\ne\emptyset\iff[C]=0\text{ in }H^1(G_K,E).$$
The map. Given $C$, choose $p_0\in C(\overline K)$ and set $\xi_\sigma\in E(\overline K)$ to be the unique point with $\mu(p_0,\xi_\sigma)=\sigma(p_0)$. One checks $\xi$ is a cocycle (Lesson 54) and that changing $p_0$ changes $\xi$ by a coboundary.
"Does $C$ have a rational point?" is a hard geometric question. "$[C]=0$ in $H^1$?" is a cohomological one, and cohomology has exact sequences, restriction maps to local fields, and finiteness theorems. Descent works by cutting $H^1$ down with local conditions.
The genus-1 curves that arise in descent are all torsors:
The degree of the natural map $C\to E$ (or rather, of the associated line bundle) is 4, 4, 3 respectively — the "$n$" in "$n$-covering".
An $n$-covering of $E$ is a pair $(C,\pi)$ with $C$ a torsor and $\pi:C\to E$ a morphism over $K$ such that over $\overline K$, $\pi$ becomes $[n]$ under some identification $C\cong E$. Equivalently, an element of $H^1(G_K,E[n])$.
So: $H^1(G_K,E[n])$ classifies $n$-coverings; $H^1(G_K,E)$ classifies torsors; and the map between them (from the Kummer sequence) forgets the covering map and remembers only the curve.
5.1 Show that a torsor with a rational point is trivial.
If $p_0\in C(K)$, take it as the base point in the construction. Then $\sigma(p_0)=p_0$ for all $\sigma\in G_K$, so $\xi_\sigma$ is the unique point with $\mu(p_0,\xi_\sigma)=p_0$, namely $\xi_\sigma=\mathcal{O}$. The cocycle is trivial, so $[C]=0$ ✓.
Conversely if $[C]=0$ the cocycle is a coboundary $\xi_\sigma=\sigma(P_0)-P_0$; then $q_0=\mu(p_0,-P_0)$ satisfies $\sigma(q_0)=q_0$, so $q_0\in C(K)$ ✓. ∎
5.2 Verify that $C: v^2=-u^4+w^4$ is a torsor for $y^2=x^3-x$ and determine whether it has rational points.
$C$ is a smooth genus-1 quartic (with two points at infinity over $\overline{\mathbb{Q}}$). Its Jacobian is $y^2=x^3-x$: for $v^2=au^4+bu^2+c$ the Jacobian is $y^2=x^3-\frac{I}{3}x-\frac{J}{27}$ with the standard quartic invariants; here it comes out to $y^2=x^3-x$ up to twist.
$-u^4+v^2=w^4$, i.e. $u^4+v^2=w^4$ has only trivial solutions — this is Fermat's theorem that $x^4-y^4=z^2$ has no nontrivial integer solutions, proved by his own infinite descent. So $C(\mathbb{Q})$ contains only the "trivial" points $(u,v,w)$ with $uv=0$, which map to torsion.
? \\ empirical check:
? for(u=1,60, for(w=1,60, if(gcd(u,w)==1 && issquare(w^4-u^4), print([u,w]))))
[1, 1]
Only the trivial solution. So $[C]\ne0$ if $C$ is everywhere locally solvable — and it is, making $C$ a candidate element of Ш or of the image of the descent map. In fact it is in the image of $\alpha$ nowhere: it certifies $\operatorname{rank}=0$.
5.3 Explain why Selmer's curve $3x^3+4y^3+5z^3=0$ is a counterexample to the Hasse principle.
Local solvability: over $\mathbb{R}$ obvious (mixed signs). Over $\mathbb{Q}_p$ for $p\ne3,5$: the cubic form in 3 variables over $\mathbb{F}_p$ has a nontrivial zero for $p\gt7$ by Chevalley–Warning-type/Weil bounds, and Hensel lifts it. The primes $2,3,5$ are checked by hand.
No rational point: Selmer's original proof uses descent in $\mathbb{Q}(\sqrt[3]{?})$ — a cubic-field computation showing the relevant Selmer group element is nontrivial.
Hence the curve has points everywhere locally but none globally: $[C]\ne0$ in $H^1(G_\mathbb{Q},E)$ yet $[C]$ restricts to 0 at every place. That is precisely the definition of a nonzero element of Ш (Lesson 61). ∎
Concrete definitions only; no derived functors needed.
An abelian group $M$ with an action of a group $G$ by group automorphisms: $\sigma(m+n)=\sigma m+\sigma n$, $(\sigma\tau)m=\sigma(\tau m)$, $1\cdot m=m$.
$$H^0(G,M)=M^G=\{m\in M:\sigma m=m\ \forall\sigma\in G\}.$$
For $G=G_K$ and $M=E(\overline K)$: $H^0=E(K)$. The rational points are the $H^0$.
A 1-cocycle is a map $\xi:G\to M$, $\sigma\mapsto\xi_\sigma$, with $$\xi_{\sigma\tau}=\xi_\sigma+\sigma\,\xi_\tau\qquad\text{for all }\sigma,\tau\in G.$$ A 1-coboundary is one of the form $\xi_\sigma=\sigma m-m$ for a fixed $m\in M$. Write $Z^1(G,M)$ and $B^1(G,M)$; then $$H^1(G,M)=Z^1(G,M)/B^1(G,M).$$ (For profinite $G$ like $G_K$, cocycles are required to be continuous, i.e. to factor through a finite quotient.)
If $G$ acts trivially on $M$, the cocycle condition becomes $\xi_{\sigma\tau}=\xi_\sigma+\xi_\tau$ — a homomorphism — and coboundaries vanish. So $$H^1(G,M)=\operatorname{Hom}(G,M).$$ This is the case for $E[2]$ when $E[2]\subseteq E(\mathbb{Q})$, and it is why 2-descent with full rational 2-torsion is so concrete.
A short exact sequence of $G$-modules $0\to A\xrightarrow{f}B\xrightarrow{g}C\to0$ induces $$0\to A^G\to B^G\to C^G\xrightarrow{\ \delta\ }H^1(G,A)\to H^1(G,B)\to H^1(G,C)\to\cdots$$ The connecting map $\delta$: given $c\in C^G$, choose $b\in B$ with $g(b)=c$; then $\sigma b-b\in\ker g=f(A)$, and $\delta(c)=[\sigma\mapsto f^{-1}(\sigma b-b)]$.
Apply this to $0\to E[m]\to E(\overline K)\xrightarrow{[m]}E(\overline K)\to0$. Then $\delta:E(K)\to H^1(G_K,E[m])$ sends $P$ to the class of $\sigma\mapsto\sigma Q-Q$ where $mQ=P$. That is exactly the Kummer pairing of Lesson 51, now packaged as a cohomology class.
5.4 Prove $\xi_1=0$ for any 1-cocycle.
Set $\sigma=\tau=1$: $\xi_1=\xi_1+1\cdot\xi_1=2\xi_1$, so $\xi_1=0$ ✓.
Similarly $\xi_{\sigma^{-1}}=-\sigma^{-1}\xi_\sigma$: from $0=\xi_1=\xi_{\sigma\sigma^{-1}}=\xi_\sigma+\sigma\xi_{\sigma^{-1}}$.
5.5 Compute $H^1(G,\mathbb{Z}/2)$ for $G=\operatorname{Gal}(\mathbb{Q}(\sqrt2)/\mathbb{Q})$ with trivial action.
$G\cong\mathbb{Z}/2$ acting trivially on $M=\mathbb{Z}/2$. Then $H^1=\operatorname{Hom}(\mathbb{Z}/2,\mathbb{Z}/2)\cong\mathbb{Z}/2$, of order 2.
The nontrivial class is the isomorphism $\sigma\mapsto1$. Under the correspondence with quadratic extensions (Kummer theory), it corresponds to $\mathbb{Q}(\sqrt2)$ itself.
5.6 Derive Kummer theory: $H^1(G_K,\mu_m)\cong K^\times/(K^\times)^m$ when $\mu_m\subseteq K$.
Start from the exact sequence of $G_K$-modules $$1\to\mu_m\to\overline K^\times\xrightarrow{\ x\mapsto x^m\ }\overline K^\times\to1$$ (surjective since $\overline K$ is algebraically closed). The long exact sequence gives $$K^\times\xrightarrow{m}K^\times\to H^1(G_K,\mu_m)\to H^1(G_K,\overline K^\times)=0$$ by Hilbert 90. Hence $H^1(G_K,\mu_m)\cong K^\times/(K^\times)^m$ ✓.
Why it matters: when $E[2]\subseteq E(\mathbb{Q})$, $E[2]\cong\mu_2\times\mu_2$ as $G_\mathbb{Q}$-modules, so $$H^1(G_\mathbb{Q},E[2])\cong\bigl(\mathbb{Q}^\times/(\mathbb{Q}^\times)^2\bigr)^2.$$ The descent map lands in pairs of square classes — precisely $(x-e_1,\ x-e_2)$ in Lesson 57. Every explicit descent formula in the literature is this isomorphism made concrete.
Now assemble. Start from the exact sequence of $G_K$-modules given by multiplication by $m$:
$$0\longrightarrow E[m]\longrightarrow E(\overline K)\xrightarrow{\ [m]\ }E(\overline K)\longrightarrow0.$$Surjectivity holds because $[m]$ is a surjective morphism on $\overline K$-points (Lesson 30 Ex. 2.26).
Taking Galois cohomology and extracting: $$0\longrightarrow\frac{E(K)}{mE(K)}\xrightarrow{\ \delta\ }H^1\bigl(G_K,E[m]\bigr)\longrightarrow H^1\bigl(G_K,E\bigr)[m]\longrightarrow0.$$
Read this line carefully — it is the whole of descent theory.
For $P\in E(K)$, the fibre $C_P=[m]^{-1}(P)\subset E$ is a genus-1 curve over $K$ (a coset of $E[m]$), and $\pi=[m]|_{C_P}:C_P\to E$ makes it an $m$-covering. Then $$C_P(K)\ne\emptyset\iff P\in mE(K).$$ So $\delta(P)=0$ iff $P$ is divisible by $m$. The descent map measures divisibility.
$H^1(G_K,E[m])$ is infinite. It does not bound anything. We need a finite subgroup that still contains $\operatorname{im}\delta$. The cutting condition is local solvability: for $P\in E(K)$, the covering $C_P$ certainly has points over every completion $K_v$ (namely, the $m$-division points of $P$ in $E(K_v)$). Imposing that condition gives the Selmer group.
Then $G_K$ acts trivially on $E[2]\cong(\mathbb{Z}/2)^2$, so by Lesson 54, $$H^1(G_K,E[2])=\operatorname{Hom}(G_K,(\mathbb{Z}/2)^2)\cong\bigl(K^\times/(K^\times)^2\bigr)^2,$$ using Kummer theory. Writing $E:y^2=(x-e_1)(x-e_2)(x-e_3)$, the descent map becomes the explicit $$\delta(x,y)=\bigl(x-e_1,\ x-e_2\bigr)\ \bmod\ \text{squares},$$ with the third coordinate determined since $\prod(x-e_i)=y^2$ is a square. That is the classical formula, now derived.
5.7 Verify that $\delta(x,y)=(x-e_1,x-e_2)$ is a homomorphism, by checking it on a collinear triple.
Let $P_1,P_2,P_3$ be collinear, on $y=\lambda x+\nu$, so $P_1+P_2+P_3=\mathcal{O}$. Substituting into $y^2=\prod(x-e_i)$: $$\prod_{i}(x-e_i)-(\lambda x+\nu)^2=\prod_j(x-x_j)$$ (both monic cubics with the same roots $x_1,x_2,x_3$). Evaluating at $x=e_1$: $$-(\lambda e_1+\nu)^2=\prod_j(e_1-x_j)\ \Longrightarrow\ \prod_j(x_j-e_1)=(\lambda e_1+\nu)^2,$$ a square. So $\delta_1(P_1)\delta_1(P_2)\delta_1(P_3)=1$ in $K^\times/(K^\times)^2$ ✓, and the same for $e_2$. Hence $\delta$ is a homomorphism. ∎
Note where the miracle lives: it is the identity $\prod_j(x_j-e_1)=(\lambda e_1+\nu)^2$, a pure consequence of the collinearity condition.
5.8 Compute $\delta$ on the 2-torsion points of $y^2=x(x-1)(x+3)$.
$e_1=0,e_2=1,e_3=-3$. For $P=(e_1,0)=(0,0)$ we cannot use $x-e_1=0$; the convention is to replace the zero entry by the product of the differences: $$\delta_1(e_1,0)=(e_1-e_2)(e_1-e_3)=(-1)(3)=-3,\qquad \delta_2(e_1,0)=e_1-e_2=-1.$$ So $\delta((0,0))=(-3,-1)$ mod squares.
For $P=(1,0)$: $\delta_1=1-0=1$, $\delta_2=(e_2-e_1)(e_2-e_3)=1\cdot4=4\equiv1$. So $\delta((1,0))=(1,1)$ — trivial! Meaning $(1,0)\in2E(\mathbb{Q})$.
? E = ellinit([0,2,0,-3,0]); \\ y^2 = x^3+2x^2-3x = x(x-1)(x+3)
? elltors(E)
? \\ is (1,0) divisible by 2?
? ellratpoints(E, 50)
Check: a 2-torsion point $T$ is in $2E(\mathbb{Q})$ iff a certain pair of quantities are both squares — the classical criterion. Here $e_2-e_1=1$ and $e_2-e_3=4$ are both squares, so yes.
5.9 Show $\ker\delta=mE(K)$ directly from the cocycle definition.
$\delta(P)=0$ means the cocycle $\sigma\mapsto\sigma Q-Q$ is a coboundary: there is $R\in E(\overline K)$ with $\sigma Q-Q=\sigma R-R$ for all $\sigma$. Then $\sigma(Q-R)=Q-R$, so $Q-R\in E(K)$. But $R$ has to lie in $E[m]$ for the coboundary to be valued in $E[m]$... more carefully: coboundaries in $B^1(G_K,E[m])$ are $\sigma\mapsto\sigma T-T$ for $T\in E[m]$, and since $G_K$ acts on $E[m]$ possibly nontrivially these are not all zero.
Cleanest route: exactness of the long exact sequence at $H^1(G_K,E[m])$ says $\ker\bigl(H^1(E[m])\to H^1(E)\bigr)=\operatorname{im}\delta$, and exactness at $E(K)$ (the $H^0$ level) says $\ker\delta=\operatorname{im}\bigl([m]:E(K)\to E(K)\bigr)=mE(K)$ ✓. ∎
The Selmer group is defined by conditions at each place. This lesson makes "local condition" concrete and explains why it is decidable.
For each place $v$ of $K$, fix an embedding $\overline K\hookrightarrow\overline{K_v}$. This gives an injection $G_{K_v}\hookrightarrow G_K$ (the decomposition group) and hence restriction maps $$\operatorname{res}_v:H^1(G_K,M)\longrightarrow H^1(G_{K_v},M).$$
For each $v$ the same construction gives $$0\to\frac{E(K_v)}{mE(K_v)}\xrightarrow{\ \delta_v\ }H^1(G_{K_v},E[m])\to H^1(G_{K_v},E)[m]\to0,$$ and the restriction maps make a commutative diagram with the global sequence. The image $\operatorname{im}\delta_v$ is the local condition at $v$.
At a place $v$ of good reduction with $v\nmid m$, the local condition is exactly the "unramified" subgroup $H^1_{\text{ur}}(G_{K_v},E[m])$, and any global class already unramified there automatically satisfies it. So the conditions bite only at $$S=\{v:\text{bad reduction}\}\cup\{v\mid m\}\cup\{v\ \text{archimedean}\}.$$ That is a finite set, and it is why the Selmer group is finite.
To test whether $C:v^2=du^4+au^2w^2+cw^4$ has a $\mathbb{Q}_p$-point:
Both steps are finite loops. This is what makes descent an algorithm — up to the Ш obstruction.
? \\ Is x^2 = 7 solvable in Q_3? (Lesson 0 Ex 0.13)
? issquare(7 + O(3^20))
% 1
? \\ Local solvability of a quartic v^2 = d*u^4 + a*u^2 + c over Q_p:
locsolv(d, a, c, p, prec = 6) =
{ for(k = 0, p^prec - 1,
my(t = d*k^4 + a*k^2 + c);
if(t != 0 && issquare(t + O(p^prec)), return(1)));
\\ also test the point at infinity (w=0): need d a square
issquare(d + O(p^prec));
}
? locsolv(2, 0, -1, 5)
% 1
? locsolv(-1, 0, 1, 3)
(This is a toy version — a production implementation handles the $p$-adic precision and the projective points more carefully.)
5.10 Compute $\#E(\mathbb{R})/2E(\mathbb{R})$ for both signs of $\Delta$.
$\Delta\lt0$: $E(\mathbb{R})\cong\mathbb{R}/\mathbb{Z}$, and multiplication by 2 on $\mathbb{R}/\mathbb{Z}$ is surjective. So $E(\mathbb{R})/2E(\mathbb{R})=0$, order 1.
$\Delta\gt0$: $E(\mathbb{R})\cong\mathbb{R}/\mathbb{Z}\times\mathbb{Z}/2$, and $2\cdot(\mathbb{R}/\mathbb{Z}\times\mathbb{Z}/2)=\mathbb{R}/\mathbb{Z}\times0$. So the quotient is $\mathbb{Z}/2$, order 2 ✓.
Interpretation: the local condition at $\infty$ is nontrivial exactly when the curve has two real components. That is why $c_\infty$ appears in BSD and why real-place conditions matter in descent.
5.11 Show that $v^2=-u^4-w^4$ has no $\mathbb{R}$-points, hence no $\mathbb{Q}$-points.
For real $u,w$ not both zero, $-u^4-w^4\lt0$, so $v^2\lt0$: impossible ✓.
This is the cheapest possible local obstruction and it is checked first in any descent implementation: if the quartic is negative definite, discard $d$ immediately. In the 2-isogeny descent on $y^2=x^3+ax^2+bx$ with $b\gt0$ and $a$ such that the quartic is negative for $d\lt0$, this kills all negative $d$ at once.
5.12 Determine whether $C:v^2=2u^4-1$ has points over $\mathbb{Q}_5$ and over $\mathbb{Q}_7$.
Mod 5: 4th powers mod 5 are $\{0,1\}$ (since $u^4=1$ for $u\ne0$ by Fermat). So $2u^4-1\in\{-1,1\}=\{4,1\}$. Both are squares mod 5 ✓, and Hensel lifts (derivative $2v\ne0$). So $C(\mathbb{Q}_5)\ne\emptyset$.
Mod 7: 4th powers mod 7 are $\{0,1,2,4\}$ (since $u^6=1$, so $u^4$ ranges over the cubes... compute: $1^4=1,2^4=2,3^4=4,4^4=4,5^4=2,6^4=1$). So $2u^4-1\in\{-1,1,3,7\equiv0\}=\{6,1,3,0\}$. Squares mod 7 are $\{0,1,2,4\}$. We have $1$ ✓ (from $u^4=1$). So solvable.
? for(u=0,6, print(u, " ", (2*u^4-1)%7, " ", issquare(Mod(2*u^4-1,7))))
Locally solvable at both. In fact $C$ has the rational point $(u,v)=(1,1)$: $2-1=1$ ✓. So $C$ is a trivial torsor.
The most hands-on rank computation available. It requires one rational point of order 2.
$$E:y^2=x^3+ax^2+bx=x(x^2+ax+b),\qquad T=(0,0)\in E(\mathbb{Q})[2],$$ $$E':y^2=x^3-2ax^2+(a^2-4b)x,\qquad T'=(0,0)\in E'(\mathbb{Q})[2],$$ with $\varphi:E\to E'$, $\varphi(x,y)=\left(\dfrac{y^2}{x^2},\ \dfrac{y(b-x^2)}{x^2}\right)$, $\ker\varphi=\{\mathcal{O},T\}$, and dual $\hat\varphi:E'\to E$ with $\hat\varphi\varphi=[2]_E$, $\varphi\hat\varphi=[2]_{E'}$.
$$\alpha:E(\mathbb{Q})\longrightarrow\mathbb{Q}^\times/(\mathbb{Q}^\times)^2,\qquad \alpha(P)=\begin{cases}1&P=\mathcal{O},\\ b&P=T=(0,0),\\ x&P=(x,y),\ x\ne0.\end{cases}$$ Similarly $\alpha':E'(\mathbb{Q})\to\mathbb{Q}^\times/(\mathbb{Q}^\times)^2$ with $b'=a^2-4b$.
Why (1). If $P_1+P_2+P_3=\mathcal{O}$ with all $x_i\ne0$, the line $y=\lambda x+\nu$ meets $E$ at the three points and $$x^3+ax^2+bx-(\lambda x+\nu)^2=\prod_i(x-x_i).$$ Setting $x=0$: $-\nu^2=-x_1x_2x_3$, so $x_1x_2x_3=\nu^2$ is a square ✓. The cases involving $T$ or $\mathcal{O}$ are checked separately.
Why (3). If $x=m/e^2$, $y=n/e^3$ in lowest terms, then $n^2=m(m^2+ame^2+be^4)$ and $\gcd(m,\ m^2+ame^2+be^4)$ divides $be^4$, hence divides $b$ (as $\gcd(m,e)=1$). Writing $m=d\cdot m_1^2$ with $d$ squarefree gives $d\mid b$. ∎
$$2^{\,r+\dim_{\mathbb{F}_2}E(\mathbb{Q})[2]}=\bigl|\operatorname{im}\alpha\bigr|\cdot\bigl|\operatorname{im}\alpha'\bigr|.$$ Equivalently $$r=\log_2|\operatorname{im}\alpha|+\log_2|\operatorname{im}\alpha'|-2\ +\ \bigl(2-\dim E(\mathbb{Q})[2]\bigr)-\ \ldots$$ The clean statement: with $\dim_{\mathbb{F}_2}E(\mathbb{Q})[2]=t$, $$r=\log_2|\operatorname{im}\alpha|+\log_2|\operatorname{im}\alpha'|-2.$$ (Here $t=1$ or $2$; both $T\in E(\mathbb{Q})$ and $T'\in E'(\mathbb{Q})$ are accounted for by the two subtracted factors of 2.)
$d\in\operatorname{im}\alpha$ (with $d$ squarefree, $d\mid b$) iff there is $P=(x,y)$ with $x=d u^2/w^2$. Substituting into $y^2=x(x^2+ax+b)$ and writing $y=d u v/w^3$ gives
$$C_d:\qquad v^2=d\,u^4+a\,u^2w^2+\frac{b}{d}\,w^4.$$ So: $d\in\operatorname{im}\alpha\iff C_d(\mathbb{Q})\ne\emptyset$. And $C_d$ is a 2-covering of $E$ (Lesson 53).
Deciding $C_d(\mathbb{Q})\ne\emptyset$ is not known to be decidable. What is decidable is local solvability: $C_d(\mathbb{R})\ne\emptyset$ and $C_d(\mathbb{Q}_p)\ne\emptyset$ for all $p$. Define $$\mathrm{Sel}^{(\varphi)}=\{d:\ C_d\text{ everywhere locally solvable}\}\supseteq\operatorname{im}\alpha.$$ The gap is $\text{Ш}(E/\mathbb{Q})[\varphi]$. Using $\mathrm{Sel}$ in place of $\operatorname{im}\alpha$ gives an upper bound on $r$; finding actual points gives a lower bound.
5.13 Carry out descent by 2-isogeny for $E:y^2=x^3-x$ completely.
$y^2=x(x^2-1)$, so $a=0$, $b=-1$. Then $E':y^2=x^3+4x$, with $a'=0$, $b'=a^2-4b=4$.
$\operatorname{im}\alpha$: $d$ squarefree dividing $b=-1$, so $d\in\{\pm1\}$. $C_{-1}:v^2=-u^4-w^4$, negative definite: no real points. So $\operatorname{im}\alpha=\{1\}$, $|\operatorname{im}\alpha|=1$.
$\operatorname{im}\alpha'$: $d\mid b'=4$, squarefree, so $d\in\{\pm1,\pm2\}$. $C_d:v^2=du^4+(4/d)w^4$.
$d=1$: $v^2=u^4+4w^4$; $(u,v,w)=(0,2,1)$ ✓ — in the image (it is $\alpha'(T')=b'=4\equiv1$).
$d=-1$: $v^2=-u^4-4w^4$, negative definite ✗.
$d=2$: $v^2=2u^4+2w^4$; $(1,2,1)$: $2+2=4=2^2$ ✓.
$d=-2$: negative definite ✗.
So $\operatorname{im}\alpha'=\{1,2\}$, order 2.
Rank: $r=\log_2 1+\log_2 2-2=0+1-2=-1$?? The formula needs the correct normalisation. Use $2^{r+t}=|\operatorname{im}\alpha|\cdot|\operatorname{im}\alpha'|$ with... here $E(\mathbb{Q})[2]=(\mathbb{Z}/2)^2$ so $t=2$: $2^{r+2}=1\cdot2$ gives $2^{r+2}=2$, $r=-1$. Still wrong — the correct classical formula is $$2^{r}=\frac{|\operatorname{im}\alpha|\cdot|\operatorname{im}\alpha'|}{4}.$$ Then $2^r=1\cdot2/4$, still not an integer, indicating $|\operatorname{im}\alpha'|$ should be 4. Recheck $d=-1$ on $E'$: $v^2=-u^4-4w^4$ — indeed impossible. Let me recount using PARI:
? E = ellinit([0,0,0,-1,0]); ellrank(E)
% [0, 0, 0, []]
Rank 0 ✓. The lesson: the bookkeeping constants in the rank formula are easy to get wrong by a factor of 2 depending on whether you count $\mathcal{O}$, $T$, and how you treat $d$ versus $b/d$. Always sanity-check against ellrank. The correct statement is $2^{r+2}=|\operatorname{im}\alpha|\cdot|\operatorname{im}\alpha'|$ when $E[2]\subset E(\mathbb{Q})$, and getting $r=0$ requires $|\operatorname{im}\alpha|\cdot|\operatorname{im}\alpha'|=4$ — so $\operatorname{im}\alpha'$ has order 4, meaning $d=1,2$ and also $d=-1,-2$ must be re-examined over $E'$ with $b'=4$ where $C_d: v^2=du^4+(4/d)w^4$; for $d=-1$, $v^2=-u^4-4w^4$ is indeed impossible, so $\operatorname{im}\alpha$ must have order 2 as well: recheck $C_{-1}$ on $E$ with $b=-1$: $v^2=-u^4+(-1/-1)w^4=-u^4+w^4$, not $-u^4-w^4$. And $u^4+v^2=w^4$ has only trivial solutions (Fermat), but $(u,v,w)=(0,1,1)$ works, giving $d=-1$... which corresponds to $\alpha(T)=b=-1$ ✓. So $|\operatorname{im}\alpha|=2$, $|\operatorname{im}\alpha'|=2$, $2^{r+2}=4$, $r=0$ ✓✓.
Moral: the sign of $b/d$ matters, and the trivial solutions corresponding to $T$ and $\mathcal{O}$ must be counted. Fermat's theorem on $u^4+v^2=w^4$ is exactly what rules out the nontrivial points.
5.14 Do the same for $E:y^2=x^3-25x$ (congruent number 5) and confirm rank 1.
$a=0$, $b=-25$. Squarefree $d\mid25$: $d\in\{\pm1,\pm5\}$. $C_d:v^2=du^4-\frac{25}{d}w^4$.
So $\operatorname{im}\alpha\supseteq\{1,-1,5,-5\}$, order 4.
? E = ellinit([0,0,0,-25,0]);
? ellrank(E)
% [1, 1, 0, [[-4, 6]]]
Rank 1 ✓, so $2^{1+2}=8=|\operatorname{im}\alpha|\cdot|\operatorname{im}\alpha'|=4\cdot2$. Hence 5 is a congruent number, with the $(3/2,20/3,41/6)$ triangle.
5.15 Implement the 2-isogeny descent search in GP for a general $(a,b)$.
imalpha(a, b, ubound = 200) =
{ my(S = List(), divs = divisors(abs(b)));
for(i = 1, #divs,
for(s = 0, 1,
my(d = (-1)^s * divs[i], found = 0);
if(issquarefree(abs(d)),
for(u = 0, ubound, for(w = 1, ubound,
if(gcd(u,w) == 1 && issquare(d*u^4 + a*u^2*w^2 + (b/d)*w^4),
found = 1; break(2))));
if(found, listput(S, d)))));
Set(Vec(S));
}
? imalpha(0, -25)
% [-5, -1, 1, 5]
? imalpha(0, -1)
% [-1, 1]
This finds the image (a lower bound: the search may miss large points). To get the Selmer group you replace the point search by local solvability tests, giving an upper bound instead. The two together bracket the rank.
Two complete computations, to make the machinery concrete.
Equivalent to: $E_1:y^2=x^3-x$ has rank 0.
$a=0$, $b=-1$; $E':y^2=x^3+4x$ with $b'=4$.
On $E$: $d\in\{\pm1\}$. $C_1:v^2=u^4-w^4$ has $(1,0,1)$ ✓. $C_{-1}:v^2=-u^4+w^4$, i.e. $u^4+v^2=w^4$, has $(0,1,1)$ ✓ (the 2-torsion $(0,0)$). Nontrivial solutions would need $u,w\ne0$ — impossible by Fermat's descent. So $\operatorname{im}\alpha=\{\pm1\}$, order 2.
On $E'$: $d\in\{\pm1,\pm2\}$. $C_d:v^2=du^4+\frac4dw^4$. For $d\lt0$ the form is negative definite: no real points. $d=1$: $(0,2,1)$ ✓. $d=2$: $v^2=2u^4+2w^4$, $(1,2,1)$ ✓. So order 2.
Conclusion: $2^{r+2}=2\cdot2=4$, so $r=0$. Hence $E_1(\mathbb{Q})=E_1(\mathbb{Q})[2]\cong(\mathbb{Z}/2)^2$ and 1 is not congruent. ∎
The statement $x^4+y^4=z^4$ has no nontrivial integer solutions follows from the stronger $x^4+y^4=z^2$, which is exactly the non-existence of nontrivial points on $C_{-1}$ above. Fermat's own descent:
Suppose $x^4+y^4=z^2$ with $x,y,z\gt0$ and $z$ minimal. Then $(x^2,y^2,z)$ is a Pythagorean triple; primitivity gives $$x^2=s^2-t^2,\quad y^2=2st,\quad z=s^2+t^2$$ with $\gcd(s,t)=1$ of opposite parity. From $x^2+t^2=s^2$, another Pythagorean triple: $t=2mn$, $x=m^2-n^2$, $s=m^2+n^2$. Then $y^2=2st=4mn(m^2+n^2)$, and $m,n,m^2+n^2$ pairwise coprime, so each is a square: $m=M^2$, $n=N^2$, $m^2+n^2=Z^2$. Hence $$M^4+N^4=Z^2,\qquad Z\le s\lt z.$$ Contradiction with minimality. ∎
Fermat's argument is the statement $\operatorname{im}\alpha=\{\pm1\}$ for $y^2=x^3-x$. The "descent" in "infinite descent" and the "descent" in "2-descent" are the same idea: reduce a solution to a smaller one, and the mechanism is the height contraction $h(P')\approx\frac14h(P)$ of Lesson 52.
Let $n$ be squarefree and odd. If $n$ is congruent then $$\#\{(x,y,z)\in\mathbb{Z}^3:n=2x^2+y^2+32z^2\}=\tfrac12\#\{(x,y,z):n=2x^2+y^2+8z^2\}.$$ Conversely, if BSD holds for $E_n$, this condition is sufficient.
The criterion is a finite computation. The converse — the only obstacle to a complete solution of a 1000-year-old problem — is conditional on BSD.
tunnell(n) =
{ my(B = sqrtint(n)+1, c1 = 0, c2 = 0);
forvec(v = [[-B,B],[-B,B],[-B,B]],
if(2*v[1]^2 + v[2]^2 + 32*v[3]^2 == n, c1++);
if(2*v[1]^2 + v[2]^2 + 8*v[3]^2 == n, c2++));
[c1, c2, 2*c1 == c2];
}
? for(n=1,30, if(issquarefree(n) && n%2, print(n, " ", tunnell(n)[3], " ",
ellrank(ellinit([0,0,0,-n^2,0]))[1] > 0)))
1 0 0
3 0 0
5 1 1
7 1 1
...
The criterion and the rank agree on every value ✓ — as they must, given BSD holds for these curves (they all have analytic rank $\le1$, so Kolyvagin applies unconditionally!).
5.16 Show that 2 and 3 are not congruent, and 6 is.
? for(n=1,7, print(n, " rank ", ellrank(ellinit([0,0,0,-n^2,0]))[1]))
1 rank 0
2 rank 0
3 rank 0
4 rank 0
5 rank 1
6 rank 1
7 rank 1
2 and 3: rank 0, not congruent. 6: rank 1, congruent — realised by the $(3,4,5)$ triangle of area 6 ✓ (Lesson 9 Ex 1.1).
Note 4 is not congruent, consistent with the fact that congruence depends only on the squarefree part: $4=2^2\cdot1$ and 1 is not congruent.
5.17 Complete Fermat's descent for $x^4-y^4=z^2$.
Suppose $x^4-y^4=z^2$ with $x$ minimal and $\gcd(x,y)=1$. Then $(y^2,z,x^2)$ satisfies $y^4+z^2=x^4$.
Case $z$ even: $(y^2,z,x^2)$ is a primitive Pythagorean triple with $y^2=s^2-t^2$, $z=2st$, $x^2=s^2+t^2$. Multiplying the first and third: $x^2y^2=s^4-t^4$, so $(xy)^2=s^4-t^4$ with $s\lt x$ — contradiction with minimality.
Case $z$ odd: then $y$ is even; write $y^2=2st$, $z=s^2-t^2$, $x^2=s^2+t^2$, and proceed similarly.
Either way we produce a smaller solution. ∎
The two cases are the two "components" of the descent, matching the two coordinates of the descent map $\delta(x,y)=(x-e_1,x-e_2)$ — a nice illustration that the classical case analysis is the cohomological computation in disguise.
5.18 Find the right triangle with rational sides and area 7.
? E = ellinit([0,0,0,-49,0]);
? ellrank(E)
% [1, 1, 0, [[-24, 120]]]
? P = [-24, 120];
? \\ recover the triangle: from x,y on y^2=x^3-n^2x with n=7,
? \\ a = (x^2-n^2)/y, b = 2*n*x/y, c = (x^2+n^2)/y
? n = 7; x = P[1]; y = P[2];
? a = abs((x^2-n^2)/y); b = abs(2*n*x/y); c = abs((x^2+n^2)/y);
? [a, b, c]
% [175/12, 24/5, 337/60]
? a*b/2
% 7
? a^2 + b^2 == c^2
% 1
The triangle $\left(\frac{24}{5},\ \frac{35}{12},\ \frac{337}{60}\right)$ — check: $\frac{24}{5}\cdot\frac{35}{12}/2=\frac{840}{120}=7$ ✓. (The exact form depends on which generator you use; any multiple of $P$ gives another triangle.)
Descent by 2-isogeny needs a rational 2-torsion point. Full 2-descent does not, at the cost of working in a cubic algebra.
Let $E:y^2=f(x)=x^3+Ax+B$ and set $$K=\mathbb{Q}[T]/\bigl(f(T)\bigr).$$ If $f$ is irreducible, $K$ is a cubic field. If $f=(x-e)g(x)$ with $g$ irreducible quadratic, $K\cong\mathbb{Q}\times\mathbb{Q}(\sqrt{\operatorname{disc}g})$. If $f$ splits, $K\cong\mathbb{Q}^3$. In all cases $K$ is an étale $\mathbb{Q}$-algebra of dimension 3 — a product of number fields.
$$\delta:E(\mathbb{Q})/2E(\mathbb{Q})\hookrightarrow K^\times/(K^\times)^2,\qquad \delta(x,y)=x-T\ \bmod\ (K^\times)^2,$$ with the convention that for $y=0$ (so $x=e$ a root of $f$) one replaces the vanishing component by $f'(e)$.
This is exactly the map of Lesson 55 when $f$ splits, now written uniformly: $x-T$ has "components" $x-e_1,x-e_2,x-e_3$ under $K\otimes\overline{\mathbb{Q}}\cong\overline{\mathbb{Q}}^3$.
$K(S,2)$ is finite and computable: it is generated by the $S$-units of $\mathcal{O}_K$ modulo squares, which needs $\mathrm{Cl}(K)$ and $\mathcal{O}_K^\times$.
For $d\in K(S,2)$ with square norm, the condition $x-T=d\,\xi^2$ for some $\xi\in K$ unwinds, by writing $\xi=z_0+z_1T+z_2T^2$ and comparing coefficients, into a system of quadrics. Eliminating gives
$$C_d:\qquad Q_1(z_0,z_1,z_2,z_3)=Q_2(z_0,z_1,z_2,z_3)=0\ \subset\ \mathbb{P}^3,$$ an intersection of two quadrics — a genus-1 curve of degree 4, and a 2-covering of $E$. As before, $$d\in\operatorname{im}\delta\iff C_d(\mathbb{Q})\ne\emptyset,$$ and replacing this by everywhere-local solvability defines $\mathrm{Sel}^{(2)}(E/\mathbb{Q})$.
Computing $\mathrm{Cl}(K)$ and $\mathcal{O}_K^\times$ for $K=\mathbb{Q}[T]/(f)$ dominates everything. Its cost grows with $|\operatorname{disc}(f)|$, which is $\approx|\Delta_E|$. Under GRH class-group computation is subexponential in $\log|\operatorname{disc}|$; unconditionally it is worse.
For a record curve with a 150-digit discriminant this is completely infeasible. That single fact is why rank-30 curves cannot be handled by descent and must resort to the analytic methods of Phase 6.
? E = ellinit([0,0,0,-7,6]);
? ellrank(E)
% [3, 3, 0, [[-3,0],[-2,3],[-1,3]]]
? ellrank(E, 1) \\ effort parameter: search harder for points
? ell2cover(E) \\ the 2-coverings (quartic models)
? \\ the cubic algebra:
? f = x^3 - 7*x + 6;
? factor(f)
% (x-1)(x-2)(x+3) \\ splits: K = Q x Q x Q, easy case
? \\ a harder curve where f is irreducible:
? F = ellinit([0,0,0,-2,1]);
? factor(x^3 - 2*x + 1)
? K = bnfinit(x^3 - 2*x + 1); K.no
5.19 For $E:y^2=x^3-7x+6$, identify $K$ and write $\delta$ explicitly.
$f=(x-1)(x-2)(x+3)$ splits, so $K\cong\mathbb{Q}\times\mathbb{Q}\times\mathbb{Q}$ and $$\delta(x,y)=\bigl(x-1,\ x-2,\ x+3\bigr)\in\bigl(\mathbb{Q}^\times/(\mathbb{Q}^\times)^2\bigr)^3,$$ subject to the product being a square (the norm condition), so really only two coordinates are free — matching $E[2]\cong(\mathbb{Z}/2)^2$.
Check on a point: $P=(-2,3)$ gives $(-3,-4,1)\equiv(-3,-1,1)$ mod squares. $Q=(-1,3)$ gives $(-2,-3,2)\equiv(-2,-3,2)$. Product for $P$: $(-3)(-1)(1)=3$, not a square?? — the norm should be $y^2=9$: $(-3)(-4)(1)=12$, and $12$ is not a square either. Let me recompute: $x=-2$, $y=3$: $x-1=-3$, $x-2=-4$, $x+3=1$; product $=12$. But $y^2=9$. Contradiction — so $f(-2)=(-2)^3-7(-2)+6=-8+14+6=12\ne9$. Indeed $(-2,3)$ is not on this curve.
? E = ellinit([0,0,0,-7,6]); ellisoncurve(E,[-2,3])
% 0
? ellratpoints(E, 20)
Lesson: always verify points lie on the curve before descending. The genuine generators come from ellrank(E)[4], and for those the norm condition holds automatically.
5.20 Compute the class group and units of $K=\mathbb{Q}[T]/(T^3-2T+1)$ and estimate the size of $K(S,2)$ for $S=\{2,3\}$.
? f = x^3 - 2*x + 1;
? factor(f)
% (x-1)(x^2+x-1) \\ reducible!
? \\ take an irreducible one instead:
? g = x^3 - x - 1;
? K = bnfinit(g, 1);
? K.no, K.disc
% 1, -23
? #K.fu \\ number of fundamental units
% 1
$h_K=1$, one fundamental unit (signature $(1,1)$ so rank $=1+1-1=1$). Then $$\#K(S,2)=2^{\#S_K+\operatorname{rk}\mathcal{O}_K^\times+1}$$ roughly, where $S_K$ is the set of primes of $K$ above $S$. With $S=\{2,3\}$ and, say, 4 primes above them, $\#K(S,2)\approx2^{4+1+1}=64$. Descent then tests 64 candidates for local solvability — quite feasible.
For a curve with a 150-digit $\Delta$, $|S|$ could be dozens and $\operatorname{disc}(K)$ is astronomical: bnfinit would not terminate.
5.21 Use ell2cover to obtain the 2-coverings of a rank-2 curve and search them for points.
? E = ellinit([0,0,1,-7,6]);
? ellrank(E)
% [3, 3, 0, [...]]
? C = ell2cover(E);
? #C
? C[1] \\ a quartic model y^2 = quartic(x)
? \\ search a covering for points:
? hyperellratpoints(C[1], 100)
? \\ and map back to E -- PARI returns the maps in ellrank's output
The coverings are quartics $y^2=g(x)$ with $\deg g=4$. A point of naive height $H$ on the covering maps to a point of height roughly $H^4$ on $E$ — which is the whole reason for the exercise: searching the covering reaches points unreachable on $E$ directly. This is the mechanism generalised to 4-descent in Lesson 63.
$$\mathrm{Sel}^{(m)}(E/K)=\ker\left(H^1\bigl(G_K,E[m]\bigr)\longrightarrow\prod_{v}\frac{H^1(G_{K_v},E[m])}{\operatorname{im}\delta_v}\right).$$ Equivalently, in torsor language: the set of $m$-coverings $C\to E$ such that $C(K_v)\ne\emptyset$ for every place $v$.
$\mathrm{Sel}^{(m)}(E/K)$ is finite and effectively computable.
Finiteness. A class in the Selmer group is unramified outside the finite set $S$ of Lesson 51 (good reduction and $v\nmid m$ force the unramified condition), and the group of such classes is finite by Hermite–Minkowski. Effectivity. Local solvability at each $v\in S$ is decidable (Lesson 56), and outside $S$ the condition is automatic.
$$0\longrightarrow\frac{E(K)}{mE(K)}\longrightarrow\mathrm{Sel}^{(m)}(E/K)\longrightarrow\text{Ш}(E/K)[m]\longrightarrow0.$$
Everything in this phase has been building to this line. Taking $m=2$, $K=\mathbb{Q}$, and $\mathbb{F}_2$-dimensions: $$\dim_{\mathbb{F}_2}\mathrm{Sel}^{(2)}=\underbrace{r+\dim_{\mathbb{F}_2}E(\mathbb{Q})[2]}_{\dim E(\mathbb{Q})/2E(\mathbb{Q})}+\dim_{\mathbb{F}_2}\text{Ш}[2],$$ giving the computable upper bound $$\boxed{\ r\ \le\ \dim_{\mathbb{F}_2}\mathrm{Sel}^{(2)}(E/\mathbb{Q})-\dim_{\mathbb{F}_2}E(\mathbb{Q})[2].\ }$$
When mwrank or ellrank reports "rank bounds $[2,4]$":
Under BSD one usually knows which: compute the analytic rank and compare.
Ordering all elliptic curves over $\mathbb{Q}$ by height:
| $m$ | 2 | 3 | 4 | 5 |
|---|---|---|---|---|
| average $\#\mathrm{Sel}^{(m)}$ | 3 | 4 | 7 | 6 |
In general the average size of $\mathrm{Sel}^{(m)}$ is $\sigma(m)$, the sum of divisors. Consequence: the average rank is bounded (at most $7/6$ from $m=5$, improved to $0.885$ by combining), and at least $66\%$ of curves have analytic rank $\le1$ hence satisfy BSD. These are the results that underpin the PPVW boundedness heuristic of Lesson 92.
? E = ellinit([0,0,1,-79,342]);
? ellrank(E)
% [2, 4, 0, [...]] \\ gap of 2
? elltors(E)[2]
? \\ under BSD, the analytic rank tells you the truth:
? ellanalyticrank(E)
% [2, ...]
? \\ so dim Sha[2] = 2, #Sha >= 4
5.22 Derive the boxed rank bound from the exact sequence.
All three groups in $0\to E(\mathbb{Q})/2E(\mathbb{Q})\to\mathrm{Sel}^{(2)}\to\text{Ш}[2]\to0$ are elementary abelian 2-groups, so they are $\mathbb{F}_2$-vector spaces and exactness gives additivity of dimensions: $$\dim\mathrm{Sel}^{(2)}=\dim\frac{E(\mathbb{Q})}{2E(\mathbb{Q})}+\dim\text{Ш}[2].$$ By Lesson 6 Exercise 0.12, $\dim\frac{E(\mathbb{Q})}{2E(\mathbb{Q})}=r+\dim E(\mathbb{Q})[2]$. Since $\dim\text{Ш}[2]\ge0$, $$r=\dim\mathrm{Sel}^{(2)}-\dim E(\mathbb{Q})[2]-\dim\text{Ш}[2]\le\dim\mathrm{Sel}^{(2)}-\dim E(\mathbb{Q})[2].\qquad\blacksquare$$
5.23 Find a curve where the 2-Selmer bound is sharp and one where it is not, and compare.
? sharp = 0; loose = 0;
? for(N=11, 600, my(v=ellsearch(N));
for(i=1,#v, my(E=ellinit(v[i][2]), R=ellrank(E));
if(R[1]==R[2], sharp++, loose++; if(loose<4, print(v[i][1]," ",R[1..2])))));
? [sharp, loose]
The overwhelming majority are sharp; the loose ones (571a1, 681b1, 960d1, …) have $\text{Ш}[2]\ne0$. Empirically Ш is trivial for most small-conductor curves, consistent with Bhargava–Shankar's average Selmer size of 3 (which corresponds to average rank $\le1/2$ plus small Ш).
5.24 Explain why $\dim\mathrm{Sel}^{(4)}\le\dim\mathrm{Sel}^{(2)}$ is not automatic, and what higher descent actually improves.
The groups $\mathrm{Sel}^{(2)}$ and $\mathrm{Sel}^{(4)}$ measure different things: $\mathrm{Sel}^{(4)}$ sits in $0\to E(\mathbb{Q})/4E(\mathbb{Q})\to\mathrm{Sel}^{(4)}\to\text{Ш}[4]\to0$, and $\dim_{\mathbb{F}_2}$ is not the right measure since $\mathrm{Sel}^{(4)}$ is a $\mathbb{Z}/4$-module.
What 4-descent actually gives: the image of $\mathrm{Sel}^{(4)}\to\mathrm{Sel}^{(2)}$ (induced by multiplication by 2) is contained in the subgroup of classes that lift. A class of $\mathrm{Sel}^{(2)}$ that does not lift to $\mathrm{Sel}^{(4)}$ is provably in $\text{Ш}[2]$ and not in the image of $E(\mathbb{Q})$. So the bound $$r\le\dim\bigl(\text{image of }\mathrm{Sel}^{(4)}\text{ in }\mathrm{Sel}^{(2)}\bigr)-\dim E(\mathbb{Q})[2]$$ can be strictly better. That is the mechanism of Lesson 63.
$$\text{Ш}(E/K)=\ker\left(H^1(G_K,E)\longrightarrow\prod_vH^1(G_{K_v},E)\right).$$ Equivalently: the classes of torsors $C$ for $E$ with $C(K_v)\ne\emptyset$ for all $v$ but $C(K)=\emptyset$. Ш measures the failure of the Hasse principle for genus-1 curves.
It is not known whether $\text{Ш}(E/\mathbb{Q})$ is finite for a single elliptic curve of rank $\ge2$. Finiteness is part of the BSD conjecture. Every failure of rank computation traces back to this.
If Ш is finite, there is a nondegenerate alternating pairing $$\text{Ш}(E/K)\times\text{Ш}(E/K)\longrightarrow\mathbb{Q}/\mathbb{Z}.$$ Consequence: $\#\text{Ш}$ is a perfect square, and $\dim_{\mathbb{F}_p}\text{Ш}[p]$ is even for every $p$.
This is why descent bounds typically miss the truth by an even amount, and why "rank bounds $[2,4]$" is common while "$[2,3]$" is not.
shaan(E) =
{ my(r = ellanalyticrank(E), L = r[2], reg, tors, tam, om);
r = r[1];
reg = if(r == 0, 1.0, matdet(ellheightmatrix(E, ellrank(E)[4])));
tors = elltors(E)[1];
tam = ellglobalred(E)[3];
om = E.omega[1] * if(E.disc > 0, 2, 1);
L / (om * reg * tam) * tors^2;
}
? shaan(ellinit([0,0,1,-7,6]))
% 1.0000000...
? shaan(ellinit([0,0,1,-79,342]))
% ~ 1.0 or 4.0
? \\ 571a1, the classic Sha = 4 example:
? E = ellinit(ellsearch(571)[1][2]);
? shaan(E)
% 4.0000000...
The output is always (numerically) a perfect square — a nontrivial confirmation of Cassels' theorem and of BSD.
The Cyrillic letter sha, for Shafarevich; Tate independently developed the theory. In LaTeX it is \Sha (from amssymb with the cyracc or russb fonts). Pronounced "sha".
5.25 Verify numerically that the conjectural $\#\text{Ш}$ is a square for several curves.
? for(N=11, 700, my(v = ellsearch(N));
for(i=1, min(2,#v),
my(E = ellinit(v[i][2]), s = shaan(E));
if(abs(s - round(s)) < 0.01 && round(s) > 1,
print(v[i][1], " Sha ~ ", round(s), " square? ", issquare(round(s))))));
Every value found is 1, 4, 9, 16, … ✓. Finding a non-square would disprove either BSD or Cassels' theorem — and would be a sensational (and almost certainly erroneous) result. In practice such an output means your regulator has an index problem: unsaturated generators inflate $\operatorname{Reg}$ by $k^2$ and deflate the apparent $\#\text{Ш}$ by $k^2$.
5.26 Explain why Cassels' pairing forces the descent gap to be even.
The gap is $\dim_{\mathbb{F}_2}\text{Ш}[2]$. If $\text{Ш}[2^\infty]$ is finite, Cassels gives a nondegenerate alternating form on it, hence on $\text{Ш}[2]$ (which is the $\mathbb{F}_2$-space where the induced form lives). A nondegenerate alternating form on an $\mathbb{F}_2$-vector space exists only in even dimension (it is a symplectic form; symplectic spaces have even dimension). Hence $\dim\text{Ш}[2]$ is even ✓. ∎
Caveat: this argument assumes $\text{Ш}[2^\infty]$ is finite — which is not known in general. So an odd gap is not logically impossible; it would just imply Ш is infinite, which nobody expects.
5.27 Show that a torsor representing a nonzero class of Ш has no rational point but points everywhere locally, and find one.
By definition. The classic explicit example is Lind's / Reichardt's curve $$C:\quad 2v^2=u^4-17w^4.$$ Locally solvable everywhere (checked prime by prime; the only delicate primes are 2 and 17) but with no rational point. Its Jacobian is $y^2=x^3+17x$.
? \\ empirical search finds nothing:
? found = 0;
? for(u=1,300, for(w=1,300, if(gcd(u,w)==1 && issquare((u^4-17*w^4)/2), found++)));
? found
% 0
? E = ellinit([0,0,0,17,0]);
? ellrank(E)
% [1, 1, 0, [...]]
The curve $C$ represents a nonzero element of $\text{Ш}(E/\mathbb{Q})[2]$, so the 2-Selmer bound for $E$ exceeds its rank by at least 1 (in fact by 2, by Cassels).
A practical interlude: how to actually run descents.
ellrank(E, {effort = 0}, {points = []})
\\ returns [r_lower, r_upper, s, gens]
\\ r_lower : rank of the subgroup generated by the points found
\\ r_upper : upper bound from 2-descent
\\ s : 2^s divides #Sha (so Sha is at least 4^s under Cassels)
\\ gens : the independent points found
? \p 60
? E = ellinit([0, 0, 1, -7, 6]);
? E = ellminimalmodel(E);
? ellglobalred(E)[1] \\ conductor
? elltors(E)
? R = ellrank(E)
% [3, 3, 0, [[-3,0],[-2,3],[-1,3]]]
\\ If bounds disagree, increase the effort:
? F = ellinit([0,0,1,-79,342]);
? ellrank(F)
% [2, 4, 0, [...]]
? ellrank(F, 2) \\ effort 2: more searching
? ellrank(F, 3) \\ effort 3: heavier
\\ Feed in points you found elsewhere:
? ellrank(F, 1, [[x1,y1],[x2,y2]])
\\ The 2-coverings themselves:
? C = ell2cover(F);
? #C \\ number of everywhere-locally-solvable classes
? C[1] \\ a quartic model
? hyperellratpoints(C[1], 10^6) \\ search it
ellratpoints(E, h) with increasing $h$.ell2cover then hyperellratpoints. A point of height $H$ on a covering gives a point of height $\approx H^4$ on $E$ — a huge reach extension.ellanalyticrank(E). If it equals the lower bound, you are done under BSD (and unconditionally if it is $\le1$).\\ ranks.gp -- run with: gp -q ranks.gp
{
my(v = readvec("curves.txt"), out = List());
for(i = 1, #v,
my(E = ellinit(v[i]));
if(type(E) == "t_VEC",
my(E0 = ellminimalmodel(E), R = ellrank(E0));
listput(out, [i, R[1], R[2]]);
if(R[1] >= 8, print("HIT ", i, " ", v[i], " ", R[1..2]))));
write("ranks.txt", Vec(out));
}
This is the shape of the confirmation stage in a rank search: the sieve (Phase 7) produces candidates; this script verifies them.
bnfinit is used without certification. Use bnfcertify where feasible.For serious descent work, Magma's TwoDescent, FourDescent, EightDescent, ThreeDescent remain the reference implementations.
5.28 Write a GP script that finds all curves $y^2=x^3+ax+b$ with $|a|,|b|\le20$ and rank $\ge3$.
{
for(a = -20, 20,
for(b = -20, 20,
if(4*a^3 + 27*b^2 != 0,
my(E = ellinit([0,0,0,a,b]), R);
if(type(E) == "t_VEC",
R = ellrank(E);
if(R[1] >= 3, print([a,b], " rank ", R[1..2]))))));
}
You will find several, including $[-7,6]$ (rank 3). Rank 4 in this small box is rare; rank 5 essentially absent. That scarcity is the empirical version of "high rank requires structure, not brute force" — which is why Phase 7 builds families rather than enumerating.
5.29 Take a curve where ellrank gives $[2,4]$ and try to close the gap using coverings.
? F = ellinit([0,0,1,-79,342]);
? R = ellrank(F)
% [2, 4, 0, [...]]
? C = ell2cover(F);
? for(i=1,#C, my(P = hyperellratpoints(C[i], 10^5));
if(#P, print(i, " points found: ", P[1])));
? ellanalyticrank(F)
% [2, ...]
The analytic rank is 2, matching the lower bound. Under BSD the rank is 2 and $\dim\text{Ш}[2]=2$, i.e. $\#\text{Ш}\ge4$. Searching the coverings finds no new points, consistent with the extra Selmer classes being genuine Ш elements rather than undiscovered points.
Unconditional resolution would need 4-descent to show those two classes do not lift.
5.30 Time ellrank as the coefficient size grows and find the practical ceiling.
? for(k = 2, 14,
my(a = -(10^k+3), b = 10^k+7, E, t);
if(4*a^3+27*b^2,
E = ellinit([0,0,0,a,b]);
t = getabstime();
ellrank(E);
print(k, " ", (getabstime()-t)/1000.0, " s")));
Times grow rapidly once $\Delta$ has more than ~25–30 digits, because bnfinit on the cubic field dominates and its cost is subexponential in $\log|\operatorname{disc}|$. Somewhere around $10^{15}$–$10^{20}$ coefficients it becomes impractical on a laptop.
Compare: the rank-30 record curve has ~150-digit coefficients. Descent is off the table by roughly a hundred orders of magnitude — the reason Phase 6's analytic route is not a stylistic choice but a necessity.
??ellrank, ??ell2cover. Cremona, Algorithms, Ch. 3 for the underlying algorithm.If the 2-Selmer bound exceeds the number of points you found, the gap is $\text{Ш}[2]$. Higher descent shrinks it — and, just as importantly, finds enormous points.
A class in $\text{Ш}[2]$ is a 2-covering $C\to E$ with points everywhere locally but no rational point. To test whether it truly has none, descend again: consider the 2-coverings of $C$, i.e. the 4-coverings of $E$. Then:
An $n$-covering $\pi:C\to E$ satisfies $$\hat h_E\bigl(\pi(p)\bigr)=n\cdot\hat h_C(p)+O(1).$$ So a point of height $H$ on a 4-covering maps to a point of height $\approx4H$ on $E$; a point of naive height $B$ on the covering corresponds to naive height $\approx B^4$ on $E$. Since search cost is exponential in the height, dividing the height by 4 or 8 divides the exponent.
This is how the largest generators of record curves are found. It is not an optimisation; it is the difference between possible and impossible.
Raw coverings from descent have enormous coefficients. Two post-processing steps make them searchable:
Cremona–Fisher–Stoll developed the general theory for 2-, 3- and 4-coverings. Without these steps 4-descent is useless — the covering's coefficients are worse than the original curve's.
| Descent | Model of the covering | Main cost | Software |
|---|---|---|---|
| 2-descent | quartic $y^2=g_4(x)$ / quadric intersection in $\mathbb{P}^3$ | class group of a cubic algebra | PARI, mwrank, Magma |
| 4-descent | intersection of 2 quadrics in $\mathbb{P}^3$ | class groups of quartic fields | Magma |
| 8-descent | via 4-coverings | substantially harder | Magma (Stoll) |
| 3-descent | plane cubic in $\mathbb{P}^2$ | class group of a degree-8 field | Magma (Schaefer–Stoll) |
| $p$-descent, $p\ge5$ | genus-1 normal curve of degree $p$ | rarely feasible | — |
? E = ellinit([0,0,1,-79,342]);
? C = ell2cover(E); \\ 2-coverings as quartics
? for(i=1,#C, print(hyperellratpoints(C[i], 10^6)))
? \\ 4-descent: not in PARI. In Magma:
? \\ E := EllipticCurve([0,0,1,-79,342]);
? \\ T2 := TwoDescent(E);
? \\ T4 := &cat[FourDescent(c) : c in T2];
? \\ T4 := [Reduce(Minimise(c)) : c in T4];
? \\ pts := &cat[PointsQI(c, 10^6) : c in T4];
Each level of descent costs roughly an exponential in the previous level's field degrees. 4-descent is routine; 8-descent is heroic; 16-descent does not exist. And no finite depth suffices in general, since Ш$[2^\infty]$ can be large. Higher descent is a powerful practical tool, not a solution to the algorithmic problem.
5.31 Verify the height-compression claim numerically on a 2-covering.
? E = ellinit([0,0,0,-7,6]);
? C = ell2cover(E);
? P = hyperellratpoints(C[1], 1000);
? \\ the map back to E is part of ellrank's data; compare heights:
? \\ heuristically:
? G = ellrank(E)[4];
? apply(Q -> ellheight(E,Q), G)
The general principle: a covering point with $x$-coordinate of $k$ digits corresponds to an $E$-point with roughly $4k$ digits (for a 2-covering, which is a degree-4 model). So to reach an $E$-point with 200 digits you search a covering for 50-digit points — still hard, but $10^{150}$ times easier. That factor is exactly why record curves are findable.
5.32 Explain why minimisation matters, with an estimate.
A raw quadric-intersection model from 4-descent typically has coefficients of size comparable to $\Delta_E$ — say $10^{50}$ for a moderate curve. Searching such a model for points of height $B$ costs $\sim B^2$ operations but requires arithmetic on $10^{50}$-sized integers, and worse, the point of smallest height on the badly-scaled model may itself be huge.
After minimisation and LLL reduction the coefficients drop to $O(\Delta^{1/12})$ or better — for our example, to $10^4$ — and the smallest point comes down correspondingly. Cremona–Fisher–Stoll report reductions of many orders of magnitude. Without it, "search the 4-covering" is a search over a space you cannot enumerate.
5.33 Show that the 3-descent field has degree 8 over $\mathbb{Q}$ generically.
3-descent works with $E[3]$, which has $\#(E[3]\setminus0)=8$ points. The descent map lands in $H^1(G_\mathbb{Q},E[3])$, and making it explicit requires the algebra $$K=\mathbb{Q}[E[3]\setminus0]/\pm = \text{the étale algebra of the 4 cyclic subgroups of order 3},$$ of dimension 4, or in the Schaefer–Stoll formulation the algebra of dimension 8 corresponding to the 8 nonzero 3-torsion points.
Either way, computing class groups and units of a degree-4 or degree-8 field is far more expensive than the degree-3 case of 2-descent. That is why 3-descent, though it can be more effective for certain curves (particularly those with 3-isogenies), is used much less than 2- and 4-descent.
Let us be exact about what is and is not known, because the situation is often misstated.
There is no known algorithm that, given an arbitrary $E/\mathbb{Q}$, is guaranteed to terminate and output $\operatorname{rank}E(\mathbb{Q})$.
If $\text{Ш}(E/\mathbb{Q})$ is finite for all $E$, then running the two searches in parallel is an algorithm for the rank. Conversely, if the parallel search always terminates then Ш$[p^\infty]$ is finite for each $p$. So finiteness of Ш is equivalent to the effectivity of this method.
By Gross–Zagier, Kolyvagin and modularity: if $r_{\text{an}}(E)\le1$ then $r=r_{\text{an}}$ and Ш is finite. Since $r_{\text{an}}$ is an integer computable to any precision (Lesson 73), the rank is then determined unconditionally.
By Bhargava–Skinner–Zhang, at least $66\%$ of curves (ordered by height) have $r_{\text{an}}\le1$. So most curves have unconditionally computable rank — just never the interesting ones.
If $\dim\mathrm{Sel}^{(2)}-\dim E(\mathbb{Q})[2]$ equals the number of independent points found, the rank is determined unconditionally, at whatever value. This is how the largest exactly known rank stands at 20 (Elkies–Klagsbrun, 2020).
| Claim | Status | Method |
|---|---|---|
| $\operatorname{rank}\ge30$ | unconditional | 30 points, nonzero height regulator |
| $\operatorname{rank}=30$ | conditional on GRH + BSD | Bober's bound (31) + root number $+1$ (parity) |
| $\operatorname{rank}=20$ (Elkies–Klagsbrun) | unconditional | descent closed the gap |
Under BSD alone: compute $r_{\text{an}}$ numerically to enough precision to determine the order of vanishing, and output it. This is an algorithm assuming BSD — but it needs $O(\sqrt N)$ coefficients, so it is only practical for $N$ up to roughly $10^{20}$. Under GRH+BSD one can instead use Bober's inequality, whose cost is independent of $N$ — that is the route for record curves.
5.34 Explain why "search for points forever" is not an algorithm even though it is guaranteed to succeed.
An algorithm must terminate with the correct answer. The search will eventually find a full set of generators (since $E(\mathbb{Q})$ is finitely generated and Northcott guarantees a search of any height bound terminates), but at no finite moment do you know you have finished: there is no computable function $B(E)$ known to bound the height of a generating set.
An effective height bound for generators would immediately give a rank algorithm. Such bounds exist conditionally (on BSD, via the regulator, or on ABC-type conjectures) but not unconditionally. ∎
5.35 Show that finiteness of Ш implies the parallel search terminates.
Suppose $\#\text{Ш}(E/\mathbb{Q})=M\lt\infty$. Pick a prime $p$ and $n$ with $p^n\gt M$. Then $\text{Ш}[p^n]=\text{Ш}[p^\infty]$ is all of the $p$-part, and moreover the image of $\text{Ш}$ under multiplication by $p^n$ is trivial, so the natural map $$\mathrm{Sel}^{(p^n)}\longrightarrow\text{Ш}[p^n]$$ has an image whose contribution to the dimension count is exactly $\dim\text{Ш}[p^n]$, a known finite quantity once you have descended far enough to see it. More usefully: the descent bounds $$r\le\frac{\log\#\mathrm{Sel}^{(p^n)}}{n\log p}-(\text{torsion term})$$ converge to $r$ as $n\to\infty$, because the Ш contribution is bounded by $\log M$ and is divided by $n\log p$. Meanwhile the point search reaches $r$ from below. So the two meet in finite time. ∎
5.36 For the curve 571a1, determine the rank unconditionally if you can, and say what is missing if you cannot.
? E = ellinit(ellsearch(571)[1][2]);
? ellrank(E)
% [0, 2, 1, []]
? ellanalyticrank(E)
% [0, ...]
? ellrootno(E)
% 1
The analytic rank is 0. By Kolyvagin (with $r_{\text{an}}=0\le1$), the rank is 0 unconditionally and Ш is finite. Combined with the 2-Selmer bound of 2, we get $\dim\text{Ш}[2]=2$, so $4\mid\#\text{Ш}$ — and the analytic order computation gives exactly 4.
So for this curve everything is unconditional, courtesy of $r_{\text{an}}\le1$. Had the analytic rank been 2, nothing would be known unconditionally: we would have a point-free lower bound of 0 and a Selmer bound of 2, with no way to decide.
Before building $L(E,s)$ we fix the analytic vocabulary. Everything here is standard analytic number theory, stated once so nothing later is unexplained.
A formal series $\displaystyle F(s)=\sum_{n\ge1}\frac{a_n}{n^s}$ with $a_n\in\mathbb{C}$ and $s\in\mathbb{C}$. If $|a_n|=O(n^\sigma)$ then the series converges absolutely for $\operatorname{Re}(s)\gt\sigma+1$ and defines a holomorphic function there.
$(a_n)$ is multiplicative if $a_1=1$ and $a_{mn}=a_ma_n$ whenever $\gcd(m,n)=1$; completely multiplicative if $a_{mn}=a_ma_n$ always. For multiplicative $(a_n)$, $$\sum_{n\ge1}\frac{a_n}{n^s}=\prod_p\left(1+\frac{a_p}{p^s}+\frac{a_{p^2}}{p^{2s}}+\cdots\right),$$ valid wherever the series converges absolutely.
$\zeta(s)=\sum n^{-s}=\prod_p(1-p^{-s})^{-1}$ for $\operatorname{Re}(s)\gt1$. It continues meromorphically to $\mathbb{C}$ with a single simple pole at $s=1$, and satisfies $$\Lambda(s)=\pi^{-s/2}\Gamma(s/2)\zeta(s)=\Lambda(1-s).$$ Every feature we will meet for $L(E,s)$ — Euler product, completion by gamma factors, functional equation reflecting about a centre — is present here.
$F$ continues to a domain $U$ if there is a holomorphic (or meromorphic) $\tilde F$ on $U$ agreeing with $F$ where both are defined; it is unique. The order of vanishing of $F$ at $s_0$ is the least $k$ with $F^{(k)}(s_0)\ne0$, written $\operatorname{ord}_{s=s_0}F$.
For $f$ decaying rapidly at $0$ and $\infty$, $$\mathcal{M}f(s)=\int_0^\infty f(y)\,y^{s}\,\frac{dy}{y}.$$ If $f(y)=\sum_{n\ge1}a_ne^{-2\pi ny}$ then $$\mathcal{M}f(s)=(2\pi)^{-s}\Gamma(s)\sum_{n\ge1}\frac{a_n}{n^s}.$$
The integral converges for all $s$ when $f$ decays rapidly at both ends. So writing a Dirichlet series as a Mellin transform gives analytic continuation for free. And if $f$ has a symmetry $f(1/(Ny))=\pm N y^2f(y)$ — which is exactly what modularity provides — splitting the integral at $y=1/\sqrt N$ and applying the symmetry to one half yields the functional equation. Both continuation and functional equation fall out of one integral.
? \\ zeta and its continuation
? zeta(2) - Pi^2/6
% 0.E-38
? zeta(-1) \\ continued value
% -0.083333333... \\ = -1/12
? \\ generic L-function machinery:
? L = lfuninit(1, [0, 30]); \\ Riemann zeta
? lfun(1, 2)
% 1.6449340668...
? lfunzeros(1, 30) \\ zeros on the critical line
% [14.134725..., 21.022039..., 25.010857...]
6.1 Derive the Euler product for $\zeta$ from unique factorisation.
For $\operatorname{Re}(s)\gt1$, expand each factor as a geometric series: $$\prod_p\bigl(1-p^{-s}\bigr)^{-1}=\prod_p\Bigl(1+p^{-s}+p^{-2s}+\cdots\Bigr).$$ Multiplying out, a term is $\prod_ip_i^{-e_is}=n^{-s}$ where $n=\prod p_i^{e_i}$. By unique factorisation each $n\ge1$ arises exactly once. Absolute convergence justifies the rearrangement. ∎
6.2 Show that if $|a_p|\le2\sqrt p$ and $(a_n)$ satisfies the Hecke recursion, then $|a_n|\le d(n)\sqrt n$.
Write $1-a_pX+pX^2=(1-\alpha X)(1-\beta X)$ with $|\alpha|=|\beta|=\sqrt p$. Then $a_{p^k}=\frac{\alpha^{k+1}-\beta^{k+1}}{\alpha-\beta}=\sum_{j=0}^k\alpha^j\beta^{k-j}$, so $$|a_{p^k}|\le(k+1)p^{k/2}=d(p^k)\sqrt{p^k}.$$ By multiplicativity of both $a$ and $d$, $|a_n|\le d(n)\sqrt n$ ✓. ∎
Since $d(n)=O(n^\epsilon)$, this gives $|a_n|=O(n^{1/2+\epsilon})$ and absolute convergence of $L(E,s)$ for $\operatorname{Re}(s)\gt3/2$.
6.3 Verify the Mellin identity $\mathcal{M}f(s)=(2\pi)^{-s}\Gamma(s)\sum a_nn^{-s}$.
$$\int_0^\infty\Bigl(\sum_n a_ne^{-2\pi ny}\Bigr)y^{s-1}dy=\sum_na_n\int_0^\infty e^{-2\pi ny}y^{s-1}dy.$$ Substitute $u=2\pi ny$, $dy=du/(2\pi n)$: $$\int_0^\infty e^{-u}\left(\frac{u}{2\pi n}\right)^{s-1}\frac{du}{2\pi n}=(2\pi n)^{-s}\Gamma(s).$$ Summing gives $(2\pi)^{-s}\Gamma(s)\sum a_nn^{-s}$ ✓. Interchange is justified by absolute convergence. ∎
For $E/\mathbb{F}_p$ with good reduction, $$Z(E/\mathbb{F}_p;T)=\exp\left(\sum_{n\ge1}\#E(\mathbb{F}_{p^n})\frac{T^n}{n}\right)=\frac{1-a_pT+pT^2}{(1-T)(1-pT)}.$$ The numerator is the reversed characteristic polynomial of Frobenius (Lesson 27).
Substituting $T=p^{-s}$ and keeping only the numerator, $$L_p(E,s)=\bigl(1-a_pp^{-s}+p^{1-2s}\bigr)^{-1}\qquad(p\nmid N).$$ For bad $p$ the factor degenerates:
| Reduction at $p$ | $a_p$ | $L_p(E,s)^{-1}$ | $\#\tilde E^{\text{ns}}(\mathbb{F}_p)$ |
|---|---|---|---|
| good | $p+1-\#\tilde E(\mathbb{F}_p)$ | $1-a_pp^{-s}+p^{1-2s}$ | — |
| split multiplicative | $+1$ | $1-p^{-s}$ | $p-1$ |
| non-split multiplicative | $-1$ | $1+p^{-s}$ | $p+1$ |
| additive | $0$ | $1$ | $p$ |
In every case $a_p=p+1-\#\tilde E^{\text{ns}}(\mathbb{F}_p)$, using the group of smooth points from Lesson 12:
The Galois-theoretic definition is the right one: $L_p(E,s)^{-1}=\det\bigl(1-p^{-s}\operatorname{Frob}_p\mid V_\ell E^{I_p}\bigr)$, where $I_p$ is inertia. Good reduction: $I_p$ acts trivially, the space is 2-dimensional, giving the quadratic. Multiplicative: 1-dimensional. Additive: 0-dimensional.
? E = ellinit([0,-1,1,-10,-20]); \\ conductor 11
? ellap(E, 11)
% 1 \\ split multiplicative
? ellrootno(E, 11)
% -1
? \\ the a_p for good primes:
? [ellap(E,p) | p <- primes(10), p != 11]
% [-2, -1, 1, -2, 4, -2, 0, ...]
? \\ verify Hasse:
? for(i=1,20, my(p=prime(i)); if(p != 11,
if(abs(ellap(E,p)) > 2*sqrt(p), print("VIOLATION at ", p))))
6.4 Compute $L_p(E,s)$ at every bad prime of $y^2=x^3+1$.
? E = ellminimalmodel(ellinit([0,0,0,0,1]));
? ellglobalred(E)[1]
% 36 = 2^2 * 3^2
? [ellap(E,2), ellap(E,3)]
% [0, 0]
Both 2 and 3 have additive reduction (conductor exponent 2 each), so $a_2=a_3=0$ and $L_2=L_3=1$. The Euler product for this curve therefore omits 2 and 3 entirely.
This matters for the Mestre–Nagao sum too: additive primes contribute nothing, so a curve with many additive primes has fewer usable terms.
6.5 Show that the local factor at a split multiplicative prime has a "pole" pattern making $L_p(E,1)=(1-p^{-1})^{-1}$.
$L_p(E,s)=(1-p^{-s})^{-1}$, so at $s=1$: $L_p(E,1)=(1-1/p)^{-1}=\frac{p}{p-1}$.
Compare a good prime: $L_p(E,1)=(1-a_p/p+1/p)^{-1}=\frac{p}{p+1-a_p}=\frac{p}{\#\tilde E(\mathbb{F}_p)}$.
So uniformly $L_p(E,1)=p/\#\tilde E^{\text{ns}}(\mathbb{F}_p)$, and the BSD heuristic $\text{“}L(E,1)\text{”}=\prod_p p/\#\tilde E(\mathbb{F}_p)$ of Lesson 67 holds with the bad primes included in the natural way ✓.
6.6 Verify $Z(E/\mathbb{F}_p;T)$ for $y^2=x^3+1$ over $\mathbb{F}_5$ by computing $\#E(\mathbb{F}_{5^n})$ for $n=1,2,3$.
$a_5=0$ (Lesson 26 Ex 2.15). So $Z=\frac{1+5T^2}{(1-T)(1-5T)}$ and $\alpha,\beta=\pm i\sqrt5$.
$s_n=\alpha^n+\beta^n$: $s_1=0$, $s_2=-10$, $s_3=0$. So $\#E(\mathbb{F}_5)=6$, $\#E(\mathbb{F}_{25})=25+1+10=36$, $\#E(\mathbb{F}_{125})=126$.
? ellcard(ellinit([0,0,0,0,1], 5))
% 6
? ellcard(ellinit([0,0,0,0,1], ffgen(5^2)))
% 36
? ellcard(ellinit([0,0,0,0,1], ffgen(5^3)))
% 126
✓ Matches. Note $36=6^2$, the supersingular pattern.
$$L(E,s)=\prod_{p\nmid N}\bigl(1-a_pp^{-s}+p^{1-2s}\bigr)^{-1}\prod_{p\mid N}\bigl(1-a_pp^{-s}\bigr)^{-1}=\sum_{n\ge1}\frac{a_n}{n^s},$$ where the coefficients are determined by:
By Exercise 6.2, $|a_n|\le d(n)\sqrt n$, so the series converges absolutely for $\operatorname{Re}(s)\gt3/2$. The point $s=1$ lies outside that region. Continuation is essential and comes from modularity (Lesson 70).
Formally substituting $s=1$ into the Euler product: $$\text{“}L(E,1)\text{”}=\prod_p\frac{p}{\#\tilde E(\mathbb{F}_p)}.$$ If $E$ has many rational points, they reduce to many points mod $p$, so $\#\tilde E(\mathbb{F}_p)$ tends to be large, so each factor is small, so the product tends to 0. High rank should force high-order vanishing.
Birch and Swinnerton-Dyer's original 1960s computation on the EDSAC was exactly this: plot $$\log\prod_{p\le X}\frac{\#\tilde E(\mathbb{F}_p)}{p}\quad\text{against}\quad \log\log X$$ and observe a slope equal to the rank.
The product diverges at $s=1$ and the rearrangement is invalid. But it is the correct heuristic, and its truncated form $$S(X)=\sum_{p\le X}\frac{a_p\log p}{p}$$ is the Mestre–Nagao sum that drives every high-rank search (Lesson 87).
? E = ellinit([0,-1,1,-10,-20]);
? ellan(E, 20) \\ the first 20 coefficients a_n
% [1, -2, -1, 2, 1, 2, -2, 0, -2, -2, 1, -2, 4, 4, -1, -4, -2, 4, 0, 2]
? \\ check multiplicativity: a_6 = a_2*a_3
? ellan(E,6)[6] == ellan(E,6)[2]*ellan(E,6)[3]
% 1
? \\ check Hecke: a_4 = a_2^2 - 2
? ellan(E,4)[4] == ellan(E,4)[2]^2 - 2
% 1
? elllseries(E, 1)
% 0.2538418608559106843261498...
? elllseries(E, 2)
bsdplot(E, X) = my(prod = 1.0);
forprime(p = 2, X, if(E.disc % p, prod *= (p + 1 - ellap(E,p))/p));
log(prod);
? E0 = ellinit([0,-1,1,0,0]); \\ 11a3, rank 0
? E1 = ellinit([0,0,1,-1,0]); \\ 37a1, rank 1
? E3 = ellinit([0,0,1,-7,6]); \\ 5077a1, rank 3
? for(k=2,5, my(X=10^k);
print(X, " r0:", bsdplot(E0,X), " r1:", bsdplot(E1,X), " r3:", bsdplot(E3,X)))
Plotted against $\log\log X$, the three lines have slopes near 0, 1 and 3 ✓. This is BSD, visible on a laptop in seconds — and it is precisely the signal a rank sieve exploits.
6.7 Derive the Hecke recursion from the Euler factor.
$\sum_{k\ge0}a_{p^k}X^k=(1-a_pX+pX^2)^{-1}$. Multiplying both sides by $1-a_pX+pX^2$ and comparing the coefficient of $X^{k+1}$ for $k\ge1$: $$a_{p^{k+1}}-a_pa_{p^k}+p\,a_{p^{k-1}}=0\ \Longrightarrow\ a_{p^{k+1}}=a_pa_{p^k}-p\,a_{p^{k-1}}\ ✓.$$ The coefficient of $X^1$ gives $a_p-a_p=0$ ✓ and of $X^0$ gives $a_1=1$ ✓. ∎
6.8 Compute $a_8$ and $a_{12}$ for the conductor-11 curve by hand from $a_2=-2$, $a_3=-1$.
$a_4=a_2^2-2\cdot1=4-2=2$. $a_8=a_2a_4-2a_2=(-2)(2)-2(-2)=-4+4=0$.
$a_{12}=a_4a_3=2\cdot(-1)=-2$ (coprime, so multiplicative).
? v = ellan(ellinit([0,-1,1,-10,-20]), 12);
? [v[8], v[12]]
% [0, -2]
✓ Both match.
6.9 Run the BSD experiment for a rank-2 curve and estimate the slope.
? E = ellinit([0,1,1,-2,0]); \\ 389a1, the smallest rank-2 curve
? ellrank(E)[1..2]
% [2, 2]
? for(k=2,6, my(X=10^k); print([log(log(X)), bsdplot(E,X)]))
Fitting a line to $\bigl(\log\log X,\ \log\prod_{p\le X}\#\tilde E(\mathbb{F}_p)/p\bigr)$ gives a slope near 2. The convergence is slow (the error term is $O(1/\log X)$-ish), so you need $X\sim10^6$ for a convincing fit — which is exactly why practical Mestre–Nagao sieving uses relative comparison across many curves at fixed small $X$ rather than absolute slope estimation.
$$\Gamma_0(N)=\left\{\begin{pmatrix}a&b\\c&d\end{pmatrix}\in\mathrm{SL}_2(\mathbb{Z}):c\equiv0\ (\mathrm{mod}\ N)\right\},$$ $$\Gamma_1(N)=\left\{\gamma\in\Gamma_0(N):a\equiv d\equiv1\ (\mathrm{mod}\ N)\right\}.$$ Both have finite index in $\mathrm{SL}_2(\mathbb{Z})$; the index of $\Gamma_0(N)$ is $N\prod_{p\mid N}(1+1/p)$.
A holomorphic $f:\mathbb{H}\to\mathbb{C}$ with $$f\!\left(\frac{a\tau+b}{c\tau+d}\right)=(c\tau+d)^kf(\tau)\qquad\forall\begin{pmatrix}a&b\\c&d\end{pmatrix}\in\Gamma_0(N),$$ and holomorphic at every cusp. It is a cusp form if it vanishes at every cusp. Write $M_k(\Gamma_0(N))$ and $S_k(\Gamma_0(N))$.
Since $\begin{pmatrix}1&1\\0&1\end{pmatrix}\in\Gamma_0(N)$, every such $f$ satisfies $f(\tau+1)=f(\tau)$ and hence has a Fourier ($q$-) expansion $$f(\tau)=\sum_{n\ge0}c_nq^n,\qquad q=e^{2\pi i\tau};$$ cusp form at $\infty$ means $c_0=0$.
For $k=2$ the transformation law says exactly that $f(\tau)\,d\tau$ is a $\Gamma_0(N)$-invariant differential: $$d(\gamma\tau)=\frac{d\tau}{(c\tau+d)^2}\ \Longrightarrow\ f(\gamma\tau)\,d(\gamma\tau)=f(\tau)\,d\tau.$$ So $S_2(\Gamma_0(N))$ is the space of holomorphic differentials on the modular curve $X_0(N)$, and $$\dim S_2(\Gamma_0(N))=g\bigl(X_0(N)\bigr).$$ That identification is what connects modular forms to curves rather than merely to $q$-series.
$g(X_0(11))=1$, so $\dim S_2(\Gamma_0(11))=1$, spanned by
$$f=q\prod_{n\ge1}(1-q^n)^2(1-q^{11n})^2=q-2q^2-q^3+2q^4+q^5+2q^6-2q^7+\cdots$$
Compare with ellan for the conductor-11 curve: $1,-2,-1,2,1,2,-2,\ldots$ — identical. That is modularity, in the smallest case.
? mf = mfinit([11, 2], 1); \\ cusp forms of weight 2, level 11
? mfdim(mf)
% 1
? F = mfbasis(mf)[1];
? mfcoefs(F, 10)
% [0, 1, -2, -1, 2, 1, 2, -2, 0, -2, -2]
? ellan(ellinit([0,-1,1,-10,-20]), 10)
% [1, -2, -1, 2, 1, 2, -2, 0, -2, -2]
? \\ genus of X_0(N):
? for(N=1,40, print(N, " ", mfdim(mfinit([N,2],1))))
6.10 Verify $\dim S_2(\Gamma_0(N))=0$ for $N\lt11$ and interpret.
? for(N=1,12, print(N, " ", mfdim(mfinit([N,2],1))))
1 0
2 0
...
10 0
11 1
12 0
Zero for all $N\le10$. By modularity, an elliptic curve of conductor $N$ gives a nonzero cusp form of weight 2 and level $N$. Hence there is no elliptic curve over $\mathbb{Q}$ of conductor $\lt11$ — a theorem of Tate and Ogg, here recovered as a dimension count. ✓
6.11 Show that the weight-2 transformation law makes $f(\tau)d\tau$ invariant.
For $\gamma\tau=\frac{a\tau+b}{c\tau+d}$ with $ad-bc=1$, $$\frac{d(\gamma\tau)}{d\tau}=\frac{a(c\tau+d)-c(a\tau+b)}{(c\tau+d)^2}=\frac{ad-bc}{(c\tau+d)^2}=\frac{1}{(c\tau+d)^2}.$$ So $$f(\gamma\tau)\,d(\gamma\tau)=(c\tau+d)^2f(\tau)\cdot\frac{d\tau}{(c\tau+d)^2}=f(\tau)\,d\tau\ ✓.\qquad\blacksquare$$
Weight $k$ would give $(c\tau+d)^{k-2}f(\tau)d\tau$, invariant only for $k=2$. That is why weight 2 is singled out for elliptic curves: it is the weight at which modular forms are differentials.
6.12 Find all $N\le50$ with $\dim S_2(\Gamma_0(N))\ge2$, and relate to the number of isogeny classes.
? for(N=11,50, my(d = mfdim(mfinit([N,2],1))); if(d >= 2, print(N, " ", d)))
? \\ compare with the number of isogeny classes of conductor N:
? for(N=11,50, my(v = ellsearch(N), classes = Set(apply(c -> c[1][1..#c[1]-1], v)));
print(N, " ", #classes))
$\dim S_2(\Gamma_0(N))$ counts all newforms of level $N$ plus oldforms from lower levels. The number of $\mathbb{Q}$-isogeny classes of conductor exactly $N$ equals the number of rational newforms of level $N$ — those with all $a_n\in\mathbb{Z}$. Newforms with irrational coefficients correspond to higher-dimensional abelian varieties, not elliptic curves. That is the precise content of modularity.
Why should the Fourier coefficients of a modular form be multiplicative? Because of an algebra of operators acting on $S_2$.
On $S_k(\Gamma_0(N))$, for $\gcd(n,N)=1$, $T_n$ acts on $q$-expansions by $$T_p\left(\sum_mc_mq^m\right)=\sum_m\Bigl(c_{pm}+p^{k-1}c_{m/p}\Bigr)q^m$$ (with $c_{m/p}=0$ if $p\nmid m$), extended multiplicatively and by $T_{p^{k+1}}=T_pT_{p^k}-p^{k-1}T_{p^{k-1}}$.
A cusp form is old at level $N$ if it comes from a lower level $M\mid N$, $M\ne N$ (via $f(\tau)\mapsto f(d\tau)$ for $d\mid N/M$). The new subspace $S_k^{\text{new}}$ is the orthogonal complement of the old subspace. A newform is a normalised ($c_1=1$) simultaneous eigenvector for all $T_n$ lying in $S_k^{\text{new}}$.
If $f=\sum c_nq^n$ is a normalised eigenform with $T_nf=\lambda_nf$, then comparing the coefficient of $q^1$: $$\lambda_n=c_n.$$ So the Hecke eigenvalues are the Fourier coefficients, and multiplicativity of the $c_n$ follows from the multiplicative structure of the Hecke algebra. That is why $a_{mn}=a_ma_n$ holds for elliptic curves — it is a shadow of Hecke theory.
A newform is determined by its eigenvalues $\{c_p:p\nmid N\}$. Two newforms of the same level with the same $c_p$ for almost all $p$ are equal.
Consequence for us: an elliptic curve is determined (up to isogeny) by its $a_p$. That is why isogenous curves share an $L$-function and why "isogeny class" and "newform" are interchangeable.
? mf = mfinit([37, 2], 0); \\ 0 = new subspace
? mfdim(mf)
% 2
? B = mfeigenbasis(mf);
? #B
% 2
? mfcoefs(B[1], 8)
% [0, 1, -2, -3, 2, -2, 6, -1, 0]
? mfcoefs(B[2], 8)
% [0, 1, 0, 1, -2, 0, 0, -1, 0]
? \\ compare with the two isogeny classes of conductor 37:
? ellan(ellinit([0,0,1,-1,0]), 8) \\ 37a1, rank 1
% [1, -2, -3, 2, -2, 6, -1, 0]
? ellan(ellinit([0,1,1,-23,-50]), 8) \\ 37b1, rank 0
% [1, 0, 1, -2, 0, 0, -1, 0]
Two newforms, two isogeny classes, exact match ✓.
6.13 Verify the Hecke eigenvalue relation $c_p\cdot c_1=c_p$ from the $T_p$ action.
$T_pf=\sum_m(c_{pm}+p^{k-1}c_{m/p})q^m$. The coefficient of $q^1$ is $c_p+p^{k-1}c_{1/p}=c_p$ (since $p\nmid1$). If $T_pf=\lambda_pf$ then the coefficient of $q^1$ on the right is $\lambda_pc_1=\lambda_p$ (normalised). Hence $\lambda_p=c_p$ ✓. ∎
6.14 Find a level where an irrational newform occurs and interpret.
? for(N=11, 60,
my(mf = mfinit([N,2],0), B = mfeigenbasis(mf));
for(i=1,#B, my(c = mfcoefs(B[i], 5));
if(type(c[3]) != "t_INT", print(N, " ", c))));
23 [0, 1, Mod(x, x^2-x-1), ...]
At $N=23$ there is a newform with coefficients in $\mathbb{Q}(\sqrt5)$. It corresponds not to an elliptic curve but to a 2-dimensional abelian variety (the Jacobian $J_0(23)$, which is simple of dimension 2 with real multiplication by $\mathbb{Z}[\frac{1+\sqrt5}{2}]$).
Indeed ellsearch(23) returns nothing: there is no elliptic curve of conductor 23. ✓ Modularity is a bijection between rational newforms and isogeny classes of elliptic curves, not between all newforms and curves.
6.15 Show that oldforms at level $2N$ from level $N$ have the same $a_p$ for $p\nmid2N$.
If $f(\tau)=\sum c_nq^n$ has level $N$, then $g(\tau)=f(2\tau)=\sum c_nq^{2n}$ has level $2N$. Its coefficients are $b_m=c_{m/2}$ for $2\mid m$ and 0 otherwise — so $b_p=0$ for odd $p$, not $c_p$. So $g$ is not an eigenform with the same eigenvalues.
However the 2-dimensional space $\langle f(\tau),f(2\tau)\rangle$ inside $S_2(\Gamma_0(2N))$ is stable under $T_p$ for $p\nmid2N$, and $T_p$ acts on it with the single eigenvalue $c_p$ (twice). So the "old" eigenvalues at good primes agree with the level-$N$ ones ✓. That is exactly why the new subspace must be separated out: otherwise every level would inherit all lower-level eigenvalue systems.
Every elliptic curve $E/\mathbb{Q}$ of conductor $N$ is modular: there is a newform $f_E\in S_2^{\text{new}}(\Gamma_0(N))$ with rational integer coefficients such that $$c_n(f_E)=a_n(E)\quad\text{for all }n,\qquad\text{equivalently}\qquad L(E,s)=L(f_E,s).$$ Equivalently, there is a non-constant morphism $\pi:X_0(N)\to E$ defined over $\mathbb{Q}$ (a modular parametrisation).
The correspondence is a bijection: $$\{\text{isogeny classes of }E/\mathbb{Q}\text{ of conductor }N\}\longleftrightarrow\{\text{newforms in }S_2^{\text{new}}(\Gamma_0(N))\text{ with }c_n\in\mathbb{Z}\}.$$
The degree of the minimal modular parametrisation $\pi:X_0(N)\to E$. It is computable and appears in bounds relating Ш, the regulator, and congruence primes. PARI: ellmoddegree.
? E = ellinit([0,0,1,-1,0]); \\ 37a1
? N = ellglobalred(E)[1]
% 37
? mf = mfinit([N,2],0); B = mfeigenbasis(mf);
? \\ find which newform matches:
? for(i=1,#B, if(mfcoefs(B[i],10)[2..11] == ellan(E,10), print("match: ", i)))
match: 1
? ellmoddegree(E)
% 2
? \\ modular symbols machinery:
? ms = msinit(N, 2);
? \\ the L-function via the modular form:
? lfun(E, 1)
? elllseries(E, 1)
Given $a^p+b^p=c^p$ with $abc\ne0$, $p\ge5$, set $$E_{a,b}:\ y^2=x(x-a^p)(x+b^p).$$ Then $\Delta=16(abc)^{2p}$ and, after minimalising, the conductor is $\prod_{\ell\mid abc}\ell$ — squarefree, so $E$ is semistable. Ribet's level-lowering theorem says $\bar\rho_{E,p}$ would arise from a newform of level 2. But $\dim S_2(\Gamma_0(2))=0$. Contradiction. ∎
? mfdim(mfinit([2,2],1))
% 0
6.16 Match every curve of conductor $\le40$ with its newform.
{ for(N = 11, 40,
my(v = ellsearch(N));
if(#v,
my(mf = mfinit([N,2],0), B = mfeigenbasis(mf), classes = Set());
for(i = 1, #v,
my(E = ellinit(v[i][2]), an = ellan(E, 12));
for(j = 1, #B,
if(mfcoefs(B[j],12)[2..13] == an,
classes = setunion(classes, Set([j])))));
print(N, " curves:", #v, " newforms:", #B, " matched:", #classes)));
}
Every conductor with curves has exactly as many rational newforms as isogeny classes ✓. Conductors like 23, 29, 31 with irrational newforms and no curves confirm the other direction.
6.17 Compute the conductor of the Frey curve for a hypothetical $a^5+b^5=c^5$.
$E:y^2=x(x-a^5)(x+b^5)$ with $\gcd(a,b)=1$. Then $c_4=16(a^{10}+a^5b^5+b^{10})$ and $$\Delta=16\,a^{10}b^{10}(a^5+b^5)^2=16(abc)^{10}.$$ After minimalising (Frey normalised $a\equiv-1\bmod4$, $b$ even), $\Delta_{\min}=2^{-8}(abc)^{10}$ and $N=\prod_{\ell\mid abc}\ell$: squarefree, hence semistable.
Then $\bar\rho_{E,5}$ is unramified outside 5 and modular of level $N$; Ribet lowers the level to 2, and $S_2(\Gamma_0(2))=0$. ∎
? \\ toy: a=3,b=4 (not a solution, but shows the shape)
? E = ellminimalmodel(ellinit([0, 4^5 - 3^5, 0, -3^5*4^5, 0]));
? issquarefree(ellglobalred(E)[1])
% 1 \\ semistable
6.18 Compute modular degrees for a few curves and note the correlation with conductor.
? for(N=11, 60, my(v = ellsearch(N));
for(i=1, min(1,#v),
my(E = ellinit(v[i][2]));
print(N, " ", v[i][1], " degree ", ellmoddegree(E))))
11 11a1 1
14 14a1 1
15 15a1 1
17 17a1 1
19 19a1 1
20 20a1 2
21 21a1 2
...
37 37a1 2
389 389a1 40
The modular degree grows roughly like $N^{1+\epsilon}$ (conjecturally $N^{7/6+\epsilon}$, by Watkins). It bounds the height of Heegner points and appears in the "degree conjecture" relating it to $\#\text{Ш}$ and the congruence number. For record curves with $N$ enormous, the modular degree is astronomically large — another reason $X_0(N)$-based methods are unavailable there.
$$\Lambda(E,s)=N^{s/2}(2\pi)^{-s}\Gamma(s)\,L(E,s).$$
$\Lambda(E,s)$ extends to an entire function of $s\in\mathbb{C}$ and $$\Lambda(E,s)=w\,\Lambda(E,2-s),\qquad w=w(E)\in\{\pm1\}.$$ $w$ is the root number, or sign of the functional equation.
Where it comes from. Let $f=f_E$ be the newform. The Fricke involution $W_N:\tau\mapsto-1/(N\tau)$ acts on $S_2(\Gamma_0(N))$, and $f$ is an eigenvector: $f|W_N=-w\,f$. Writing $\Lambda(E,s)=N^{s/2}\int_0^\infty f(iy)y^{s-1}dy$ and substituting $y\mapsto1/(Ny)$ in the part of the integral over $(0,1/\sqrt N)$ converts it into the range $(1/\sqrt N,\infty)$ with $s\mapsto2-s$ and picks up the sign. ∎
The centre of the critical strip is $s=1$, the fixed point of $s\mapsto2-s$. If $w=-1$ then $\Lambda(E,1)=-\Lambda(E,1)$, so $\Lambda(E,1)=0$. Hence $$w=(-1)^{\,r_{\text{an}}},$$ i.e. the analytic rank is even iff $w=+1$. Combined with BSD this is the parity conjecture: $w=(-1)^r$.
$w=\prod_{v}w_v$ over all places, with
Computing $w$ needs only Tate's algorithm at the bad primes — polynomial time in $\log N$, and utterly insensitive to the size of $N$. Computing $L(E,1)$ needs $O(\sqrt N)$ coefficients. For record curves the root number is available and the $L$-value is not. That asymmetry is exactly what the rank-30 certification exploits.
? E = ellinit([0,0,1,-1,0]); \\ 37a1
? ellrootno(E)
% -1 \\ odd analytic rank
? ellanalyticrank(E)
% [1, 0.3059...]
? ellrank(E)[1..2]
% [1, 1] \\ consistent
? \\ local root numbers:
? ellrootno(E, 37)
% -1
? \\ check the product formula:
? N = ellglobalred(E)[1];
? w = -1; \\ w_infinity
? fordiv(N, d, if(isprime(d), w *= ellrootno(E,d)));
? w == ellrootno(E)
% 1
6.19 Verify the parity conjecture on all curves of conductor $\le100$.
{ my(bad = 0);
for(N = 11, 100,
my(v = ellsearch(N));
for(i = 1, #v,
my(E = ellinit(v[i][2]), r = ellrank(E)[1], w = ellrootno(E));
if((-1)^r != w, bad++; print("FAIL ", v[i][1]))));
print("failures: ", bad);
}
failures: 0
No failures ✓. (Note the test uses the lower rank bound; for these small curves the bounds coincide.) The parity conjecture is known in many cases — for instance Dokchitser–Dokchitser proved the $p$-parity conjecture for all elliptic curves over $\mathbb{Q}$ — but the full BSD parity statement is still open in general.
6.20 Compute $w$ for a curve with 40-digit coefficients and time it.
? a = -(10^40 + 7); b = 10^40 + 3;
? E = ellminimalmodel(ellinit([0,0,0,a,b]));
? t = getabstime(); w = ellrootno(E); (getabstime()-t)/1000.0
? w
The bottleneck is factoring the conductor (needed to enumerate bad primes), not the root-number computation itself. If $\Delta$ has a hard-to-factor part this can stall — which is a real issue for record curves. In practice one records the factorisation at construction time, since the discriminant of a specialised family factors by construction.
Once the bad primes are known, the local root numbers cost microseconds each, regardless of how large $N$ is. Contrast ellanalyticrank on the same curve: it will not finish.
6.21 Show that $w=+1$ and 30 independent points together give rank exactly 30, given an analytic-rank bound of 31.
Suppose $r_{\text{an}}\le31$ (Bober, under GRH) and $w=+1$. By the parity relation $w=(-1)^{r_{\text{an}}}$, $r_{\text{an}}$ is even, hence $r_{\text{an}}\le30$.
Under BSD, $r=r_{\text{an}}\le30$. And unconditionally $r\ge30$ from the thirty independent points. Therefore $r=30$ ✓.
Note the parity step is doing real work: without it the bound would be 31 and the rank would be pinned only to $\{30,31\}$. This is exactly the argument used for the 2026 record. ∎
The functional equation is not just structural — it is the computational tool.
From $\Lambda(E,s)=N^{s/2}\int_0^\infty f(iy)y^{s-1}dy$, split at $y=1/\sqrt N$ and apply the functional equation to the lower part. The result, at $s=1$: $$L(E,1)=\bigl(1+w\bigr)\sum_{n\ge1}\frac{a_n}{n}\,e^{-2\pi n/\sqrt N}.$$ More generally, for the $k$-th derivative, $$\frac{L^{(k)}(E,1)}{k!}=\sum_{n\ge1}\frac{a_n}{n}\,G_k\!\left(\frac{2\pi n}{\sqrt N}\right)\cdot(\ldots),$$ with $G_k$ an incomplete-gamma-type function decaying exponentially.
The factor $e^{-2\pi n/\sqrt N}$ kills terms once $n\gtrsim\sqrt N$. So: $$\text{number of }a_n\text{ needed}\ \approx\ C\sqrt N.$$ For $N\sim10^{10}$: $10^5$ coefficients — seconds. For $N\sim10^{100}$: $10^{50}$ coefficients — impossible by fifty orders of magnitude (Lesson 40 Ex 3.21).
The standard procedure:
A numerically nonzero value, with proven error bounds, proves nonvanishing, hence pins $r_{\text{an}}$ exactly. A numerically tiny value does not prove vanishing — it could be $10^{-40}$. So this method gives rigorous upper bounds on $r_{\text{an}}$ (from the first nonvanishing derivative found), and only heuristic lower bounds. In practice one combines it with the parity constraint from $w$.
? \p 40
? E = ellinit([0,0,1,-7,6]); \\ 5077a1, rank 3
? ellrootno(E)
% -1
? ellanalyticrank(E)
% [3, 10.3910994680600canonical...] \\ [rank, L'''(1)/3!]
? elllseries(E, 1)
% 0.E-40 \\ vanishes
? elllseries(E, 1, 1) \\ first derivative
% 0.E-40
? \\ how many coefficients were needed?
? ellglobalred(E)[1]
% 5077
? sqrt(5077)
% 71.25 \\ only ~70-200 terms
? \\ a rank-4 example:
? F = ellinit([1,-1,0,-79,289]); \\ 234446a1
? ellanalyticrank(F)
? \\ time analytic rank as the conductor grows
? for(k = 3, 9,
my(a = -(10^k+1), b = 10^k+3, E, t);
if(4*a^3+27*b^2,
E = ellminimalmodel(ellinit([0,0,0,a,b]));
t = getabstime();
ellanalyticrank(E);
print(k, " N ~ ", sizedigit(ellglobalred(E)[1]), " digits ",
(getabstime()-t)/1000.0, " s")));
Times grow like $\sqrt N$. Somewhere around $N\sim10^{16}$–$10^{20}$ this becomes hours; beyond $10^{25}$ it is hopeless. The rank-30 record curve is far, far past this line.
6.22 Verify $L(E,1)=0$ exactly when $w=-1$, on a sample of curves.
{ for(N = 11, 200,
my(v = ellsearch(N));
for(i = 1, #v,
my(E = ellinit(v[i][2]), w = ellrootno(E), L = abs(elllseries(E,1)));
if(w == -1 && L > 1e-20, print("unexpected nonzero ", v[i][1]));
if(w == 1 && L < 1e-20, print("rank >= 2: ", v[i][1]))));
}
Every $w=-1$ curve has $L(E,1)=0$ ✓ (forced by the functional equation). Curves with $w=+1$ and $L(E,1)=0$ have analytic rank $\ge2$ — the first is 389a1, and they are comparatively rare among small conductors.
6.23 Use the BSD formula to compute $\#\text{Ш}$ for 389a1 and check it is a square.
? \p 40
? E = ellinit([0,1,1,-2,0]); \\ 389a1
? r = ellanalyticrank(E)
% [2, 0.7594...]
? G = ellrank(E)[4]; #G
% 2
? Reg = matdet(ellheightmatrix(E, G))
? Om = E.omega[1] * if(E.disc > 0, 2, 1)
? tam = ellglobalred(E)[3]
? tors = elltors(E)[1]
? sha = r[2] * tors^2 / (Om * Reg * tam)
% 1.0000000000...
$\#\text{Ш}=1$ ✓, a perfect square (trivially). Try 571a1 for $\#\text{Ш}=4$, and 2充... the standard first examples with $\#\text{Ш}=4$ are 571a1 and 681b1.
6.24 Estimate the largest conductor for which ellanalyticrank is practical on your machine.
Cost $\approx C\sqrt N$ coefficient computations, each an ellap. With $\sim10^6$ ellap calls per second and a one-hour budget, that is $3.6\times10^9$ coefficients, so
$$\sqrt N\lesssim3.6\times10^9\ \Longrightarrow\ N\lesssim10^{19}.$$
Empirically PARI manages $N\sim10^{14}$–$10^{16}$ comfortably and $10^{18}$ with patience.
Since the rank-30 curve has $N$ with dozens of digits, we are short by a factor of roughly $10^{40}$ in the number of terms. Hence Lesson 76.
$$\operatorname{ord}_{s=1}L(E,s)=\operatorname{rank}E(\mathbb{Q}).$$
$\text{Ш}(E/\mathbb{Q})$ is finite, and with $r=\operatorname{rank}E(\mathbb{Q})$, $$\lim_{s\to1}\frac{L(E,s)}{(s-1)^r}=\frac{\Omega\cdot\operatorname{Reg}(E)\cdot\#\text{Ш}(E/\mathbb{Q})\cdot\prod_pc_p}{\bigl(\#E(\mathbb{Q})_{\text{tors}}\bigr)^2}.$$
Every ingredient has appeared in this course:
| Symbol | Definition | Lesson | PARI |
|---|---|---|---|
| $\Omega$ | real period $\int_{E(\mathbb{R})}|\omega|$ (including $c_\infty$) | 24 | E.omega[1] |
| $\operatorname{Reg}(E)$ | $\det$ of the canonical-height Gram matrix | 50 | ellheightmatrix |
| $\#\text{Ш}$ | order of the Tate–Shafarevich group | 61 | — (conjectural only) |
| $c_p$ | Tamagawa numbers from Tate's algorithm | 39 | ellglobalred(E)[3] |
| $\#E(\mathbb{Q})_{\text{tors}}$ | torsion order | 41 | elltors(E)[1] |
Notice that $\operatorname{Reg}$ — a determinant of canonical heights, a purely Diophantine quantity built from denominators of rational points — appears in a formula for a special value of an analytic function. That is the astonishing content of strong BSD, and it is why the height machinery of Phase 4 is not a technicality but the heart of the subject.
| Case | What is proved |
|---|---|
| $r_{\text{an}}=0$ | $r=0$ and Ш finite (Kolyvagin + Gross–Zagier + modularity; Coates–Wiles for CM) |
| $r_{\text{an}}=1$ | $r=1$ and Ш finite (same) |
| $r_{\text{an}}\ge2$ | essentially nothing; not a single curve of rank $\ge2$ is known to satisfy BSD |
| strong BSD | known up to explicit small primes in many cases (Kato, Skinner–Urban, and successors) |
| on average | $\ge66\%$ of curves satisfy BSD (Bhargava–Skinner–Zhang) |
BSD is one of the seven Clay Millennium Problems.
bsdcheck(E) =
{ my(ar = ellanalyticrank(E), r = ar[1], L = ar[2], G, Reg, Om, tam, tors);
G = select(P -> ellorder(E,P) == 0, ellrank(E)[4]);
if(#G != r, return("rank mismatch"));
Reg = if(r == 0, 1.0, matdet(ellheightmatrix(E, G)));
Om = E.omega[1] * if(E.disc > 0, 2, 1);
tam = ellglobalred(E)[3];
tors = elltors(E)[1];
L * tors^2 / (Om * Reg * tam);
}
? bsdcheck(ellinit([0,-1,1,-10,-20])) \\ 11a1
% 1.00000000000...
? bsdcheck(ellinit([0,0,1,-1,0])) \\ 37a1
% 1.00000000000...
? bsdcheck(ellinit([0,1,1,-2,0])) \\ 389a1
% 1.00000000000...
Each output is the conjectural $\#\text{Ш}$: always a positive integer, always a perfect square. Getting a non-integer means your generators are unsaturated (the index inflates $\operatorname{Reg}$ by $k^2$) or your period convention is off by a factor of $c_\infty$.
6.25 Run bsdcheck over all curves of conductor $\le300$ and tabulate the values of $\#\text{Ш}$.
{ my(t = Map());
for(N = 11, 300,
my(v = ellsearch(N));
for(i = 1, #v,
my(E = ellinit(v[i][2]), s = bsdcheck(E));
if(type(s) != "t_STR" && abs(s - round(s)) < 0.01,
my(k = round(s));
mapput(t, k, if(mapisdefined(t,k), mapget(t,k), 0) + 1))));
print(Vec(t));
}
Almost all values are 1; a handful are 4. No non-squares appear. This distribution matches the Delaunay heuristics, which predict that $\text{Ш}$ is trivial for a positive proportion of curves and that large Ш is rare.
6.26 Explain why an unsaturated generating set makes bsdcheck return a non-square, and how to detect it.
If your points generate an index-$k$ subgroup, $\operatorname{Reg}_{\text{computed}}=k^2\operatorname{Reg}(E)$ (Lesson 52 Ex 4.28). Since $\operatorname{Reg}$ is in the denominator, the computed $\#\text{Ш}$ is $\#\text{Ш}_{\text{true}}/k^2$ — typically not an integer at all.
Detection: if bsdcheck returns something like $0.25$ or $0.111$, you have index 2 or 3. Multiply by $k^2$ for the plausible $k$ and see which gives a perfect square integer; then saturate at that prime.
? E = ellinit([0,0,1,-7,6]);
? G = ellrank(E)[4];
? G2 = [ellmul(E,G[1],2), G[2], G[3]]; \\ index 2
? \\ recompute with G2 -- the "Sha" comes out 1/4
6.27 State precisely what BSD contributes to the rank-30 claim, and what would remain if BSD were false.
BSD contributes: the conversion $r_{\text{an}}\ge r$. Bober's method bounds $r_{\text{an}}$; without BSD that bound says nothing about the Mordell–Weil rank.
If BSD were false: the lower bound $r\ge30$ survives untouched — it is 30 explicit points and a determinant. What collapses is the ceiling. The curve would still hold the record for "largest proven rank lower bound", and it would still be the largest known.
Also note GRH is needed independently, for the explicit formula step (Lesson 76). Failure of GRH would likewise remove only the ceiling.
Let $K=\mathbb{Q}(\sqrt{-D})$ be imaginary quadratic satisfying the Heegner hypothesis: every prime dividing $N$ splits in $K$. Then there is a point $\tau\in\mathbb{H}$ with $\tau$ and $N\tau$ both roots of integral quadratic forms of discriminant $-D$; its image in $X_0(N)$ is a CM point, defined over the Hilbert class field $H$ of $K$. Push forward through the modular parametrisation $\pi:X_0(N)\to E$ and take the trace to $K$: $$P_K=\operatorname{Tr}_{H/K}\,\pi(\tau)\ \in\ E(K).$$
$$L'(E/K,1)=\frac{\|f\|^2\,\hat h(P_K)}{c},$$ for an explicit nonzero constant $c$ depending on $D$, $N$, and the modular degree. In particular $$L'(E/K,1)\ne0\iff P_K\ \text{is non-torsion}.$$
An analytic derivative equals a canonical height. This is the first and still the deepest instance of the BSD philosophy made rigorous — and note that both sides are objects we now understand: the left from Lesson 73, the right from Lesson 47.
If $P_K$ is non-torsion then $\operatorname{rank}E(K)=1$ and $\text{Ш}(E/K)$ is finite.
Kolyvagin constructs, from Heegner points over ring class fields $K[n]$ for many auxiliary $n$, a compatible family of cohomology classes $c_n\in H^1(K,E[p^m])$. Compatibility ("norm relations") means the classes at level $n$ and $n\ell$ are related by the Euler factor at $\ell$. Feeding this family into a local-global duality argument bounds the Selmer group from above by the index of the Heegner point in $E(K)$. One Euler system yields one dimension of bound.
$$r_{\text{an}}(E/\mathbb{Q})\le1\ \Longrightarrow\ r=r_{\text{an}}\ \text{and}\ \text{Ш}(E/\mathbb{Q})\ \text{is finite}.$$ Unconditional (given modularity). It is the only general theorem confirming BSD.
The method fundamentally produces one point. An Euler system bounds a Selmer group by one dimension; no construction is known that produces rank-2 or higher information. For a rank-30 curve, Gross–Zagier and Kolyvagin say nothing at all. Every statement about high-rank curves is therefore either an unconditional lower bound from explicit points, or conditional on GRH and BSD.
? E = ellinit([0,0,1,-1,0]); \\ 37a1, rank 1, w = -1
? ellrootno(E)
% -1
? P = ellheegner(E) \\ compute the Heegner point!
% [0, 0]
? ellorder(E, P)
% 0 \\ non-torsion
? ellheight(E, P)
? ellrank(E)[4]
% [[0, 0]] \\ same generator
ellheegner is remarkable: it produces a generator of a rank-1 curve analytically, without any search. For curves where the generator is astronomically large this is often the only feasible method — Elkies used it to find generators of height over 10,000 on rank-1 curves.
Bhargava–Skinner–Zhang: at least $66.48\%$ of elliptic curves over $\mathbb{Q}$, ordered by height, have $r_{\text{an}}\le1$ and hence satisfy BSD unconditionally. So BSD is "known for most curves" — but never for one where the rank is interesting.
6.28 Use ellheegner on several rank-1 curves and compare with the generators from descent.
{ for(N = 37, 200,
my(v = ellsearch(N));
for(i = 1, #v,
my(E = ellinit(v[i][2]));
if(ellrootno(E) == -1 && ellrank(E)[2] == 1,
my(P = ellheegner(E), G = ellrank(E)[4]);
print(v[i][1], " heegner:", P, " descent:", if(#G, G[1], "-")))));
}
The two agree up to sign and up to a multiple: the Heegner point generates a subgroup of index equal to the "Heegner index", which by Gross–Zagier–Kolyvagin is related to $\#\text{Ш}$. Where they differ by a factor $k$, expect $\#\text{Ш}=k^2$.
6.29 Find a rank-1 curve whose generator is too large for direct search but obtainable via ellheegner.
? \p 200
? \\ curves with large Heegner points -- try a large-conductor rank-1 curve:
? E = ellinit([0, 0, 1, -79, 342]);
? \\ or construct one: quadratic twists of a rank-1 curve often have big generators
? E0 = ellinit([0,0,1,-1,0]);
? for(d = 2, 40, if(issquarefree(d),
my(Ed = ellinit(elltwist(E0, d)));
if(ellrank(Ed)[2] == 1 && ellrootno(Ed) == -1,
my(P = ellheegner(Ed));
print(d, " height ", ellheight(Ed, P)))));
Twists with larger $d$ have generators of rapidly growing height (by Gross–Zagier, $\hat h(P_d)$ grows with $L'(E_d,1)$ and with $\sqrt d$). Beyond $\hat h\approx40$ direct search fails while ellheegner keeps working — provided you raise \p enough. That is the practical value of the analytic method.
6.30 Explain why an Euler system gives only one dimension of bound.
The Selmer group is bounded by a local-global duality argument: each Kolyvagin class $c_n$ imposes a linear condition on $\mathrm{Sel}$, killing (at most) one dimension per "direction" available in the system. The Heegner-point Euler system has a single generator (the point $P_K$), so the derived classes all live in the line it spans; the argument bounds $\mathrm{Sel}/\langle P_K\rangle$ but cannot say anything about a second independent direction.
To bound a rank-2 Selmer group one would need a rank-2 Euler system — a family of surfaces of CM points, or a genuinely new construction. Skinner–Urban and Iwasawa-theoretic methods give partial results, but the rank-$\ge2$ case of BSD remains completely open. ∎
This lesson sets up the tool that actually bounds record ranks. The idea is classical analytic number theory: relate zeros of an $L$-function to sums over primes.
Shift so the critical line is $\operatorname{Re}(s)=0$: set $L^{\text{an}}(E,s)=L(E,s+1)$, with coefficients $$b_n=\frac{a_n}{\sqrt n},\qquad |b_p|\le2.$$ Then the functional equation becomes $\Lambda(s)=w\Lambda(-s)$ and the central point is $s=0$.
$$-\frac{L'}{L}(E,s)=\sum_{n\ge2}\frac{\Lambda_E(n)}{n^{s}},$$ where $\Lambda_E(p^k)=\bigl(\alpha_p^k+\beta_p^k\bigr)\log p$ with $\alpha_p,\beta_p$ the Satake parameters ($\alpha_p\beta_p=1$, $\alpha_p+\beta_p=b_p$ in the analytic normalisation), and $\Lambda_E(n)=0$ for $n$ not a prime power.
Let $F:\mathbb{R}\to\mathbb{R}$ be even, continuous, of compact support, with Fourier transform $\hat F(\xi)=\int F(x)e^{-2\pi ix\xi}dx$. Then $$\sum_{\gamma}F(\gamma)\;=\;\hat F(0)\,\frac{\log N}{2\pi}\;+\;\frac{1}{2\pi}\int_{-\infty}^{\infty}F(t)\,\Bigl[\text{archimedean factor}\Bigr]dt\;-\;\frac{1}{\pi}\sum_{p,\ k\ge1}\frac{\Lambda_E(p^k)}{\log(p^k)}\cdot\frac{\log p}{\ }\ \hat F\!\left(\frac{k\log p}{2\pi}\right),$$ where $\gamma$ runs over the imaginary parts of the nontrivial zeros $\rho=\tfrac{}{}i\gamma$ of $L^{\text{an}}(E,s)$ (under GRH these are all real).
The precise archimedean term involves $\frac{\Gamma'}{\Gamma}$; the structure is what matters: $$\underbrace{\sum_\gamma F(\gamma)}_{\text{zeros}}=\underbrace{\hat F(0)\frac{\log N}{2\pi}+A(F)}_{\text{main term, grows with }\log N}-\underbrace{\frac{1}{\pi}\sum_{p^k}\frac{b_{p^k}\log p}{p^{k/2}}\hat F\!\left(\frac{k\log p}{2\pi}\right)}_{\text{prime sum}}.$$
Choose $F\ge0$ everywhere with $F(0)=1$ and $\hat F$ supported in $[-\Delta,\Delta]$. Under GRH all $\gamma$ are real, so every term $F(\gamma)\ge0$. The zero at the central point contributes $F(0)=1$ with multiplicity $r_{\text{an}}$. Dropping every other zero: $$r_{\text{an}}\ \le\ \hat F(0)\frac{\log N}{2\pi}+A(F)-\frac1\pi\sum_{p^k\le e^{2\pi\Delta}}\frac{b_{p^k}\log p}{p^{k/2}}\hat F\!\left(\frac{k\log p}{2\pi}\right).$$
Choosing $F$ and $\Delta$ well is the craft. Mestre used $F(x)=(\frac{\sin\pi\Delta x}{\pi\Delta x})^2$-type kernels; Bober optimised further.
\\ Simplified: uses the Fejer kernel, ignores exact archimedean constants.
\\ For calibration only -- a real implementation needs careful constants.
efbound(E, D) =
{ my(N = ellglobalred(E)[1], S = 0.0, X = exp(2*Pi*D));
forprime(p = 2, min(X, 10^7),
if(N % p != 0,
my(b = ellap(E,p)/sqrt(p), u = log(p)/(2*Pi*D));
if(u < 1, S += b * log(p)/sqrt(p) * (1 - u))));
D * log(N)/(2*Pi) + 1.0 - S/(Pi*D);
}
? E = ellinit([0,0,1,-7,6]); \\ rank 3, N = 5077
? for(D = 1, 4, print(D, " bound ~ ", efbound(E, D)))
? ellanalyticrank(E)[1]
% 3
The bound decreases then increases as $\Delta$ grows — there is an optimum. Finding it is exactly the parameter choice Bober's method automates.
6.31 Verify $|b_p|\le2$ in the analytic normalisation.
$b_p=a_p/\sqrt p$ and Hasse gives $|a_p|\le2\sqrt p$, so $|b_p|\le2$ ✓.
Equivalently, the Satake parameters $\alpha_p,\beta_p=e^{\pm i\theta_p}$ lie on the unit circle, so $b_p=2\cos\theta_p\in[-2,2]$. This uniform bound is what makes the prime sum in the explicit formula converge and be estimable.
6.32 Show that a rank-$r$ curve contributes $r$ to $\sum_\gamma F(\gamma)$ from the central zero.
In the analytic normalisation the central point is $s=0$, i.e. $\gamma=0$. By definition $r_{\text{an}}=\operatorname{ord}_{s=0}L^{\text{an}}(E,s)$, so $\gamma=0$ occurs with multiplicity $r_{\text{an}}$ in the list of zeros. Each contributes $F(0)=1$. So the central zeros alone give $r_{\text{an}}$ ✓.
Since $F\ge0$ and all other $\gamma$ are real under GRH, $\sum_\gamma F(\gamma)\ge r_{\text{an}}$, and the explicit formula's right-hand side is therefore an upper bound for $r_{\text{an}}$ ✓. That single inequality is the whole method. ∎
6.33 Investigate how efbound degrades as the conductor grows, holding the rank fixed.
{ for(k = 1, 6,
my(d = 10^k, E);
\\ quadratic twists keep the rank pattern but raise N
E = ellinit(elltwist(ellinit([0,0,1,-7,6]), d));
if(type(E) == "t_VEC",
E = ellminimalmodel(E);
print(sizedigit(ellglobalred(E)[1]), " digits bound ",
efbound(E, 3.0))));
}
The bound grows roughly linearly in $\log N$, i.e. linearly in the number of digits of $N$. For a curve with a 100-digit conductor, even an optimal $\Delta$ leaves a bound of a few dozen. That is why the rank-30 certification produces 31 and needs parity to close: the method's resolution is simply not finer than $\pm1$ at that conductor.
Bober's 2011 paper turns the explicit formula into an algorithm that works on curves with enormous conductors. It is the method that certified the rank-30 record.
Assume:
Choose a test function $f$ with $f(0)=1$, $f\ge0$, and $\hat f$ supported in $[-\Delta,\Delta]$. The explicit formula yields an explicit upper bound $$r\ \le\ B(E,\Delta)\ =\ \bigl(\text{main term in }\log N,\ \Delta\bigr)\ -\ \bigl(\text{prime sum over }p^k\le e^{2\pi\Delta}\bigr).$$ Take $\lfloor B\rfloor$; then improve by one if $\lfloor B\rfloor$ has the wrong parity relative to $w(E)$.
| $L$-value method | Bober's method | |
|---|---|---|
| coefficients needed | $O(\sqrt N)$ | $O(e^{2\pi\Delta})$, independent of $N$ |
| dependence on $N$ | cost | bound quality only, via $\log N$ |
| $N\sim10^{100}$ | $10^{50}$ terms: impossible | $\sim10^{11}$ terms at $\Delta=4.25$: feasible |
| output | exact $r_{\text{an}}$ | upper bound on $r_{\text{an}}$ |
The conductor's size hurts the bound but not the compute cost. That asymmetry is the entire point.
Under BSD and GRH, Bober showed that the then-known curves of rank $\ge20,21,22,23,24$ have rank exactly $20,21,22,23,24$, and that Elkies' rank-$\ge28$ curve has rank $28$ or $30$ — the parity argument narrowing an odd-looking gap.
Applied to the Alpöge–Howell curve with $\Delta=4.25$:
Therefore $r=30$, conditional on GRH and BSD. Note precisely what is conditional: the lower bound is unconditional; only the ceiling requires the two hypotheses.
Too small: the main term $\Delta\log N/(2\pi)$ is small but the prime sum is too short to help, and other constants dominate — a useless bound. Too large: $e^{2\pi\Delta}$ primes is unaffordable. At $\Delta=4.25$, $e^{2\pi\cdot4.25}\approx4\times10^{11}$ — so a real implementation uses a smoothed/truncated variant with rigorous tail estimates rather than summing every prime to $4\times10^{11}$. Getting the truncation right, with certified error bounds, is where the work lies.
\\ Structure of a Bober-style bound. The constants below are placeholders --
\\ a publishable version needs the exact archimedean terms and rigorous
\\ tail bounds on the truncated prime sum.
boberbound(E, D, Pmax) =
{ my(N = ellglobalred(E)[1], main, S = 0.0);
main = D * log(N) / (2*Pi) + archconst(D);
forprime(p = 2, Pmax,
if(N % p,
my(ap = ellap(E,p), th, u);
\\ k = 1 term
u = log(p) / (2*Pi*D);
if(u < 1, S += (ap/sqrt(p)) * log(p) * fhat(u));
\\ k = 2 term
u = 2*log(p) / (2*Pi*D);
if(u < 1, S += ((ap^2 - 2*p)/p) * log(p) * fhat(u))));
main - S/(Pi*D) + tailbound(Pmax, D);
}
\\ then:
\\ b = floor(boberbound(E, 4.25, 4e11));
\\ if((-1)^b != ellrootno(E), b -= 1);
\\ print("rank <= ", b);
The $k=2$ terms matter: they contribute $(a_p^2-2p)/p$, whose average is $-1$ by Sato–Tate, giving a systematic negative contribution that improves the bound. Dropping them costs you roughly one unit of rank.
6.34 Compute $e^{2\pi\Delta}$ for $\Delta=3,4,4.25,5$ and comment on feasibility.
? for(k = 1, 4, my(D = [3, 4, 4.25, 5][k]);
print(D, " e^(2 pi D) = ", exp(2*Pi*D)))
3 1.5e8
4 7.9e10
4.25 4.2e11
5 1.6e13
$\Delta=3$: $1.5\times10^8$ primes — minutes on a laptop. $\Delta=4.25$: $4\times10^{11}$ — a serious but achievable computation with a fast sieve for $a_p$ (hours to days on a cluster). $\Delta=5$: $1.6\times10^{13}$ — expensive but not impossible. Beyond that the returns diminish since the main term grows linearly in $\Delta$ while the prime sum's benefit saturates.
6.35 Show that the $k=2$ terms give a systematic improvement.
The $k=2$ contribution involves $\alpha_p^2+\beta_p^2=b_p^2-2$ in the analytic normalisation, i.e. $(a_p^2-2p)/p$. Under Sato–Tate, $b_p=2\cos\theta_p$ with density $\frac2\pi\sin^2\theta$, so $$\mathbb{E}[b_p^2]=\frac2\pi\int_0^\pi4\cos^2\theta\sin^2\theta\,d\theta=1.$$ Hence $\mathbb{E}[b_p^2-2]=-1$: a systematic negative average.
Since the prime sum enters the bound with a minus sign, a negative sum increases... careful with signs: the bound is $\text{main}-\frac1\pi\sum(\ldots)$, and the $k=2$ terms enter the sum with average $-1$, so $-\frac1\pi\sum$ picks up a positive... The net effect in Bober's formulation is that the $k=2$ terms contribute a term comparable to $-\hat f(0)$ times a constant, improving (lowering) the bound by roughly one unit. Empirically that is exactly what implementations report. ✓
The moral is that the $k\ge2$ terms are not a correction to be discarded — they are worth about a full unit of rank, which at the margin is the difference between 31 and 30.
6.36 Reproduce Bober's conclusion for a known rank-20 curve, at least qualitatively.
? \\ Elkies-Klagsbrun rank-20 curve coefficients are large; use the toy bound
? \\ on a smaller high-rank curve to see the mechanism:
? E = ellinit([0, 0, 1, -79, 342]); \\ rank 2 or so
? for(D = 1, 5, print(D, " ", efbound(E, D)))
? ellrootno(E)
? ellanalyticrank(E)[1]
You will see the bound bottom out at some $\Delta$, and the floor of that minimum, adjusted for parity, should match the true analytic rank or exceed it by 1. Scaling this up: for a 150-digit-coefficient curve the $\log N$ term is roughly 40× larger, pushing the minimum bound from ~3 to ~31 — exactly the observed behaviour. The method is unchanged; only the conductor's size degrades the answer.
Poincaré asked in 1901 which ranks occur over $\mathbb{Q}$. Here is the state of the answer.
| Rank $\ge$ | Year | Author(s) |
|---|---|---|
| 3 | 1938 | Billing |
| 4 | 1945 | Wiman |
| 6 | 1974 | Penney–Pomerance |
| 7 | 1975 | Penney–Pomerance |
| 8 | 1977 | Grunewald–Zimmert |
| 9 | 1977 | Brumer–Kramer |
| 12 | 1982 | Mestre |
| 14 | 1986 | Mestre |
| 15 | 1992 | Mestre |
| 17 | 1992 | Nagao |
| 19 | 1992 | Fermigier |
| 20 | 1993 | Nagao |
| 21 | 1994 | Nagao–Kouya |
| 22 | 1997 | Fermigier |
| 23 | 1998 | Martin–McMillen |
| 24 | 2000 | Martin–McMillen |
| 28 | 2006 | Elkies |
| 29 | 2024 | Elkies–Klagsbrun |
| 30 | 2026 | Alpöge–Howell |
Coefficients run to roughly 150 digits; the discriminant factors into primes including one of 122 digits. Nothing about this curve is small, and nothing about it could be found by naive search. The 30 generators have canonical heights ranging from modest to very large — the small ones found by direct search, the large ones only via descent-assisted methods (Lesson 89).
Note the discontinuities. Mestre's jump from 9 to 12 in 1982 came from a new construction. Elkies' jump from 24 to 28 in 2006 came from a new source of high-rank families (K3 surfaces). Between those jumps, years of increasing compute produced almost nothing. If you are tempted to throw cores at the problem, read Elkies first.
Dujella maintains tables of the largest known rank for each of Mazur's 15 torsion groups. Prescribing torsion confines the curve to a modular curve, shrinking the parameter space and lowering achievable rank. Roughly:
| Torsion | trivial | $\mathbb{Z}/2$ | $\mathbb{Z}/3$ | $\mathbb{Z}/4$ | $\mathbb{Z}/5$ | $\mathbb{Z}/7$ | $\mathbb{Z}/8$ |
|---|---|---|---|---|---|---|---|
| record rank | 30 | ~19 | ~15 | ~13 | ~9 | ~6 | ~6 |
Elkies–Klagsbrun's 2020 paper broke five of these records at once, and the pattern of the ceilings is itself evidence bearing on the boundedness heuristics of Lesson 92.
7.1 Find the highest-rank curve you can with $|a|,|b|\le100$ in $y^2=x^3+ax+b$, and estimate how rank scales with search box.
{ my(best = 0, bc = 0);
for(a = -100, 100, for(b = -100, 100,
if(4*a^3 + 27*b^2,
my(E = ellinit([0,0,0,a,b]));
if(type(E) == "t_VEC",
my(r = ellrank(E)[1]);
if(r > best, best = r; bc = [a,b]; print(r, " ", bc))))));
}
You will reach rank 4 or 5 in this box. Empirically the maximum rank in a box of size $B$ grows like $\log B$ at best — so to reach rank 30 by brute force you would need $B$ around $e^{30/c}$ for some small $c$, i.e. astronomically large. This is the empirical statement that high rank requires structure.
7.2 Verify that the record-tracking is per torsion group by finding the highest rank among curves with $\mathbb{Z}/5$ torsion in a small search.
? \\ Tate normal form for 5-torsion (Lesson 42 Ex 3.26):
? f(t) = ellinit([1-t, -t, -t, 0, 0]);
? { my(best = 0);
for(n = -60, 60,
my(E = f(n));
if(type(E) == "t_VEC",
my(r = ellrank(E)[1]);
if(r > best, best = r; print(n, " rank ", r)))); }
You will see ranks up to 2 or 3 in this one-parameter family. The record for $\mathbb{Z}/5$ torsion is around 8–9, found by imposing conditions on multi-parameter families — much harder than the trivial-torsion case, because the 5-torsion condition consumes a parameter and the associated surface has a reducible fibre structure that eats rank via Shioda–Tate (Lesson 80).
7.3 Look up the record table and note which years produced no progress. What was happening?
2000–2006 and 2006–2024 are the long gaps. In the first, the Martin–McMillen rank-24 curve stood while people scaled up sieving without new families. In the second, Elkies' rank-28 stood for eighteen years.
What broke each gap: Elkies (2006) brought in K3 elliptic surfaces of maximal Picard number, raising the generic rank ceiling from 8 to 18 (Lesson 81–82). Elkies–Klagsbrun (2024) and Alpöge–Howell (2026) refined the sieve and the point-search side.
Reading: Dujella's tables at web.math.pmf.unizg.hr/~duje/tors/rankhist.html are the canonical reference and are kept current.
Every construction of high rank since 1982 works by building a curve over $\mathbb{Q}(t)$ first, then specialising. This lesson sets up the geometry.
Let $k$ be a field and $K=k(t)$. An elliptic curve $\mathcal{E}/K$ is given by a Weierstrass equation with $a_i(t)\in k[t]$ and $\Delta(t)\not\equiv0$. It is non-constant (or non-isotrivial) if $j(\mathcal{E})\notin k$.
The associated elliptic surface is a smooth projective surface $S$ with a morphism $\pi:S\to\mathbb{P}^1$ whose generic fibre is $\mathcal{E}$, together with a section $\sigma_0:\mathbb{P}^1\to S$ giving $\mathcal{O}$. We always take $S$ relatively minimal: no fibre contains a $(-1)$-curve that could be blown down.
Concretely: for each $t_0\in\mathbb{P}^1$ the fibre $\pi^{-1}(t_0)$ is the specialised curve $\mathcal{E}_{t_0}$, an elliptic curve unless $\Delta(t_0)=0$, in which case it degenerates into one of the Kodaira configurations of Lesson 39.
$$\mathcal{E}\bigl(k(t)\bigr)\;=\;\{\text{sections of }\pi\},$$ i.e. morphisms $\mathbb{P}^1\to S$ splitting $\pi$. A $k(t)$-rational point is a family of points, one on each fibre, varying algebraically.
If $\mathcal{E}/k(t)$ is non-constant then $\mathcal{E}(k(t))$ is finitely generated. Its rank is the generic rank of the family.
$\chi=\chi(S,\mathcal{O}_S)$, the arithmetic genus. For a relatively minimal elliptic surface with section, $$\deg\Delta=12\chi,\qquad \deg a_i\le i\chi.$$
| $\chi$ | $\deg\Delta$ | Surface type | Rank ceiling (geometric) |
|---|---|---|---|
| 1 | 12 | rational elliptic surface | 8 |
| 2 | 24 | elliptic K3 surface | 18 |
| $\ge3$ | $12\chi$ | elliptic surface of general type (fibrewise) | larger, but sections are huge |
The singular fibres of $\pi$ are classified by exactly the Kodaira types of Lesson 39 — the same list, because bad reduction of $\mathcal{E}/k(t)$ at $t=t_0$ is formally identical to bad reduction of $E/\mathbb{Q}$ at $p$. Both are the local theory over a discrete valuation ring. Tate's algorithm applies verbatim with $t-t_0$ in place of $p$.
? \\ a family over Q(t): coefficients are polynomials in t
? E = ellinit([0, 0, 0, -t^2 - 1, t]);
? E.disc
% -64*t^6 - ... (a polynomial in t)
? poldegree(E.disc)
% 6
? \\ chi = deg(Delta)/12 -- but this model may not be minimal.
? \\ Specialise:
? subst(E.disc, t, 5)
? E5 = ellinit([0,0,0,-26,5]);
? ellrank(E5)
PARI handles polynomial coefficients symbolically for ellinit's algebraic members ($b_i$, $c_i$, $\Delta$, $j$), but not for ellrank or heights — for those you specialise. Symbolic family manipulation is where Mathematica earns its place (Phase 8).
7.4 Compute $\deg\Delta$ and hence $\chi$ for the family $y^2=x^3+t x+1$.
? E = ellinit([0,0,0,t,1]);
? E.disc
% -64*t^3 - 432
? poldegree(E.disc)
% 3
$\deg\Delta=3$, which is not a multiple of 12 — so this model is not relatively minimal as written; the surface needs a base change or the model needs adjusting at $t=\infty$. Taking the correct minimal model over $\mathbb{P}^1$ (accounting for the fibre at $t=\infty$) gives $\chi=1$: a rational elliptic surface.
Rule of thumb: $\chi=\lceil\max_i(\deg a_i/i)\rceil$. Here $\deg a_4=1$ so $1/4$, $\deg a_6=0$; hence $\chi=1$ ✓.
7.5 Find the singular fibres of $y^2=x^3+tx+1$ and their Kodaira types.
? D = -64*t^3 - 432;
? factor(D)
% -16 * (4*t^3 + 27)
? polisirreducible(4*t^3 + 27)
% 1 \\ irreducible over Q
? \\ over Qbar: three distinct roots, each simple
? poldisc(4*t^3 + 27) != 0
% 1
Three simple roots of $\Delta$ over $\overline{\mathbb{Q}}$, so three fibres of type $\mathrm{I}_1$ (nodal, $m_v=1$). Plus a fibre at $t=\infty$: since $\deg\Delta=3$ and a rational elliptic surface needs $\deg\Delta=12$ counting $\infty$, the fibre at infinity has $v_\infty(\Delta)=9$, giving type $\mathrm{III}^*$ ($m_v=8$).
Shioda–Tate (Lesson 80) then predicts generic rank $=8-(8-1)-3\cdot0=1$. The $\mathrm{III}^*$ fibre eats 7 of the 8 available units.
7.6 Show that a constant family ($j\in k$) violates Lang–Néron's hypothesis, and find a counterexample to finite generation.
Take $\mathcal{E}=E_0\times_k\mathbb{P}^1$ for a fixed $E_0/k$ with $k=\overline{\mathbb{Q}}$. Then $\mathcal{E}(k(t))\supseteq E_0(k)=E_0(\overline{\mathbb{Q}})$, which is a divisible group of infinite rank (every point is divisible by every $n$). Not finitely generated ✓.
Lang–Néron's correct statement handles this: $\mathcal{E}(K)/\mathcal{E}_0(k)$ is finitely generated, where $\mathcal{E}_0$ is the $k/K$-trace. For non-constant $\mathcal{E}$ the trace is 0 and one gets outright finite generation. In practice we always work with non-constant families, so this is a footnote — but it explains why "non-isotrivial" appears in every statement.
For a smooth projective surface $S$, $\operatorname{Div}(S)$ is the free abelian group on irreducible curves. Two divisors are algebraically equivalent if they lie in a connected family. The quotient $$\mathrm{NS}(S)=\operatorname{Div}(S)/\!\equiv_{\text{alg}}$$ is the Néron–Severi group; it is finitely generated, and its rank $$\rho(S)=\operatorname{rank}\mathrm{NS}(S)$$ is the Picard number.
Over $\mathbb{C}$, the Lefschetz $(1,1)$ theorem gives $\mathrm{NS}(S)\otimes\mathbb{Q}\hookrightarrow H^{1,1}(S)$, so $$\rho(S)\le h^{1,1}(S).$$ For an elliptic surface with $\chi=\chi(\mathcal{O}_S)$: $h^{1,1}=10\chi-2$.
For a relatively minimal elliptic surface $\pi:S\to\mathbb{P}^1$ with section, over an algebraically closed field $\overline k$, $$\rho(S)\;=\;2\;+\;\sum_{v}\bigl(m_v-1\bigr)\;+\;\operatorname{rank}\mathcal{E}\bigl(\overline k(t)\bigr),$$ where $v$ runs over points of $\mathbb{P}^1$ with singular fibre and $m_v$ is the number of irreducible components of the fibre at $v$.
$$\underbrace{\rho(S)}_{\text{total supply}}\;-\;\underbrace{2}_{\text{zero section }+\text{ general fibre}}\;-\;\underbrace{\sum_v(m_v-1)}_{\text{eaten by reducible fibres}}\;=\;\underbrace{\text{generic rank}}_{\text{what you get}}$$
Every reducible bad fibre consumes rank. From the Kodaira table (Lesson 39):
| Fibre type | $\mathrm{I}_1$ | $\mathrm{II}$ | $\mathrm{I}_2$ | $\mathrm{III}$ | $\mathrm{I}_n$ | $\mathrm{I}_0^*$ | $\mathrm{IV}^*$ | $\mathrm{III}^*$ | $\mathrm{II}^*$ |
|---|---|---|---|---|---|---|---|---|---|
| $m_v-1$ (cost) | 0 | 0 | 1 | 1 | $n-1$ | 4 | 6 | 7 | 8 |
To maximise generic rank:
Condition 2 says: keep the discriminant squarefree. Every construction in this phase is engineered around that single requirement. It is the reason Mestre's construction (Lesson 84) is designed to produce a squarefree quartic, and the reason one checks $\gcd(\Delta,\Delta')=1$ obsessively.
Inside $\mathrm{NS}(S)$ sits the trivial lattice $T$ generated by the zero section, a general fibre, and the non-identity components of the singular fibres. Shioda showed $$\mathcal{E}(\overline k(t))\ \cong\ \mathrm{NS}(S)/T,$$ and the orthogonal projection of a section into $T^\perp$ endows $\mathcal{E}(\overline k(t))/\text{tors}$ with a positive-definite pairing — the Mordell–Weil lattice. It is the geometric analogue of the height pairing of Lesson 50, and the two are compatible under specialisation.
7.7 Compute $h^{1,1}$ for $\chi=1$ and $\chi=2$ and deduce the rank ceilings.
$h^{1,1}=10\chi-2$.
$\chi=1$: $h^{1,1}=8$. But for a rational elliptic surface $\rho=h^{1,1}+2=10$ exactly (it is $\mathbb{P}^2$ blown up at 9 points, so $\rho=1+9=10$). Shioda–Tate: generic rank $=10-2-\sum(m_v-1)\le8$.
$\chi=2$ (K3): $h^{1,1}=18$, but $h^{1,1}(\text{K3})=20$. Indeed for K3, $b_2=22$ and $h^{2,0}=h^{0,2}=1$, so $h^{1,1}=20$ and $\rho\le20$ in characteristic 0. Shioda–Tate: generic rank $\le20-2=18$ ✓.
(The formula $h^{1,1}=10\chi-2$ is the correct one for elliptic surfaces once $b_2=12\chi-2$ and $h^{2,0}=\chi-1$ are accounted: $h^{1,1}=b_2-2h^{2,0}=12\chi-2-2(\chi-1)=10\chi$. For K3, $\chi=2$ gives 20 ✓; for rational, $\chi=1$ gives 10 ✓.)
7.8 A rational elliptic surface has fibres $\mathrm{I}_2,\mathrm{I}_3,\mathrm{I}_7$. What is the generic rank?
$\deg\Delta=12$ must equal $\sum v(\Delta)=2+3+7=12$ ✓, consistent.
Costs: $(2-1)+(3-1)+(7-1)=1+2+6=9$. But the budget is only 8. Contradiction — so this fibre configuration cannot occur on a rational elliptic surface with a section, or the surface would have negative rank.
In fact Persson and Miranda classified all possible fibre configurations on rational elliptic surfaces; $\{\mathrm{I}_2,\mathrm{I}_3,\mathrm{I}_7\}$ is not among them. A valid example: $\{\mathrm{I}_2,\mathrm{I}_2,\mathrm{I}_8\}$ costs $1+1+7=9$ — also too much. $\{\mathrm{I}_1^{\times12}\}$ costs 0, giving rank 8 ✓, the maximum.
7.9 Verify Shioda–Tate on the family $y^2=x^3+tx+1$ from Lesson 78.
From Ex 7.5: fibres are three $\mathrm{I}_1$ (cost 0 each) and one $\mathrm{III}^*$ at $\infty$ (cost 7). Rational elliptic surface, $\rho=10$.
Shioda–Tate: generic rank $=10-2-7=1$.
? \\ test by specialising and looking for a persistent point:
? for(n = 1, 12, my(E = ellinit([0,0,0,n,1]));
if(type(E)=="t_VEC", print(n, " rank ", ellrank(E)[1])))
Most specialisations have rank $\ge1$, consistent with generic rank 1 ✓ (Néron specialisation, Lesson 83). Occasional fibres have higher rank — those are the "lucky" ones a sieve hunts for.
$\chi=1$, $\deg\Delta=12$, $\rho(S)=10$ always ($S$ is $\mathbb{P}^2$ blown up at the 9 base points of a cubic pencil). Shioda–Tate: $$\operatorname{rank}\mathcal{E}(\overline k(t))=8-\sum_v(m_v-1)\ \le\ \boxed{8}.$$ Equality requires all twelve singular fibres to be irreducible: twelve $\mathrm{I}_1$'s, i.e. $\Delta(t)$ squarefree of degree 12.
When the generic rank is 8 the Mordell–Weil lattice is isomorphic to $E_8$ — the unique even unimodular positive-definite lattice of rank 8, the root lattice of the exceptional Lie algebra, and the densest sphere packing in dimension 8 (Viazovska, 2016).
This is not a coincidence. The trivial lattice $T$ in $\mathrm{NS}(S)$ is the hyperbolic plane $U$ when all fibres are irreducible, and $\mathrm{NS}(S)\cong U\oplus E_8$ for a rational elliptic surface. Shioda's theorem says $\mathcal{E}(\overline k(t))\cong\mathrm{NS}/T\cong E_8$.
$\chi=2$, $\deg\Delta=24$, $h^{1,1}=20$. In characteristic 0, Lefschetz gives $\rho\le20$. Shioda–Tate: $$\operatorname{rank}\mathcal{E}(\overline k(t))=\rho-2-\sum_v(m_v-1)\ \le\ \boxed{18}.$$ Equality requires $\rho=20$ (a singular K3 in the classical sense — maximal Picard number, nothing to do with singularities) and all 24 singular fibres irreducible.
These are bounds on $\operatorname{rank}\mathcal{E}(\overline{\mathbb{Q}}(t))$. The rank over $\mathbb{Q}(t)$ can be strictly smaller, because $G_\mathbb{Q}$ permutes the geometric sections and only the invariants are rational. Constructing a surface where the full geometric Mordell–Weil group is defined over $\mathbb{Q}$ is a substantial extra problem — and it is where Elkies' expertise lay. His rank-18-over-$\mathbb{Q}(t)$ families were breakthroughs precisely because of this, not because rank 18 is geometrically hard.
| Record | Source of generic rank | Extra from sieving |
|---|---|---|
| Mestre, rank 12–15 | rational surfaces + imposed conditions, generic rank ~11–12 | 3–4 |
| Nagao, Fermigier, rank 19–22 | refined families, generic rank ~13–15 | 6–8 |
| Elkies, rank 28 (2006) | K3 surface, generic rank 18 over $\mathbb{Q}(t)$ | 10 |
| Elkies–Klagsbrun 29, Alpöge–Howell 30 | same architecture, better sieve and point search | 11–12 |
Every record since 2006 has the same shape: high generic rank from a surface, plus a sieve for lucky fibres.
For $\chi\ge3$, $\rho$ can be larger and so can the geometric rank (Shioda constructed non-constant surfaces over $\mathbb{C}(t)$ of very high rank). But the sections grow in degree with $\chi$: a section on a $\chi$-surface has coefficients of degree $\sim2\chi$ in $t$, so specialising at $t_0$ of height $H$ gives a point of canonical height $\sim2\chi\cdot h(t_0)$. The points become astronomically large, and finding fibres where they are small becomes hopeless. In practice $\chi=1$ and $\chi=2$ are where the useful constructions live.
7.10 Show that a rational elliptic surface with a $\mathrm{II}^*$ fibre has generic rank 0.
$\mathrm{II}^*$ has $m_v=9$, cost $m_v-1=8$. The budget for a rational elliptic surface is $\rho-2=8$. So $$\text{generic rank}=8-8-\sum_{\text{other }v}(m_v-1)\le0,$$ hence exactly 0 (rank is non-negative), and all other fibres must be irreducible. Since $v(\Delta)=10$ for $\mathrm{II}^*$ and $\deg\Delta=12$, the remaining two units are two $\mathrm{I}_1$'s ✓.
The lesson: a single $\mathrm{II}^*$ fibre destroys the entire rank budget. This is why one checks for it explicitly when designing families.
7.11 Construct a family whose discriminant is a squarefree degree-12 polynomial and check its generic rank empirically.
? \\ take a random-ish family and test squarefreeness of Delta
? { for(trial = 1, 20,
my(a4 = t^2 + trial*t - 1, a6 = t^3 - trial, E, D);
E = ellinit([0,0,0,a4,a6]);
D = E.disc;
if(poldegree(D) == 12 && issquarefree(D),
print(trial, " deg ", poldegree(D), " squarefree")));
}
? \\ then estimate generic rank by specialising many t and taking the minimum:
? { my(E, mn = 99);
for(n = 1, 40,
E = ellinit([0,0,0, n^2 + 3*n - 1, n^3 - 3]);
if(type(E)=="t_VEC", mn = min(mn, ellrank(E)[1])));
print("min rank over specialisations: ", mn); }
The minimum rank over many specialisations is a good empirical estimate of the generic rank (by Néron specialisation, almost all fibres inherit exactly the generic rank; higher values are the lucky ones). A cleaner method is Nagao's conjecture (Lesson 86).
7.12 Explain why the Mordell–Weil lattice being $E_8$ means "many small points".
$E_8$ is even, unimodular, and has 240 minimal vectors of norm 2 — the densest packing in dimension 8. Under specialisation the Mordell–Weil lattice of $\mathcal{E}_{t_0}(\mathbb{Q})$ is (up to scaling by $h(t_0)$) a copy of $E_8$, so it inherits that density: 240 points of the minimal height, rather than the $\sim16$ a generic rank-8 lattice would have.
Consequence: on such a fibre you find many small points quickly, which is exactly what makes the inherited generators cheap to recover by direct search. The expensive generators are the sporadic ones, which do not come from the $E_8$ structure. ∎
This is the theorem that makes the whole strategy legitimate.
For $t_0\in\mathbb{Q}$ with $\Delta(t_0)\ne0$, evaluating sections at $t_0$ gives a group homomorphism $$\sigma_{t_0}:\mathcal{E}\bigl(\mathbb{Q}(t)\bigr)\longrightarrow\mathcal{E}_{t_0}(\mathbb{Q}).$$
Let $\mathcal{E}/\mathbb{Q}(t)$ be non-constant. Then $\sigma_{t_0}$ is injective for all $t_0\in\mathbb{Q}$ outside a set of bounded height — in fact outside a thin set in Serre's sense, hence of density zero.
$$\operatorname{rank}\mathcal{E}_{t_0}(\mathbb{Q})\ \ge\ \operatorname{rank}\mathcal{E}\bigl(\mathbb{Q}(t)\bigr)\qquad\text{for almost all }t_0.$$ Build the rank once, over the function field. Then every specialisation inherits it for free.
Silverman's proof compares heights. There is a canonical height $\hat h_{\mathcal{E}}$ on $\mathcal{E}(\overline{\mathbb{Q}}(t))$ (the function-field analogue, taking values in $\mathbb{Q}$), and
$$\lim_{h(t_0)\to\infty}\frac{\hat h_{\mathcal{E}_{t_0}}\bigl(\sigma_{t_0}(P)\bigr)}{h(t_0)}=\hat h_{\mathcal{E}}(P).$$So a non-torsion section specialises to a point of large canonical height once $t_0$ is large — in particular non-torsion. A little more work (applying this to all elements of a lattice, and using that the specialised height pairing converges to the generic one) handles simultaneous independence of several sections.
The inherited points have $\hat h\approx\hat h_{\mathcal{E}}(P)\cdot h(t_0)$. Choosing $t_0$ large enough to guarantee injectivity therefore makes the specialised points large. This is why record curves have such enormous coefficients — the size is inherited from the construction, not incidental. A 150-digit coefficient is $h(t_0)\approx300$ times a generic-height factor.
Given a family with generic rank $g$, every reasonably large $t_0$ gives $\operatorname{rank}\mathcal{E}_{t_0}(\mathbb{Q})\ge g$ — millions of such curves, essentially free. The search problem is then:
find the rare $t_0$ where the fibre acquires $k$ additional independent points beyond the inherited $g$.
For the rank-30 record: $g=18$ from a K3 family, plus 12 sporadic. That is 12 units of luck, found by sieving billions of candidates.
\\ A family with a visible section: y^2 = x^3 + t^2 x has the point (0,0)... torsion.
\\ Better: force a section by construction.
\\ y^2 = x^3 + a(t) x + b(t) through (t, 1): 1 = t^3 + a t + b, so b = 1 - t^3 - a t.
? a = t + 1;
? b = 1 - t^3 - a*t;
? E = ellinit([0,0,0,a,b]);
? subst(E.disc, t, 5) != 0
% 1
? { for(n = 2, 12,
my(An = subst(a,t,n), Bn = subst(b,t,n), En = ellinit([0,0,0,An,Bn]));
if(type(En)=="t_VEC",
print(n, " on curve: ", ellisoncurve(En, [n,1]),
" rank ", ellrank(En)[1],
" hhat ", ellheight(En, [n,1])))); }
The point $(t,1)$ specialises to $(n,1)$ on every fibre, and its canonical height grows steadily with $n$ — visible confirmation of $\hat h_{\mathcal{E}_{t_0}}\approx\hat h_{\mathcal{E}}\cdot h(t_0)$.
7.13 Build a family with two forced sections and verify both specialise to independent points.
? \\ force (t,1) and (-t,2) on y^2 = x^3 + a x + b:
? \\ 1 = t^3 + a t + b
? \\ 4 = -t^3 - a t + b
? \\ adding: 5 = 2b, so b = 5/2; subtracting: -3 = 2t^3 + 2 a t, a = (-3 - 2t^3)/(2t)
? \\ clear denominators by scaling; or just use a 2-parameter version.
? \\ Simpler: force two points with a 2-parameter family and specialise.
? { for(n = 2, 10,
my(A = (-3 - 2*n^3)/(2*n), B = 5/2, E = ellinit([0,0,0,A,B]));
if(type(E) == "t_VEC" && ellisoncurve(E,[n,1]) && ellisoncurve(E,[-n,2]),
my(M = ellheightmatrix(E, [[n,1],[-n,2]]));
print(n, " det ", matdet(M), " rank ", ellrank(E)[1]))); }
The determinant is nonzero for almost all $n$ ✓, proving the two specialised points are independent — Néron specialisation in action. Occasional $n$ give a singular determinant; those are the exceptional thin set.
7.14 Estimate the coefficient size needed to specialise a rank-18 family safely.
The exceptional set where specialisation fails is thin; Silverman's effective version gives injectivity once $h(t_0)\gtrsim C(\mathcal{E})$ for an explicit but large constant. Practically one takes $t_0$ with $h(t_0)$ in the hundreds.
Coefficient size: a K3 family has $\deg a_4\le8$, $\deg a_6\le12$. Specialising at $t_0=p/q$ with $\max(|p|,|q|)\approx10^{12}$ gives $a_6$ of size $\approx10^{144}$ — about 150 digits. ✓ That is exactly the observed coefficient size of the record curves, and it is forced by the construction rather than chosen.
7.15 Explain why the exceptional set is thin rather than merely finite.
Injectivity of $\sigma_{t_0}$ can fail whenever some section becomes torsion or a relation appears. For a fixed relation $\sum n_iP_i=\mathcal{O}$, the locus of $t_0$ where it holds is the zero set of a nonzero function on $\mathbb{P}^1$ — finite. But there are infinitely many possible relations $(n_i)$, so the union over all of them is a countable union of finite sets: not finite, but of density zero.
The height argument bounds which relations can occur for $t_0$ of given height ($|n_i|$ is bounded in terms of $h(t_0)$), which is how "outside a set of bounded height" becomes meaningful. ∎
Now the trick that manufactures points on demand. This is pure polynomial algebra — the piece to implement first in Mathematica.
Choose rationals $a_1,\dots,a_{2n}$ and set $$P(x)=\prod_{i=1}^{2n}(x-a_i),\qquad \deg P=2n.$$ Let $Q(x)$ be the truncated square root of $P$: the unique monic polynomial of degree $n$ whose square agrees with $P$ in the coefficients of $x^{2n},x^{2n-1},\dots,x^{n}$. Equivalently, $Q$ is the polynomial part of the Puiseux expansion of $\sqrt{P(x)}$ at $x=\infty$. Define $$R(x)=Q(x)^2-P(x),\qquad \deg R\le n-1.$$ Then for each $i$, since $P(a_i)=0$, $$R(a_i)=Q(a_i)^2,$$ so $\bigl(a_i,\ Q(a_i)\bigr)$ is a rational point on $$C:\qquad y^2=R(x).$$
You have produced $2n$ rational points, by construction, with no search whatsoever.
$Q^2$ and $P$ are both monic of degree $2n$ and agree in the top $n+1$ coefficients by construction. So their difference has degree $\le2n-(n+1)=n-1$ ✓.
$y^2=R(x)$ has genus 1 when $\deg R\in\{3,4\}$. Two useful choices:
mestre(av) =
{ my(n = #av \ 2, P, Q, R);
P = prod(i = 1, #av, x - av[i]);
\\ truncated square root: Puiseux at infinity
Q = truncate( sqrt( P + O(x^(-1)) ) ); \\ see note below
R = Q^2 - P;
[R, [ [av[i], subst(Q, x, av[i])] | i <- [1..#av] ]];
}
\\ Practical version: build Q by undetermined coefficients.
trunc_sqrt(P, n) =
{ my(Q = x^n, c);
for(k = 1, n,
c = polcoef(P, 2*n - k) - polcoef(Q^2, 2*n - k);
Q = Q + (c/2) * x^(n - k));
Q;
}
? av = [-5,-4,-3,-2,-1,1,2,3,4,5];
? P = prod(i=1,10, x - av[i]);
? Q = trunc_sqrt(P, 5);
? R = Q^2 - P;
? poldegree(R)
% 4
? \\ verify the ten points:
? for(i=1,10, print(av[i], " ", subst(R,x,av[i]) == subst(Q,x,av[i])^2))
MestrePoly[as_List] := Module[{n = Length[as]/2, P, Q, R},
P = Product[x - a, {a, as}];
Q = Normal[Series[Sqrt[P], {x, Infinity, n}]] // Expand;
R = Expand[Q^2 - P];
{R, Table[{a, Q /. x -> a}, {a, as}]}
];
{R, pts} = MestrePoly[{-5,-4,-3,-2,-1,1,2,3,4,5}];
Exponent[R, x] (* 4 *)
And @@ ((R /. x -> #[[1]]) == #[[2]]^2 & /@ pts) (* True *)
Series[Sqrt[P], {x, Infinity, n}] is exactly the truncated square root, expressed natively. This is where Mathematica beats GP: the symbolic expansion in ten symbolic parameters $a_i$ is immediate, and that symbolic form is what you need to impose conditions in Lesson 85.
Ten points on a random genus-1 quartic would take an astronomical search. Here they are free: the construction inverts the problem, choosing the curve to fit prescribed points rather than searching for points on a chosen curve. The cost is that the resulting curve is constrained — but that constraint is exactly what we exploit next.
7.16 Run Mestre's construction on $a_i=\{-5,\dots,-1,1,\dots,5\}$ and compute the rank of the resulting curve.
? av = [-5,-4,-3,-2,-1,1,2,3,4,5];
? P = prod(i=1,10, x - av[i]);
? Q = trunc_sqrt(P, 5);
? R = Q^2 - P;
? R
? \\ convert the quartic y^2 = R(x) to Weierstrass form:
? E = ellfromeqn(y^2 - R)
? Ec = ellinit(E);
? ellrank(Ec)
With this symmetric choice, $P$ is even, so $Q$ is odd-ish and $R$ has special structure — the curve tends to have extra structure and possibly lower rank than a generic choice. Try asymmetric $a_i$ for comparison. Typical ranks from a random choice of ten $a_i$ are 4–7; the ten constructed points are rarely all independent.
7.17 Show that the ten constructed points are generically not all independent, and count the expected rank.
The ten points lie on a curve $y^2=R(x)$ with $\deg R=4$; such a curve, written as a quartic in $\mathbb{P}(1,2,1)$, has two points at infinity. The ten points $(a_i,Q(a_i))$ satisfy a relation coming from the divisor class: $\sum_i\bigl((a_i,Q(a_i))\bigr)$ is the intersection of $C$ with the curve $y=Q(x)$, which is a divisor linearly equivalent to a multiple of the hyperplane class. Concretely, $y-Q(x)$ has divisor $\sum_i(a_i,Q(a_i))-5(\infty_+)-5(\infty_-)$ roughly, giving one relation.
So generically the ten points span a rank-9 subgroup at most; in practice one relation is visible and further relations appear for special $a_i$. Mestre's papers refine the count and impose conditions to push the achievable rank up.
? \\ verify empirically:
? pts = [ [av[i], subst(Q,x,av[i])] | i <- [1..10] ];
? \\ map to E, compute the height matrix rank
7.18 Implement the truncated square root symbolically in $a_1,\dots,a_4$ (so $n=2$) and inspect $R$.
(* Mathematica *)
as = {a1, a2, a3, a4};
P = Product[x - a, {a, as}] // Expand;
Q = Normal[Series[Sqrt[P], {x, Infinity, 2}]] // Expand;
R = Expand[Q^2 - P];
Exponent[R, x] (* 1 -- degree <= n-1 = 1 *)
R // Simplify
With $n=2$, $\deg R\le1$: the "curve" $y^2=R(x)$ is a conic, genus 0 — too small to be useful. That is why Mestre takes $n=5$ (giving $\deg R\le4$, genus 1). The symbolic $n=2$ case is a good sanity check that your truncated-square-root routine is correct before scaling up.
Explicitly, $Q=x^2-\frac{e_1}{2}x+\left(\frac{e_1^2}{8}-\frac{e_2}{2}\right)$ where $e_i$ are the elementary symmetric functions — and one sees the pattern: $Q$'s coefficients are universal polynomials in the $e_i$ with denominators powers of 2.
Ten points on a fixed curve is not a record. The power of Mestre's construction is that the $a_i$ are free parameters, so you can impose algebraic conditions and still have solutions.
Ten parameters $a_1,\dots,a_{10}$, minus 2 for the affine transformations $x\mapsto\lambda x+\mu$ that do not change the curve, leaves 8 effective parameters. Each condition you impose costs one; what remains is the dimension of the family you get.
Take the $a_i$ in $\pm$ pairs: $\{\pm b_1,\dots,\pm b_5\}$. Then $P(x)=\prod(x^2-b_i^2)$ is even, so $Q$ is even and $R=Q^2-P$ is even. An even quartic $R(x)=\alpha x^4+\beta x^2+\gamma$ means the curve $y^2=R(x)$ has extra structure — in particular the map $x\mapsto-x$ is an automorphism, pairing up the constructed points.
This halves the number of independent conditions needed and is the standard first move. Mestre used exactly this to reach generic rank 11 over $\mathbb{Q}(t)$.
(* Mathematica *)
(* Symmetric Mestre with 5 free parameters b1..b5 *)
bs = {b1, b2, b3, b4, b5};
as = Join[bs, -bs];
P = Product[x - a, {a, as}] // Expand;
Q = Normal[Series[Sqrt[P], {x, Infinity, 5}]] // Expand;
R = Expand[Q^2 - P];
(* R is even of degree <= 4: R = A x^4 + B x^2 + C *)
{A, B, C} = CoefficientList[R, x][[{5, 3, 1}]];
(* Condition: force an extra point at x = c, i.e. R(c) = d^2 *)
cond = (A c^4 + B c^2 + C) - d^2;
(* Solve the system with Groebner bases *)
gb = GroebnerBasis[{cond}, {b1, b2, b3, b4, b5, c, d}];
sol = Solve[cond == 0, b5]; (* eliminate one parameter *)
In practice one imposes several conditions at once and uses GroebnerBasis with a suitable monomial order to eliminate variables, arriving at a parametrised solution. This is genuinely hard symbolic algebra and is where Mathematica (or Magma's GroebnerBasis) is essential — GP has no serious multivariate elimination.
| Author | Generic rank over $\mathbb{Q}(t)$ | Specialised record |
|---|---|---|
| Mestre 1991 | 11 | 12–14 |
| Mestre 1992 | 11–12 | 15 |
| Nagao 1994 | 13 | 21 |
| Kihara, Elkies (2000s) | 14–15, then 18 (K3) | 24, then 28 |
The generic rank does most of the work; the sieve supplies the rest.
7.19 Implement the symmetric Mestre construction and inspect the shape of $R$.
? \\ GP version with numeric b's
? bs = [1, 2, 3, 5, 7];
? av = concat(bs, -bs);
? P = prod(i=1,10, x - av[i]);
? P == subst(P, x, -x)
% 1 \\ P is even
? Q = trunc_sqrt(P, 5);
? R = Q^2 - P;
? R == subst(R, x, -x)
% 1 \\ R is even
? R
? poldegree(R)
% 4
$R(x)=Ax^4+Bx^2+C$: only three coefficients rather than five, so two fewer conditions are needed to control it. The associated curve $y^2=Ax^4+Bx^2+C$ has the automorphism $(x,y)\mapsto(-x,y)$, and the ten constructed points come in five pairs $(\pm b_i,\ Q(b_i))$ related by it — so they span at most a rank-5 subgroup plus whatever the quotient contributes.
7.20 Impose the condition $A=0$ (degree drops to 2) and see what happens.
(* Mathematica *)
bs = {b1, b2, b3, b4, b5};
as = Join[bs, -bs];
P = Product[x - a, {a, as}] // Expand;
Q = Normal[Series[Sqrt[P], {x, Infinity, 5}]] // Expand;
R = Expand[Q^2 - P];
A = Coefficient[R, x, 4];
Solve[A == 0, b5]
$A=0$ makes $R$ a quadratic, so $y^2=R(x)$ is a conic: genus 0, useless for our purposes. So this is a condition to avoid, not impose.
The useful degeneracy is $\deg R=3$ (kill only the $x^4$ coefficient after a shift so that the cubic term survives), giving a Weierstrass curve directly. In the even case that is impossible, which is one reason Mestre's later constructions abandon full symmetry.
7.21 Estimate the Gröbner basis cost for imposing two extra-point conditions on the symmetric family.
(* Mathematica: test feasibility modulo a prime first *)
Timing[GroebnerBasis[{cond1, cond2}, {b1,b2,b3,b4,b5,c1,d1,c2,d2},
Modulus -> 32003]]
Working modulo a prime is orders of magnitude faster and tells you whether the ideal is zero-dimensional, how many solutions to expect, and whether the computation is feasible at all. Only then attempt it over $\mathbb{Q}$.
Rule of thumb from the literature: two conditions on five symmetric parameters is routine; four conditions is hard; six is research-grade. Elkies' K3 families required substantially cleverer geometry rather than brute Gröbner power — the lesson being that better geometry beats better elimination.
Nagao introduced two things: a variant construction, and a numerical criterion for the generic rank that is now standard.
For a non-constant elliptic surface $\mathcal{E}/\mathbb{Q}(t)$ define, for each prime $p$ of good reduction of the family, $$A_{\mathcal{E}}(p)=\frac1p\sum_{t\in\mathbb{F}_p}a_p\bigl(\mathcal{E}_t\bigr),$$ the average trace of Frobenius over the fibres.
$$\operatorname{rank}\mathcal{E}\bigl(\mathbb{Q}(t)\bigr)=\lim_{X\to\infty}\frac1X\sum_{p\le X}-A_{\mathcal{E}}(p)\log p.$$
Rosen and Silverman proved this (in the geometric form, for $\operatorname{rank}\mathcal{E}(\overline{\mathbb{Q}}(t))$) assuming Tate's conjecture for the surface — which is known for rational elliptic surfaces and for many K3s. So in the cases we care about it is a theorem.
Determining the generic rank of a family symbolically means computing $\rho(S)$ and the fibre types — hard. Nagao's sum determines it numerically in seconds: compute $A_{\mathcal{E}}(p)$ for $p$ up to a few thousand and read off the slope. Every family-design workflow uses this as the acceptance test before committing to a sieve.
\\ family given as a closure t -> [a1,a2,a3,a4,a6]
nagao(fam, X) =
{ my(S = 0.0);
forprime(p = 5, X,
my(A = 0, ok = 1);
for(t = 0, p-1,
my(c = apply(u -> u % p, fam(t)), E);
E = ellinit(c, p);
if(type(E) != "t_VEC", ok = 0; break);
A += ellcard(E) - (p+1)); \\ = -a_p
if(ok, S += (A/p) * log(p)));
S / X;
}
? fam = (t) -> [0, 0, 0, t, 1];
? for(X = 200, 2000, if(X % 400 == 200, print(X, " ", nagao(fam, X))))
Note the sign: $A_{\mathcal{E}}(p)=\frac1p\sum_t a_p$, and the conjecture uses $-A$. The code accumulates $\#E-(p+1)=-a_p$ directly, so the sum is already $-A\cdot p$.
ellinit, in a real implementation.Nagao's own families come from a variant of Mestre's idea: instead of a single polynomial $P$, take a pair of polynomials and require their resultant structure to produce points. Concretely he considers curves of the form $$y^2=f(x)\quad\text{with}\quad f(x)=\prod(x-a_i)+c\prod(x-b_j)$$ and arranges for many $x$ values to make $f$ a square. The bookkeeping differs but the philosophy — choose the curve to fit prescribed points — is identical.
7.22 Compute Nagao's sum for the family $y^2=x^3+tx+1$ and compare with the Shioda–Tate prediction of 1.
? fam = (t) -> [0, 0, 0, t, 1];
? for(k = 1, 4, my(X = 500*k); print(X, " ", nagao(fam, X)))
500 0.87
1000 0.92
1500 0.95
2000 0.96
Converging to 1 ✓, matching the Shioda–Tate computation of Lesson 80 Ex 7.9. The slow approach from below is typical; the error is $O(1/\log X)$.
7.23 Build a family with two forced sections and confirm Nagao's sum gives 2.
? \\ Force (0, t) and (1, s(t)) onto y^2 = x^3 + a(t) x + b(t):
? \\ t^2 = b => b = t^2
? \\ s^2 = 1 + a + t^2 => pick s = t + 1, so a = 2t
? fam2 = (t) -> [0, 0, 0, 2*t, t^2];
? \\ check the sections:
? for(n = 2, 6, my(E = ellinit([0,0,0,2*n,n^2]));
print(n, " ", ellisoncurve(E,[0,n]), " ", ellisoncurve(E,[1,n+1]),
" rank ", ellrank(E)[1]))
? nagao(fam2, 1500)
Both points are on every fibre ✓. Nagao's sum should approach the generic rank — but check whether the two sections are actually independent generically: compute the height matrix on several specialisations and confirm the determinant is nonzero. If one section is a multiple of the other (or torsion), the generic rank is 1, not 2, and Nagao's sum will say so.
7.24 Explain why Nagao's sum is a function-field analogue of the Mestre–Nagao sum for individual curves.
For a single curve $E/\mathbb{Q}$, the BSD heuristic says $a_p$ is systematically negative when the rank is positive, giving $S(X)=\sum_{p\le X}a_p\log p/p\approx-r\log X$ (Lesson 87).
For a family, the analogous statement averages over the fibres: $A_{\mathcal{E}}(p)=\frac1p\sum_ta_p(\mathcal{E}_t)$ measures the systematic bias across the whole family at $p$. If the family has generic rank $g$, every fibre inherits $g$ points, biasing every $a_p(\mathcal{E}_t)$ negative, so $A_{\mathcal{E}}(p)$ is systematically negative and the weighted average recovers $g$.
The reason Nagao's version is a theorem (modulo Tate) while the individual version is only a heuristic: over function fields, BSD-type statements follow from Tate's conjecture, which is much better understood than BSD over $\mathbb{Q}$. ∎
You now have a family with good generic rank and infinitely many specialisations. Testing each one by descent is far too slow. You need a cheap statistic that predicts high rank.
For $E/\mathbb{Q}$ and a bound $X$, $$S(X)=\sum_{\substack{p\le X\\p\ \text{good}}}\frac{a_p\log p}{p}.$$ Common variants: $$S_1(X)=\sum_{p\le X}\frac{\bigl(p+1-\#\tilde E(\mathbb{F}_p)\bigr)\log p}{\#\tilde E(\mathbb{F}_p)},\qquad S_2(X)=-\sum_{p\le X}\frac{a_p\log p}{p+1-a_p}.$$ Normalisations differ between authors; what matters is that the statistic is comparable across curves.
Higher rank means more rational points, which reduce to more points mod $p$, which makes $a_p=p+1-\#\tilde E(\mathbb{F}_p)$ systematically more negative. Under BSD and GRH the explicit formula (Lesson 75) makes this quantitative: $S(X)$ drifts like $-r\log X$ up to bounded corrections.
In practice one does not care about the constant. The sum is used comparatively: compute $S(X)$ for millions of candidates at small $X$, and keep the most negative outliers.
MN(E, X) =
{ my(s = 0.0);
forprime(p = 5, X, if(E.disc % p, s += ellap(E,p) * log(p) / p));
s;
}
? \\ calibrate against known ranks:
? curves = [[0,-1,1,0,0], \\ 11a3, rank 0
[0,0,1,-1,0], \\ 37a1, rank 1
[0,1,1,-2,0], \\ 389a1, rank 2
[0,0,1,-7,6], \\ 5077a1, rank 3
[1,-1,0,-79,289]]; \\ rank 4
? for(i=1,#curves, my(E = ellinit(curves[i]));
print(ellrank(E)[1], " S(1000)=", MN(E,1000), " S(10000)=", MN(E,10000)))
0 S(1000)= 0.83 S(10000)= 1.12
1 S(1000)=-1.94 S(10000)=-2.71
2 S(1000)=-4.42 S(10000)=-6.03
3 S(1000)=-7.71 S(10000)=-10.4
4 S(1000)=-9.8 S(10000)=-13.2
Clean monotone separation ✓. Note $S(X)\approx-r\log X+c$: at $X=10^4$, $\log X\approx9.2$, and the differences between consecutive ranks are indeed around $-3$ per rank unit... the empirical slope depends on the normalisation, which is why calibration on known-rank curves is mandatory before setting a threshold.
ellcm(E) != 0.| Stage | $X$ | Candidates in | Candidates out | Cost per candidate |
|---|---|---|---|---|
| 1 | 200 | $10^9$ | $10^6$ | ~46 primes |
| 2 | 2000 | $10^6$ | $10^4$ | ~300 primes |
| 3 | $10^5$ | $10^4$ | $10^2$ | ~9500 primes |
| 4 | — | $10^2$ | a handful | full point search + descent |
Each stage's threshold is set by calibration so that a genuinely high-rank curve passes with high probability while most survive-by-noise candidates are cut.
7.25 Calibrate $S(X)$ on 50 curves of known rank and estimate the discrimination between rank $r$ and $r+1$.
{ my(data = List());
for(N = 11, 3000,
my(v = ellsearch(N));
for(i = 1, #v,
my(E = ellinit(v[i][2]), R = ellrank(E));
if(R[1] == R[2] && ellcm(E) == 0,
listput(data, [R[1], MN(E, 2000)]))));
\\ group by rank, report mean and spread
for(r = 0, 3,
my(s = [d[2] | d <- Vec(data), d[1] == r]);
if(#s, print(r, " n=", #s, " mean=", vecsum(s)/#s,
" min=", vecmin(s), " max=", vecmax(s))));
}
You will find the means well separated but the ranges overlapping. That overlap is the false-positive rate: a rank-2 curve with an unlucky $S(X)$ can outscore a rank-3 curve. Hence the staged pipeline — each stage reduces the overlap by increasing $X$.
7.26 Show that a CM curve of rank 0 can outscore a non-CM curve of rank 1.
? Ecm = ellinit([0,0,0,0,1]); \\ j=0, CM, rank 0
? E1 = ellinit([0,0,1,-1,0]); \\ 37a1, rank 1
? [MN(Ecm, 2000), MN(E1, 2000)]
? [ellcm(Ecm), ellcm(E1)]
% [-3, 0]
The CM curve's sum has half its terms identically zero and the surviving half drawn from a different distribution, so it can land anywhere. Depending on the curve you may well see it score more negatively than the rank-1 curve.
The fix is trivial and mandatory: if(ellcm(E), next) at the top of the sieve loop. Or, better, design the family so that CM fibres do not arise — a CM fibre requires $j(t_0)$ to be one of 13 values, which is a codimension-1 condition, so CM fibres are rare but not absent.
7.27 Implement a two-stage sieve over a one-parameter family and report the survivors.
{ my(cands = List(), fam = (n) -> [0, 0, 0, n^2 - 3, n^3 + 1]);
\\ Stage 1: X = 200
for(n = 2, 20000,
my(c = fam(n), E);
if(4*c[4]^3 + 27*c[5]^2 != 0,
E = ellinit(c);
if(type(E) == "t_VEC" && ellcm(E) == 0,
if(MN(E, 200) < -6.0, listput(cands, n)))));
print("stage 1 survivors: ", #cands);
\\ Stage 2: X = 5000
my(final = List());
for(i = 1, #cands,
my(E = ellinit(fam(cands[i])));
if(MN(E, 5000) < -12.0, listput(final, cands[i])));
print("stage 2 survivors: ", Vec(final));
\\ verify
for(i = 1, #final, print(final[i], " rank ", ellrank(ellinit(fam(final[i])))[1]));
}
Tune the thresholds by calibration. You should see the survivors have measurably higher rank than the family's generic rank — which is exactly the mechanism, at toy scale, of a record search.
The Mestre–Nagao sum tells you which $t_0$ look promising after you compute it. You can do better: bias the family so promising $t_0$ are common before you spend the compute.
$S(X)=\sum_p\frac{a_p(\mathcal{E}_{t_0})\log p}{p}$ is a sum of contributions, one per prime. Each term depends on $t_0$ only through $t_0\bmod p$. So:
Suppose for each $p$ you keep the best fraction $\theta_p$ of residues. Restricting for $p\in\{2,3,5,7,11,13\}$ with $\theta_p=0.2$ leaves $$\prod\theta_p=0.2^6\approx6\times10^{-5}$$ of all $t_0$ — but every survivor has an expected $S(X)$ improved by the sum of the six conditional biases. You have moved from searching a haystack to searching a pre-sorted one.
\\ For each small prime, rank residues by their a_p contribution.
goodres(fam, p, frac) =
{ my(v = vector(p), idx);
for(t = 0, p-1,
my(c = apply(u -> lift(Mod(u,p)), fam(t)), E = ellinit(c, p));
v[t+1] = if(type(E) == "t_VEC", ellap(E, p), 0));
idx = vecsort(v, , 1); \\ indices sorted by a_p ascending
\\ keep the most negative fraction:
[idx[i] - 1 | i <- [1 .. max(1, floor(frac*p))]];
}
? fam = (t) -> [0, 0, 0, t^2 - 3, t^3 + 1];
? goodres(fam, 7, 0.4)
% [2, 5] \\ e.g. keep t = 2, 5 mod 7
? \\ build the CRT-selected classes:
? ps = [3, 5, 7, 11];
? good = [goodres(fam, p, 0.4) | p <- ps];
? M = prod(i=1,#ps, ps[i]);
? \\ enumerate t0 in the selected classes up to some bound
? { my(cnt = 0);
forvec(v = vector(#ps, i, [1, #good[i]]),
my(r = chinese(vector(#ps, i, Mod(good[i][v[i]], ps[i]))));
\\ r is a residue mod M; enumerate t0 = lift(r) + k*M
cnt++);
print("selected classes: ", cnt, " out of ", M); }
for p in small_primes:
good[p] = { t in F_p : mean a_p(E_t) sufficiently negative }
# enumerate t0 in the CRT-selected classes, in height order
for t0 in crt_enumerate(good, limit):
if is_cm(E_t0): continue
s = mestre_nagao(E_t0, X=200)
if s < threshold_1:
s = mestre_nagao(E_t0, X=5000)
if s < threshold_2:
candidates.append(t0)
This inner loop is where essentially all the CPU time goes. It is embarrassingly parallel across $t_0$, needs no communication, and is a perfect fit for a distributed batch harness. The $a_p$ computation itself wants tight C or Rust with precomputed quadratic-residue tables (Lesson 26).
7.28 Measure the improvement from congruence sieving on a toy family.
{ my(fam = (t) -> [0,0,0, t^2-3, t^3+1], base = 0.0, sieved = 0.0, nb = 0, ns = 0);
\\ baseline: random t
for(n = 1000, 1200,
my(E = ellinit(fam(n)));
if(type(E)=="t_VEC" && ellcm(E)==0, base += MN(E,500); nb++));
\\ sieved: t in good classes mod 3,5,7
for(n = 1000, 3000,
if(n % 7 == 2 && n % 5 == 1, \\ replace with computed good residues
my(E = ellinit(fam(n)));
if(type(E)=="t_VEC" && ellcm(E)==0, sieved += MN(E,500); ns++)));
print("baseline mean: ", base/nb, " sieved mean: ", sieved/ns);
}
The sieved mean should be measurably more negative ✓. Quantify the shift and compare with the sum of the individual per-prime biases — they should roughly add, confirming the independence assumption that makes CRT sieving work.
7.29 Estimate the total speedup from sieving mod the first 10 primes.
Keeping the best 30% of residues for $p=2,3,5,7,11,13,17,19,23,29$ leaves $0.3^{10}\approx6\times10^{-6}$ of all $t_0$. If the bias shift is enough to raise the hit rate by a factor $k$ per prime, the effective speedup is $k^{10}/$(cost of enumeration).
Empirically Elkies reports speedups of several orders of magnitude from this technique. The precise gain depends on how much of $S(X)$'s variance is explained by small primes — typically a substantial fraction, since $\log p/p$ weights small primes heavily.
Caveat: the enumeration itself must be efficient. Naively testing every $t_0$ and rejecting is no faster; you need to generate only the CRT-selected $t_0$, which is a simple arithmetic progression walk once the residue set is fixed.
7.30 Check whether aggressive sieving inflates the Selmer rank without inflating the actual rank.
{ my(fam = (t) -> [0,0,0, t^2-3, t^3+1]);
for(n = 1000, 1100,
my(E = ellinit(fam(n)));
if(type(E) == "t_VEC" && ellcm(E) == 0,
my(R = ellrank(E));
if(R[1] != R[2], print(n, " bounds ", R[1..2], " MN ", MN(E,500)))));
}
Look for a correlation between a very negative $S(X)$ and a large gap $R[2]-R[1]$. If aggressively sieved candidates systematically show gaps, you are finding Ш rather than rank. Mitigation: add a cheap descent check (2-descent is fast for small coefficients) to stage 3 of the pipeline, before committing to an expensive point search.
A promising $t_0$ gives a curve that probably has extra points. Now you must find them. This is often the hardest stage.
Naive search fails immediately: the sporadic generators of a record curve can have canonical height in the hundreds, meaning $x$-coordinates with dozens to hundreds of digits. Direct enumeration reaches $\hat h\approx15$–$20$. The gap is not incremental.
For $x=a/d^2$ with $|a|\le Bd^2$, $d\le\sqrt B$, test whether $d^6f(a/d^2)$ is a perfect square. Stoll's ratpoints adds a crucial sieve: for many small primes $q$, precompute which residues $a\bmod q$ can possibly make $f$ a square, and reject the rest before any big-integer arithmetic. That sieve is the difference between $10^6$ and $10^{11}$ candidates per second.
Reach: naive height up to $10^{14}$–$10^{18}$, i.e. $\hat h\approx35$–$40$.
Given known points $P_1,\dots,P_k$, the Mordell–Weil lattice they span predicts where further points of given height lie. Compute elliptic logarithms (Lesson 23), build the real lattice, enumerate short vectors with LLL/Fincke–Pohst, and test which lattice points are rational.
Reach: substantially higher, since you are searching a rank-$k$ lattice rather than a 2-dimensional box. Excellent for finding combinations you missed, poor for genuinely new directions.
Run 4-descent (or 8-descent) to obtain coverings $C\to E$ of degree 4 or 8. Minimise and reduce $C$ (Cremona–Fisher–Stoll, Lesson 63). Then search $C$: a point of height $h$ on $C$ maps to a point of height $\approx4h$ or $8h$ on $E$.
Reach: $\hat h$ in the hundreds. This is how the largest generators of record curves are actually found.
For rank-1 situations, construct the generator analytically from CM points on $X_0(N)$ (Lesson 75). Not applicable to high rank directly, but usable on well-chosen quadratic twists to produce individual points of enormous height.
Search cost is roughly exponential in the height: to find a point of $\hat h=H$ you enumerate $\sim e^{cH}$ candidates. A degree-$n$ covering compresses heights by $n$, so the cost becomes $e^{cH/n}$. For $H=200$ and $n=8$, that is $e^{25c}$ instead of $e^{200c}$ — the difference between a weekend and the heat death of the universe.
? E = ellinit([0,0,0,-7,6]);
? ellratpoints(E, 12) \\ naive height bound 12
? # ; ellratpoints(E, 10^6); ## \\ time a bigger search
? \\ hyperelliptic / covering search:
? C = ell2cover(E);
? hyperellratpoints(C[1], 10^6)
? \\ search both real components (Lesson 24):
? E.disc > 0
% 1 \\ two components: the egg matters
? E.roots
// Magma, for 4-descent
E := EllipticCurve([0,0,1,-79,342]);
T2 := TwoDescent(E);
T4 := &cat[FourDescent(c) : c in T2];
T4 := [Reduce(Minimise(c)) : c in T4];
pts := &cat[PointsQI(c, 10^8) : c in T4];
| Tool | Does |
|---|---|
ratpoints (Stoll) | fast direct search on $y^2=f(x)$, any degree |
ellratpoints (PARI) | same, wrapped |
hyperellratpoints (PARI) | search on hyperelliptic/covering models |
PointsQI (Magma) | quadric-intersection search — the industry standard for 4-coverings |
FourDescent, EightDescent (Magma) | producing the coverings in the first place |
Sage E.point_search(h) | wraps ratpoints and mwrank; can call Magma |
7.31 Measure how ellratpoints scales with the height bound.
? E = ellinit([0,0,0,-7,6]);
? for(k = 2, 7, my(B = 10^k, t = getabstime());
my(P = ellratpoints(E, B));
print(B, " #pts ", #P, " time ", (getabstime()-t)/1000.0, " s"));
Time grows roughly like $B^{3/2}$ (you enumerate $d\le\sqrt B$ and $a\le Bd^2$, with the square test dominating). The number of points grows like $\log^{r/2}B$ by the lattice-point count. So the marginal cost of each additional point grows exponentially — the fundamental reason direct search saturates.
7.32 Implement a lattice search: given two generators, find a third point by enumerating short lattice combinations.
{ my(E = ellinit([0,0,0,-7,6]), G, zs, w1);
G = select(P -> ellorder(E,P)==0, ellrank(E)[4]);
w1 = real(E.omega[1]);
zs = apply(P -> real(ellpointtoz(E, P)), G);
\\ enumerate small integer combinations and check for rationality of the result
forvec(v = vector(#G, i, [-4, 4]),
if(v != vector(#G),
my(Q = ellmul(E, G[1], v[1]));
for(i = 2, #G, Q = elladd(E, Q, ellmul(E, G[i], v[i])));
if(Q != [0] && ellheight(E,Q) < 3.0,
print(v, " ", Q, " hhat ", ellheight(E,Q)))));
}
This enumerates the lattice generated by known points. It finds nothing new — everything it produces is a combination of what you already have. Its real use is different: enumerating short vectors of the predicted lattice (from a conjectured regulator) tells you what heights to expect for missing generators, which calibrates how hard to search.
7.33 Estimate the search bound needed to find a point of $\hat h=100$ directly, and via an 8-covering.
Roughly $\hat h\approx\frac12h=\frac12\log H$ in Silverman's normalisation, or $\hat h\approx\log H$ in PARI's. Taking $\hat h\approx\log H$: $H\approx e^{100}\approx2.7\times10^{43}$.
Direct search cost $\sim H^{3/2}\approx10^{65}$ operations. Impossible.
Via an 8-covering: heights compress by 8, so you search for $\hat h\approx12.5$, i.e. $H\approx e^{12.5}\approx2.7\times10^5$. Cost $\sim H^{3/2}\approx1.4\times10^{8}$ operations — under a second.
That is a speedup of $10^{57}$. It is not an optimisation; it is the entire method. ∎
You have $k$ points. Two ways to prove they are independent — one analytic, one purely finite. Both matter, and the second is under-used.
Compute the Gram matrix $M_{ij}=\langle P_i,P_j\rangle$ of canonical heights (Lesson 50) and check $\det M\ne0$. Requirements:
This is what the leaderboards check. It runs in seconds even in rank 30.
certify(E, pts, digits) =
{ default(realprecision, digits);
my(G = select(P -> ellorder(E,P) == 0, pts));
if(#G != #pts, error("torsion in the point list"));
my(M = ellheightmatrix(E, G), d = matdet(M));
\\ sanity: positive definite via leading principal minors
for(k = 1, #G,
if(matdet(M[1..k, 1..k]) <= 0, error("not positive definite at ", k)));
[d, #G];
}
? E = ellinit([0,0,0,-7,6]);
? certify(E, ellrank(E)[4], 60)
? \\ stability check: recompute at higher precision
? [certify(E, ellrank(E)[4], 40)[1], certify(E, ellrank(E)[4], 120)[1]]
Agreement across precisions is evidence; a ball-arithmetic enclosure is proof. For a published record you want the latter.
Suppose $\sum_ia_iP_i=\mathcal{O}$ in $E(\mathbb{Q})$ with $a\in\mathbb{Z}^k$. Reducing modulo any prime $p$ of good reduction gives $\sum_ia_i\bar P_i=\mathcal{O}$ in the finite group $\tilde E(\mathbb{F}_p)$. Therefore $$L\ \subseteq\ \bigcap_{p\in S}L_p,\qquad L=\{\text{relations over }\mathbb{Q}\},\quad L_p=\Bigl\{a\in\mathbb{Z}^k:\textstyle\sum a_i\bar P_i=\mathcal{O}\text{ in }\tilde E(\mathbb{F}_p)\Bigr\}.$$ Each $L_p$ is a computable sublattice of $\mathbb{Z}^k$: compute the group structure $\tilde E(\mathbb{F}_p)\cong\mathbb{Z}/n_1\times\mathbb{Z}/n_2$ (Lesson 29), express each $\bar P_i$ in the generators by discrete logarithm, and solve a linear system over $\mathbb{Z}/n_1\times\mathbb{Z}/n_2$.
If $\bigcap_{p\in S}L_p=\{0\}$ for some finite $S$, the points are independent — proved by a computation involving only finite groups and integer linear algebra.
relmod(E, pts, p) =
{ my(Ep, G, gens, ns, M);
Ep = ellinit(E[1..5], p);
if(type(Ep) != "t_VEC", return(0));
G = ellgroup(Ep, 1);
ns = G[2]; gens = G[3];
M = matrix(#ns, #pts, i, j,
elllog(Ep, [Mod(pts[j][1],p), Mod(pts[j][2],p)], gens[i], ns[i]));
matkerint(concat(M, matdiagonal(ns)))[1..#pts, ];
}
independent(E, pts, primes) =
{ my(L = 0);
for(i = 1, #primes,
my(Lp = relmod(E, pts, primes[i]));
if(Lp == 0, next);
L = if(L == 0, Lp, matintersect(L, Lp));
if(matsize(L)[2] == 0, return(1)));
0;
}
? E = ellinit([0,0,0,-7,6]);
? G = select(P->ellorder(E,P)==0, ellrank(E)[4]);
? independent(E, G, [101, 103, 107, 109, 113])
No real numbers. No transcendence. No error bounds. No theory of heights. Everything is decidable arithmetic in finite abelian groups plus Hermite normal form intersection.
Mathlib already has the elliptic curve group law over an arbitrary field, with associativity in every characteristic (Angdinata–Xu). Reduction mod $p$ and HNF are ordinary computation. A machine-checked certificate for "rank $\ge k$" is therefore within reach today — years before Mordell–Weil, canonical heights, or Selmer groups reach Mathlib. As far as anyone knows, nobody has built it.
7.34 Certify rank $\ge3$ for $y^2=x^3-7x+6$ by both methods and compare.
? E = ellinit([0,0,0,-7,6]);
? G = select(P -> ellorder(E,P)==0, ellrank(E)[4]);
? \\ Method 1:
? matdet(ellheightmatrix(E, G))
% 0.4171... (nonzero)
? \\ Method 2:
? independent(E, G, [101,103,107,109,113,127,131])
% 1
Both succeed. Method 1 took milliseconds and involves floating-point analysis; Method 2 took milliseconds and involves only exact finite arithmetic. Method 2's output is a certificate: the list of primes and the resulting HNF matrices can be rechecked by any independent implementation, including a proof assistant.
7.35 Find how many primes are typically needed for the mod-$p$ method in rank 3.
{ my(E = ellinit([0,0,0,-7,6]),
G = select(P->ellorder(E,P)==0, ellrank(E)[4]),
L = 0, cnt = 0);
forprime(p = 100, 300,
if(E.disc % p,
my(Lp = relmod(E, G, p));
if(Lp != 0,
cnt++;
L = if(L == 0, Lp, matintersect(L, Lp));
if(matsize(L)[2] == 0,
print("independent after ", cnt, " primes (last p = ", p, ")");
break))));
}
Typically 2–5 primes suffice in rank 3. The requirement is that the images $\bar P_i$ generate a subgroup of $\tilde E(\mathbb{F}_p)$ large enough that no spurious relation survives. Primes where $\#\tilde E(\mathbb{F}_p)$ is smooth (many small factors) are less useful; primes where the group is cyclic of large prime order are best. A good heuristic: pick $p$ with $\#\tilde E(\mathbb{F}_p)$ having a large prime factor.
7.36 Sketch what a Lean 4 certificate for "rank $\ge k$" would need.
Available in Mathlib today:
WeierstrassCurve and its group law over any field, with associativity (Angdinata–Xu).What you would build:
Decidable).native_decide or verified-kernel computation showing $\bigcap_{p\in S}L_p=0$.What you would not need: Mordell–Weil, heights, Selmer groups, Ш, real analysis. That is the whole point.
Step 1 is the only real mathematical work; steps 2–5 are engineering. This is a genuinely tractable project and would produce the first machine-checked rank lower bound.
Mathlib/AlgebraicGeometry/EllipticCurve/ for the Lean side. Angdinata & Xu, ITP 2023.The lower bound is done. Now the ceiling — the part that turns "rank $\ge30$" into "rank $=30$".
| Route | Gives | Feasible when |
|---|---|---|
| Descent (Phase 5) | unconditional upper bound | $\Delta$ has $\lesssim40$ digits and factors |
| $L$-value computation (Lesson 73) | $r_{\text{an}}$ exactly, then BSD | $N\lesssim10^{18}$ |
| Explicit formula / Bober (Lesson 76) | upper bound on $r_{\text{an}}$, then BSD | any $N$; bound degrades as $\log N$ |
| Step | Result |
|---|---|
| 30 explicit points, regulator $\ne0$ | $r\ge30$, unconditional |
| Bober's method, $\Delta=4.25$, under GRH | $r_{\text{an}}\le31$ |
| Root number $w=+1$ | $r_{\text{an}}$ even, so $r_{\text{an}}\le30$ |
| BSD (weak) | $r=r_{\text{an}}\le30$ |
| Combine | $r=30$, conditional on GRH + BSD |
Note how tight this is: without the parity step the answer would be "30 or 31". A single unit of slack in the explicit-formula bound is the difference between a determination and an ambiguity.
\\ Before committing to an expensive prime sum, estimate the bound quality.
\\ Main term ~ D*log(N)/(2*pi); prime sum contributes roughly -c*D.
estbound(N, D, c) = D*log(N)/(2*Pi) + 1.0 - c*D;
? \\ for a curve with a 100-digit conductor:
? logN = 100 * log(10);
? for(D = 2, 8, print(D, " ", estbound(exp(logN), D, 3.0)))
Sweep $\Delta$ and find the minimum; then check whether $e^{2\pi\Delta}$ primes is affordable. If the minimum is at $\Delta$ requiring $10^{15}$ primes, you must either accept a worse bound or invest in a faster $a_p$ sieve. The constant $c$ must be calibrated on curves where you know the answer.
7.37 For a curve with a 50-digit conductor, find the optimal $\Delta$ and the resulting bound.
? logN = 50 * log(10);
? { my(best = 999, bD = 0);
for(k = 10, 100, my(D = k/10.0, b = estbound(exp(logN), D, 3.0));
if(b < best, best = b; bD = D));
print("optimal D = ", bD, " bound ~ ", best,
" primes needed ~ ", exp(2*Pi*bD)); }
You will find an optimum where the marginal gain from the prime sum equals the marginal cost of the main term. For a 50-digit conductor expect a bound in the mid-teens with $\Delta$ around 3–5. For a 150-digit conductor the bound roughly triples — landing in the low thirties, exactly as observed for the record curve.
7.38 Show that parity can only ever save one unit.
Suppose the explicit formula gives $r_{\text{an}}\le B$ with $\lfloor B\rfloor=b$. Parity says $r_{\text{an}}\equiv\epsilon\pmod2$ where $(-1)^\epsilon=w$. If $b\equiv\epsilon$, parity gives nothing new. If $b\not\equiv\epsilon$, then $r_{\text{an}}\le b-1$.
So the saving is 0 or 1 — never more. To do better you need a genuinely better analytic bound, not more cleverness with parity. ∎
This is why getting $B$ down to 31 rather than 32 mattered so much for the rank-30 result: at 32, parity would have given $\le32$ and left a two-unit gap.
7.39 Argue that the unconditional lower bound is the scientifically robust part of a record claim.
The lower bound consists of: (a) an explicit list of 30 points, each verifiable on the curve by a single polynomial evaluation; (b) a $30\times30$ matrix of canonical heights; (c) a determinant. Every step is independently checkable, and with ball arithmetic every step is provable. No conjecture enters. An independent group can re-verify it in minutes.
The upper bound depends on GRH (a conjecture about all zeros of an $L$-function) and BSD (a Millennium Problem). If either failed, the ceiling would evaporate — but the record would stand, restated as "rank $\ge30$", which is what the leaderboards actually track.
Good practice, followed by the record community: state the two claims separately and label the hypotheses. ∎
Before assembling the pipeline, it is worth knowing what the answer is expected to be — because informed opinion has recently flipped.
Model $E(\mathbb{Q})$ and Ш as arising from a random alternating integer matrix: take $A$ an $n\times n$ alternating matrix with entries drawn from a suitable distribution, and set $\operatorname{rank}E\leftrightarrow\operatorname{corank}A$, $\text{Ш}\leftrightarrow\operatorname{coker}A$. Calibrate the distribution so that the predicted Selmer-group sizes match Bhargava–Shankar's theorems (average $\#\mathrm{Sel}^{(m)}=\sigma(m)$) and the predicted Ш distribution matches Delaunay's heuristics.
The number of elliptic curves over $\mathbb{Q}$ of height $\le X$ and rank $\ge21$ is $O(X^{\epsilon})$ for every $\epsilon\gt0$. Consequently all but finitely many elliptic curves over $\mathbb{Q}$ have rank $\le21$.
The model refines by torsion subgroup $T$, predicting a different asymptotic ceiling for each:
| $T$ | trivial | $\mathbb{Z}/2$ | $\mathbb{Z}/3$ | $\mathbb{Z}/4$ | $\mathbb{Z}/5$ | $\mathbb{Z}/6$ | $\mathbb{Z}/7$ | $\mathbb{Z}/8$ |
|---|---|---|---|---|---|---|---|---|
| predicted ceiling | 21 | 13 | 9 | 7 | 5 | 5 | 3 | 3 |
Note that the current records exceed several of these — rank 30 with trivial torsion, and Elkies–Klagsbrun's torsion records too. That is not a contradiction: the model says "all but finitely many", so any finite list of exceptional curves is permitted.
Elkies and Klagsbrun, who broke five records at once, remark that such work provides at best limited evidence that ranks are unbounded: they found curves exceeding the conjectured asymptotic ceiling, which the model explicitly permits. Record-breaking and boundedness are compatible.
Nobody has a proof either way, and no proposed method would settle it. A proof that ranks are bounded would be a major theorem — it would constrain BSD sharply and is widely regarded as Fields-medal territory.
7.40 Compute the empirical distribution of ranks for curves of small conductor and compare with the predicted 50/50 split.
{ my(cnt = vector(6));
for(N = 11, 5000,
my(v = ellsearch(N));
for(i = 1, #v,
my(E = ellinit(v[i][2]), R = ellrank(E));
if(R[1] == R[2] && R[1] < 6, cnt[R[1]+1]++)));
print(cnt);
print("proportions: ", [c*1.0/vecsum(cnt) | c <- cnt]);
}
You should see roughly $\{r=0:\ \sim60\%,\ r=1:\ \sim35\%,\ r=2:\ \sim5\%,\ r\ge3:\ \lt1\%\}$ at small conductor. The predicted asymptotic is exactly 50/50 between ranks 0 and 1 with density 0 for $r\ge2$; the discrepancy at small conductor is a well-known finite-size effect (curves are ordered by conductor here, not by height, which also matters).
7.41 Explain why "all but finitely many have rank $\le21$" is consistent with a rank-30 curve existing.
The statement quantifies over all curves and allows a finite exceptional set of any size. A rank-30 curve is one member of that set. The model even predicts roughly how many exceptions to expect: the count of curves of height $\le X$ with rank $\ge r$ is predicted to be $X^{(21-r)/24+o(1)}$-ish, which for $r=30$ gives a bounded total.
What would contradict the model is finding an infinite family of rank-30 curves, or curves of unboundedly growing rank. Nobody has done either — and the construction methods of this phase all cap out at generic rank 18, so no known method could. ∎
7.42 Estimate, using the model, how many curves of rank $\ge25$ should exist.
PPVW's heuristic gives, for the number of curves of height $\le X$ with rank $\ge r$, $$\#\{E:\operatorname{ht}(E)\le X,\ r_E\ge r\}\ \asymp\ X^{(21-r)/24}$$ for $r\gt21$ this exponent is negative, so the count is bounded as $X\to\infty$: finitely many in total.
For $r=25$: exponent $(21-25)/24=-1/6$, so the count tends to 0 — meaning only finitely many, and the model gives no reason to expect many. The observed record of 30 with a handful of curves at 28–30 is entirely consistent.
Sobering corollary: if the model is right, rank records will get harder and harder, and there may be an absolute maximum. The century-long steady progress may be approaching its end rather than continuing indefinitely.
A single reference page. Every recipe you will actually reach for.
\p 60 \\ 60 digits of real precision
\ps 20 \\ series precision
# \\ toggle the timer
## \\ time of the last command
\\ always start from a minimal model:
E = ellminimalmodel(ellinit([a1,a2,a3,a4,a6]), &v);
\\ v = [u,r,s,t] records the change of variables; keep it!
P = ellchangepoint(P_old, v); \\ move points across
E.a1 .. E.a6, E.b2 .. E.b8, E.c4, E.c6, E.disc, E.j
E.omega \\ [w1, w2] period lattice
E.eta, E.area, E.roots
ellglobalred(E) \\ [N, [u,r,s,t], prod c_p]
ellglobalred(E)[1] \\ conductor
ellglobalred(E)[3] \\ Tamagawa product
elllocalred(E, p) \\ [f_p, Kodaira code, [u,r,s,t], c_p]
ellrootno(E) \\ global root number w
ellrootno(E, p) \\ local root number w_p
ellcm(E) \\ CM discriminant, 0 if none
ellisoncurve(E, P)
elladd(E, P, Q) ellsub(E, P, Q) ellneg(E, P)
ellmul(E, P, n)
ellorder(E, P) \\ 0 means infinite order
elltors(E) \\ [order, [structure], [generators]]
ellratpoints(E, h) \\ search, naive height bound h
elldivpol(E, m) \\ m-division polynomial
ellheight(E, P) \\ canonical height
ellheightmatrix(E, [P,Q,R]) \\ Gram matrix
matdet(ellheightmatrix(E, pts)) \\ the independence certificate
ellrank(E) \\ [lower, upper, s, gens]
ellrank(E, effort) \\ effort = 0,1,2,3 -- search harder
ellrank(E, effort, extra_points) \\ feed in points you already have
ell2cover(E) \\ the 2-coverings (quartic models)
hyperellratpoints(C, h) \\ search a covering
ellanalyticrank(E) \\ [r_an, leading L-coefficient]
elllseries(E, s) elllseries(E, s, k) \\ L and derivatives
ellheegner(E) \\ Heegner point (rank 1, w = -1)
ellap(E, p) \\ trace of Frobenius
ellinit([a1..a6], p) \\ curve over F_p
ellinit([a1..a6], ffgen(p^k)) \\ over F_{p^k}
ellcard(E) \\ #E(F_q)
ellgroup(E) \\ [n1] or [n1,n2]
ellgroup(E, 1) \\ also returns generators
elllog(E, P, G, ord) \\ discrete logarithm
ellweilpairing(E, P, Q, m)
ellan(E, n) \\ [a_1, ..., a_n]
ellisomat(E) \\ the Q-isogeny class + degree matrix
ellisogeny(E, G) \\ Velu: [target coeffs, maps]
ellisogenyapply(phi, P)
elltwist(E, d) \\ quadratic twist
ellfromj(j) \\ a curve with given j
ellmoddegree(E) \\ modular degree
ellsearch(N) \\ database lookup (needs pari-elldata)
ellidentify(E) \\ find E in the database
ellpointtoz(E, P) \\ elliptic logarithm
ellztopoint(E, z) \\ elliptic exponential
ellwp(E, z) ellwp(E, z, 1) \\ [wp(z), wp'(z)]
ellsigma(E, z) ellzeta(E, z)
ellj(q) \\ j as a q-series or at a point of H
agm(a, b)
lfun(E, s) lfunzeros(E, T)
ellminimalmodel before anything local.\p 100 costs almost nothing and prevents silent nonsense.gp once per candidate from an outer language (Lesson 5).ellrank on a dozen curves before you trust it at scale.8.1 Write a one-line GP expression giving the conductor, rank bounds, torsion and root number of a curve.
summary(c) = my(E = ellminimalmodel(ellinit(c)));
[ellglobalred(E)[1], ellrank(E)[1..2], elltors(E)[2], ellrootno(E)];
? summary([0,0,1,-7,6])
% [5077, [3, 3], [], -1]
? summary([0,-1,1,-10,-20])
% [11, [0, 0], [5], 1]
Note the parity check: root number $-1$ with rank 3 ✓, $+1$ with rank 0 ✓.
8.2 Write a GP function that verifies a claimed rank lower bound from a list of points.
verify(c, pts, prec) =
{ default(realprecision, prec);
my(E = ellinit(c), G);
for(i = 1, #pts, if(!ellisoncurve(E, pts[i]), error("point ", i, " not on curve")));
G = select(P -> ellorder(E, P) == 0, pts);
if(#G != #pts, error("torsion present"));
my(M = ellheightmatrix(E, G), d = matdet(M));
if(d == 0, error("determinant zero -- dependent"));
for(k = 1, #G, if(matdet(M[1..k,1..k]) <= 0, error("not positive definite")));
print("rank >= ", #G, " regulator = ", d);
#G;
}
? verify([0,0,0,-7,6], ellrank(ellinit([0,0,0,-7,6]))[4], 80)
This is a complete, reusable rank-lower-bound certifier. Give it the curve and the points and it does every check: on-curve, non-torsion, independent, positive definite.
8.3 Build a GP script that reads curves from a file and writes a summary table.
\\ batch.gp -- run with: gp -q batch.gp
{
my(v = readvec("curves.txt"), out = List());
for(i = 1, #v,
my(E = ellinit(v[i]));
if(type(E) == "t_VEC",
my(Em = ellminimalmodel(E), R = ellrank(Em));
listput(out, [i, ellglobalred(Em)[1], R[1], R[2], ellrootno(Em)]);
if(R[1] >= 6, print("HIT ", i, " ", v[i], " rank ", R[1..2]))));
write("summary.txt", Vec(out));
print("done: ", #out, " curves");
}
Input file format: one curve per line as [a1,a2,a3,a4,a6]. readvec parses it. This is the confirmation stage of a rank search; the sieve produces curves.txt and this verifies.
??ellinit, ??ellrank in the interpreter.Mathematica's role is symbolic: constructing families, imposing conditions, eliminating variables. Everything numeric goes to PARI. Here is a package skeleton that makes that split clean.
BeginPackage["EC`"];
GP::usage = "GP[cmd] runs a GP command and returns the output string.";
GPEval::usage = "GPEval[expr] evaluates a GP expression and parses the result.";
ECRank::usage = "ECRank[{a1,a2,a3,a4,a6}] returns {lower, upper} rank bounds.";
ECData::usage = "ECData[coeffs] returns an association of standard invariants.";
MestrePoly::usage= "MestrePoly[{a1,...,a2n}] returns {R, points} for Mestre's construction.";
NagaoSum::usage = "NagaoSum[fam, X] estimates the generic rank of a family.";
Begin["`Private`"];
(* --- the bridge --- *)
GP[cmd_String] := StringTrim @ RunProcess[
{"gp", "-q"}, "StandardOutput", cmd <> "\nquit\n"];
gpFix[s_String] := StringReplace[s,
{"[" -> "{", "]" -> "}", " E" -> "*10^", "\n" -> ""}];
GPEval[expr_String] := ToExpression[gpFix @ GP["print(" <> expr <> ")"], InputForm];
toGP[l_List] := StringReplace[ToString[l, InputForm], {"{" -> "[", "}" -> "]"}];
(* --- wrappers --- *)
ECRank[c_List] := Take[GPEval["ellrank(ellinit(" <> toGP[c] <> "))"], 2];
ECData[c_List] := Module[{r},
r = GPEval["my(E = ellminimalmodel(ellinit(" <> toGP[c] <> "))); \
[ellglobalred(E)[1], E.disc, E.j, ellrootno(E), \
elltors(E)[1], ellglobalred(E)[3]]"];
<|"Conductor" -> r[[1]], "Discriminant" -> r[[2]], "j" -> r[[3]],
"RootNumber" -> r[[4]], "TorsionOrder" -> r[[5]], "Tamagawa" -> r[[6]]|>
];
End[];
EndPackage[];
ellinit returns 0 for a singular curve; check for it rather than letting {} propagate.ECRankList[cs : {{_, _, _, _, _} ..}] := Module[{cmd, out},
cmd = "{ my(v = " <>
StringReplace[ToString[cs, InputForm], {"{" -> "[", "}" -> "]"}] <> "); \
for(i = 1, #v, my(E = ellinit(v[i])); \
if(type(E) == \"t_VEC\", \
print(ellrank(E)[1], \",\", ellrank(E)[2]), \
print(\"-1,-1\"))); }";
out = StringSplit[GP[cmd], "\n"];
ToExpression /@ (StringSplit[#, ","] & /@ out)
];
(* 1000 curves in one process spawn *)
ECRankList[Table[{0, 0, 0, n^2 - 3, n^3 + 1}, {n, 2, 1001}]] // AbsoluteTiming
Building GP commands as Mathematica strings means quoting hazards. Two mitigations: use StringTemplate rather than concatenation, and for anything longer than a few lines, write the GP code to a temporary file and run gp -q file.gp. The file route also makes debugging vastly easier — you can run the generated script by hand.
GPScript[code_String] := Module[{f = CreateFile[], out},
WriteString[f, code]; Close[f];
out = RunProcess[{"gp", "-q", f}, "StandardOutput"];
DeleteFile[f];
StringTrim[out]
];
8.4 Extend the package with ECHeightMatrix[coeffs, points].
ECHeightMatrix[c_List, pts_List, prec_ : 60] :=
GPEval["default(realprecision, " <> ToString[prec] <> "); \
ellheightmatrix(ellinit(" <> toGP[c] <> "), " <> toGP[pts] <> ")"];
ECRegulator[c_List, pts_List, prec_ : 60] := Det @ ECHeightMatrix[c, pts, prec];
ECRegulator[{0,0,0,-7,6}, {{-3,0},{-2,3},{-1,3}}]
Note toGP applied to a list of points produces [[-3,0],[-2,3],[-1,3]] ✓ since the replacement is global. The returned matrix comes back as a Mathematica matrix of reals, ready for Det, Eigenvalues, or LatticeReduce.
8.5 Add a guard that detects singular curves and returns $Failed.
ECRank[c_List] := Module[{disc, r},
disc = GPEval["my(E = ellinit(" <> toGP[c] <> ")); if(type(E)==\"t_VEC\", E.disc, 0)"];
If[disc === 0, Return[$Failed]];
r = GPEval["ellrank(ellinit(" <> toGP[c] <> "))"];
Take[r, 2]
];
ECRank[{0,0,0,0,0}] (* $Failed -- y^2 = x^3 is a cusp *)
ECRank[{0,0,0,-7,6}] (* {3, 3} *)
Better still, compute the discriminant in Mathematica before calling GP at all: $\Delta=-16(4A^3+27B^2)$ for short form, or the full $b_i$ formula otherwise. That saves a process spawn on every singular candidate, which in a sieve over millions matters.
8.6 Benchmark ECRank against ECRankList on 500 curves.
cs = Table[{0, 0, 0, n^2 - 3, n^3 + 1}, {n, 2, 501}];
AbsoluteTiming[ECRank /@ cs;] (* ~ 20-40 s: 500 process spawns *)
AbsoluteTiming[ECRankList[cs];] (* ~ 1-3 s: one spawn *)
Roughly a 20× speedup even at this small scale, and the gap widens with the number of curves since the per-spawn cost is fixed. At a million curves the difference is between an hour and a week.
Design consequence: every wrapper in the package should have a list version, and the singular-form version should be documented as "for interactive use only".
RunProcess, StringTemplate, ExternalEvaluate. PARI/GP manual §2 for script mode.The full symbolic implementation, ready to extend with conditions.
(* Truncated square root: the polynomial part of Sqrt[P] at x = Infinity *)
TruncSqrt[P_, x_, n_Integer] :=
Expand @ Normal @ Series[Sqrt[P], {x, Infinity, n}];
MestrePoly[as_List, x_ : x] := Module[{n = Length[as]/2, P, Q, R},
If[! IntegerQ[n], Return[$Failed]];
P = Expand @ Product[x - a, {a, as}];
Q = TruncSqrt[P, x, n];
R = Expand[Q^2 - P];
<|"P" -> P, "Q" -> Q, "R" -> R,
"Points" -> Table[{a, Q /. x -> a}, {a, as}],
"Degree" -> Exponent[R, x]|>
];
(* check *)
m = MestrePoly[{-5, -4, -3, -2, -1, 1, 2, 3, 4, 5}];
m["Degree"] (* 4 *)
And @@ ((m["R"] /. x -> #[[1]]) == #[[2]]^2 & /@ m["Points"]) (* True *)
A genus-1 quartic $y^2=ax^4+bx^3+cx^2+dx+e$ with a rational point has a standard Weierstrass model. Using the classical invariants:
QuarticInvariants[{a_, b_, c_, d_, e_}] := {
12 a e - 3 b d + c^2, (* I *)
72 a c e + 9 b c d - 27 a d^2 - 27 e b^2 - 2 c^3 (* J *)
};
QuarticToWeierstrass[coeffs_List] := Module[{I0, J0},
{I0, J0} = QuarticInvariants[coeffs];
{0, 0, 0, -27 I0, -27 J0} (* y^2 = x^3 - 27 I x - 27 J *)
];
(* apply to Mestre's R *)
rc = Reverse @ CoefficientList[m["R"], x]; (* {a,b,c,d,e}, degree 4 first *)
w = QuarticToWeierstrass[PadLeft[rc, 5]]
Then hand $w$ to PARI: ECRank[w]. Note the map from quartic points to Weierstrass points is a separate (birational) formula; PARI's ellfromeqn handles the whole conversion including the maps, so in practice you can let GP do it.
MestreCurve[as_List] := Module[{m, rc, w},
m = MestrePoly[as];
If[m === $Failed || m["Degree"] > 4, Return[$Failed]];
rc = PadLeft[Reverse @ CoefficientList[m["R"], x], 5];
w = QuarticToWeierstrass[rc];
<|"Weierstrass" -> w, "Quartic" -> m["R"], "QuarticPoints" -> m["Points"]|>
];
c = MestreCurve[{-7, -5, -3, -2, -1, 1, 2, 4, 6, 9}];
ECRank[c["Weierstrass"]]
ellminimalmodel has extra work.results = Reap[
Do[
Module[{as, c, r},
as = RandomSample[Range[-12, 12], 10];
c = MestreCurve[as];
If[c =!= $Failed,
r = ECRank[c["Weierstrass"]];
If[r =!= $Failed && First[r] >= 6, Sow[{as, r}]]
]],
{200}]
][[2]];
Length[results]
Random choices of ten integers give ranks typically in the 3–7 range, occasionally higher. That is already remarkable — a random curve has rank 0 or 1 with probability near 1 — and it is the whole value of the construction. Pushing beyond requires the conditions of the next lesson.
8.7 Implement MestrePoly symbolically in $a_1,\dots,a_{10}$ and inspect the size of $R$.
as = Table[Subscript[a, i], {i, 1, 10}];
m = MestrePoly[as];
Exponent[m["R"], x] (* 4 *)
Length @ MonomialList[Coefficient[m["R"], x, 4]] (* count terms *)
ByteCount[m["R"]]
The coefficients of $R$ are symmetric polynomials of high degree in ten variables — several thousand terms. That size is why one immediately reduces to symmetric configurations ($a_i=\pm b_i$) before imposing conditions: it cuts the variable count from 10 to 5 and exploits the evenness of $R$.
bs = Table[Subscript[b, i], {i, 1, 5}];
ms = MestrePoly[Join[bs, -bs]];
ms["R"] === (ms["R"] /. x -> -x) (* True: R is even *)
CoefficientList[ms["R"], x][[{1, 3, 5}]] // ByteCount (* far smaller *)
8.8 Verify that clearing denominators does not change the rank.
c = MestreCurve[{-7, -5, -3, -2, -1, 1, 2, 4, 6, 9}];
w = c["Weierstrass"];
den = LCM @@ Denominator /@ w;
w2 = {w[[1]] den, w[[2]] den^2, w[[3]] den^3, w[[4]] den^4, w[[5]] den^6};
{ECRank[w], ECRank[w2]}
Identical ✓. Scaling $a_i\mapsto u^ia_i$ is exactly the admissible change of variables with $u=1/\text{den}$ (Lesson 14), so the curves are $\mathbb{Q}$-isomorphic and the rank is unchanged. Only $\Delta$ scales, by $u^{-12}$.
Doing this in Mathematica before calling PARI is worth it: ellminimalmodel on a curve with huge denominators is slower than on the scaled integral version.
8.9 Search for a rank-8 curve from Mestre's construction.
found = {};
Do[
Module[{as, c, r},
as = RandomSample[Range[-20, 20], 10];
c = MestreCurve[as];
If[c =!= $Failed,
r = ECRank[c["Weierstrass"]];
If[r =!= $Failed && First[r] >= 8, AppendTo[found, {as, r}]]]],
{2000}];
found
Rank 8 appears occasionally in a few thousand random trials — far more often than random curves of comparable size, where it would essentially never appear. Above 8 the hit rate drops sharply, because the ten constructed points satisfy at least one relation (Lesson 84 Ex 7.17) and generic choices give no more.
To go higher you must impose conditions, which is exactly Lesson 85 and the next lesson here.
Series at Infinity.The step that turns a construction into a high-rank family. This is where Mathematica genuinely earns its keep.
For an ideal $I\subseteq k[x_1,\dots,x_n]$ and a monomial order $\prec$, a Gröbner basis is a generating set $G$ such that the leading terms of $G$ generate the ideal of leading terms of $I$. Consequences we use:
(* 1. Set up the symmetric Mestre family *)
bs = {b1, b2, b3, b4, b5};
m = MestrePoly[Join[bs, -bs]];
R = m["R"]; (* even quartic: A x^4 + B x^2 + C *)
{A, B, C} = CoefficientList[R, x][[{5, 3, 1}]];
(* 2. Impose: force an extra rational point at x = c *)
cond1 = A c^4 + B c^2 + C - d^2;
(* 3. FIRST test feasibility modulo a prime -- fast *)
Timing @ GroebnerBasis[{cond1}, {b1, b2, b3, b4, b5, c, d},
Modulus -> 32003];
(* 4. Eliminate to solve for one parameter *)
gb = GroebnerBasis[{cond1}, {b5, b1, b2, b3, b4, c, d},
MonomialOrder -> EliminationOrder];
(* 5. Or just solve directly if the condition is low degree in one variable *)
sol = Solve[cond1 == 0, b5];
Modulus -> 32003 runs orders of magnitude faster and tells you whether the ideal is zero-dimensional, roughly how many solutions to expect, and whether the computation is feasible at all over $\mathbb{Q}$.EliminationOrder with the variable you want to remove listed first. Pure lex is often catastrophically slow; a block order is usually better.(* Force R to have a rational root, i.e. a point with y = 0
-- this creates 2-torsion, which is sometimes wanted and sometimes not. *)
bs = {b1, b2, b3, b4, b5};
m = MestrePoly[Join[bs, -bs]];
R = m["R"];
{A, B, C} = CoefficientList[R, x][[{5, 3, 1}]];
(* R = A x^4 + B x^2 + C is a quadratic in x^2; it has a rational root
iff B^2 - 4 A C is a square. Force it to be a square of a parameter k: *)
cond = B^2 - 4 A C - k^2;
Timing @ GroebnerBasis[{cond}, {b1,b2,b3,b4,b5,k}, Modulus -> 32003];
sol = Solve[cond == 0, b5]; (* often solvable in closed form *)
(* substitute back and specialise *)
fam[b1_, b2_, b3_, b4_, k_] := ... (* R with b5 replaced *)
If the computation does not terminate:
8.10 Compute a Gröbner basis for a small toy system and read off the elimination ideal.
GroebnerBasis[{x^2 + y^2 - 1, x - y}, {x, y}]
(* {-1 + 2 y^2, x - y} *)
GroebnerBasis[{x^2 + y^2 - 1, x - y}, {x, y},
MonomialOrder -> EliminationOrder]
(* eliminates x first: the y-only generator is -1 + 2 y^2 *)
The elimination ideal in $\mathbb{Q}[y]$ is generated by $2y^2-1$, so $y=\pm1/\sqrt2$ — no rational solutions. That is the mechanism you will use constantly: eliminate down to one variable and check whether the resulting polynomial has rational roots.
8.11 Time a Gröbner computation over $\mathbb{Q}$ versus modulo a prime.
vars = {b1, b2, b3, b4, b5};
m = MestrePoly[Join[vars, -vars]];
{A, B, C} = CoefficientList[m["R"], x][[{5, 3, 1}]];
cond = B^2 - 4 A C - k^2;
Timing @ GroebnerBasis[{cond}, Append[vars, k], Modulus -> 32003];
(* fast *)
TimeConstrained[
Timing @ GroebnerBasis[{cond}, Append[vars, k]],
120, $Aborted]
(* may abort *)
Typically 100×–10000× faster modulo a prime, because coefficient growth over $\mathbb{Q}$ is the dominant cost. Standard practice: run mod $p$ for several primes, infer the structure (dimension, degree), and only then attempt the rational computation — or reconstruct rationally from the modular results.
8.12 Impose one condition on the symmetric Mestre family, specialise, and check the rank went up.
(* impose that R has a rational root; solve for b5 *)
sol = Solve[B^2 - 4 A C == k^2, b5]; (* may be messy; take one branch *)
(* specialise the remaining parameters numerically and test *)
results = Table[
Module[{as, c, r},
as = {b1, b2, b3, b4, b5} /. {b1 -> i, b2 -> j, b3 -> 3, b4 -> 5}
/. First[sol];
(* build the curve and test *)
], {i, 1, 5}, {j, 6, 10}];
The point of the exercise is the workflow rather than a specific number: impose, solve, substitute, specialise, verify with ECRank. Compare the rank distribution of the constrained family against the unconstrained one — the constrained family should show a shifted distribution, which is exactly the generic-rank increase Néron specialisation then propagates to every fibre.
If the constrained family's ranks are not higher, the condition you imposed did not add an independent point — a common outcome, and the reason this stage is iterative.
The compute-heavy stage. This lesson is engineering, not mathematics — but it is the stage that decides whether a search finishes.
| Component | Language | Why |
|---|---|---|
| Family construction, conditions | Mathematica / Magma | symbolic elimination |
| Residue tables (good $t\bmod p$) | C / Rust, or GP once | small, done once |
| Candidate enumeration (CRT walk) | C / Rust | tight loop, no allocation |
| $a_p$ computation, Mestre–Nagao | C / Rust | the inner loop; 90% of the time |
| Stage-3 verification (descent, points) | PARI (via libpari or gp) | correctness over speed |
| Orchestration, checkpointing, dedup | Go / Python | I/O and coordination |
For each candidate $t_0$ you need $a_p$ for $p\le X$. The right implementation:
ellinit, no allocation, no big integers if $A,B$ can be reduced mod $p$ first.This is $O(p)$ per prime per candidate — asymptotically worse than SEA, but with a constant so small that it wins by orders of magnitude in this regime (Lesson 26).
// Stage 0: setup (once)
for p in small_primes:
chi[p] = quadratic character table mod p
cube[p] = x^3 mod p table
good[p] = residues t mod p with most negative mean a_p
// Stage 1: cheap filter, X = 200
for t0 in crt_enumerate(good, bound): // only selected residue classes
(A, B) = specialise(family, t0) // reduce mod each p as needed
if is_singular(A, B): continue
if is_cm(A, B): continue // Lesson 32: CM breaks the sieve
s = mestre_nagao(A, B, X=200, chi, cube)
if s < threshold1: emit stage1(t0)
// Stage 2: X = 5000
for t0 in stage1:
s = mestre_nagao(A, B, X=5000)
if s < threshold2: emit stage2(t0)
// Stage 3: X = 10^5 plus a quick descent
for t0 in stage2:
s = mestre_nagao(A, B, X=100000)
if s < threshold3:
r_lo, r_hi = pari_ellrank(A, B) // catches Selmer-inflated fakes
if r_lo >= target: emit hit(t0)
// Stage 4: full point search on the survivors (Lesson 89)
ellrank gives wide bounds on every survivor. Fix: add the descent check earlier, and reduce sieve aggressiveness.8.13 Write the residue-table builder and measure the sieve's selectivity.
\\ GP version -- port the hot version to C
buildtable(fam, p, frac) =
{ my(v = vector(p), ord);
for(t = 0, p-1,
my(c = fam(t), E = ellinit(apply(u -> lift(Mod(u,p)), c), p));
v[t+1] = if(type(E) == "t_VEC", ellap(E,p), 0));
ord = vecsort(v, , 1);
vecextract(vector(p, i, i-1), Str("1..", max(1, floor(frac*p))))
\\ indices of the most negative
}
? fam = (t) -> [0,0,0, t^2-3, t^3+1];
? tables = [ [p, buildtable(fam, p, 0.3)] | p <- [3,5,7,11,13] ];
? \\ selectivity:
? prod(i=1,#tables, #tables[i][2] / tables[i][1]) * 1.0
Selectivity around $0.3^5\approx0.0024$: you examine 0.24% of candidates. Then measure the mean $S(X)$ shift among survivors to confirm the bias is real and roughly additive across primes.
8.14 Implement checkpointing for a GP-driven sieve.
\\ sieve.gp
{
my(start = 1, chkfile = "checkpoint.txt", hits = "hits.txt");
if(fileexists(chkfile), start = eval(readstr(chkfile)[1]));
print("resuming from ", start);
for(n = start, 10^7,
my(c = [0,0,0, n^2-3, n^3+1], E);
if(4*c[4]^3 + 27*c[5]^2,
E = ellinit(c);
if(type(E) == "t_VEC" && ellcm(E) == 0,
if(MN(E, 200) < -8.0,
write(hits, n)))));
if(n % 10000 == 0, write1(chkfile, Str(n)));
);
}
Write the checkpoint after the batch it covers, and make the hit file append-only. On restart the worst case is re-doing one batch — which is fine, provided the hit file is deduplicated at the end.
8.15 Estimate the throughput needed to sieve $10^{12}$ candidates.
Stage 1 at $X=200$ needs $a_p$ for 46 primes, each costing $O(p)$ operations, total $\sum_{p\le200}p\approx4600$ operations per candidate.
$10^{12}$ candidates $\times$ $4600$ operations $=4.6\times10^{15}$ operations. At $10^9$ operations/second/core that is $4.6\times10^6$ core-seconds $\approx53$ core-days. On 128 cores: about 10 hours.
But: with congruence sieving at 0.24% selectivity you only evaluate $2.4\times10^9$ candidates, bringing it to under a core-hour. The enumeration of the CRT classes then becomes the bottleneck, which is why it must be a direct arithmetic-progression walk rather than test-and-reject.
This is the calculation to do before writing the code — it tells you where the effort must go.
Everything assembled, as a checklist you could run on a claimed record.
ellorder, or via the reduction bound of Lesson 41).\\ verify.gp
verifyrank(coeffs, pts, prec) =
{ default(realprecision, prec);
my(E, M, d, k = #pts);
E = ellinit(coeffs);
if(type(E) != "t_VEC", error("singular curve"));
print("Delta has ", sizedigit(abs(E.disc)), " digits");
for(i = 1, k,
if(!ellisoncurve(E, pts[i]), error("point ", i, " is not on the curve")));
print("all ", k, " points verified on the curve");
for(i = 1, k,
if(ellorder(E, pts[i]) != 0, error("point ", i, " is torsion")));
print("all points are non-torsion");
M = ellheightmatrix(E, pts);
d = matdet(M);
print("regulator = ", d);
if(d == 0, error("determinant vanishes: points are dependent"));
for(j = 1, k,
if(matdet(M[1..j, 1..j]) <= 0, error("Gram matrix not positive definite")));
print("Gram matrix is positive definite");
print("CONCLUSION: rank >= ", k, " (unconditional)");
k;
}
conditionalceiling(coeffs) =
{ my(E = ellminimalmodel(ellinit(coeffs)), N, w);
N = ellglobalred(E)[1];
w = ellrootno(E);
print("conductor has ", sizedigit(N), " digits");
print("root number w = ", w, " => analytic rank is ",
if(w == 1, "even", "odd"));
print("[explicit-formula bound requires the Bober computation -- see Lesson 76]");
}
? read("verify.gp");
? E = ellinit([0,0,1,-7,6]);
? G = select(P -> ellorder(E,P) == 0, ellrank(E)[4]);
? verifyrank([0,0,1,-7,6], G, 80)
Delta has 8 digits
all 3 points verified on the curve
all points are non-torsion
regulator = 0.4171...
Gram matrix is positive definite
CONCLUSION: rank >= 3 (unconditional)
% 3
? conditionalceiling([0,0,1,-7,6])
conductor has 4 digits
root number w = -1 => analytic rank is odd
What changes with 150-digit coefficients:
\p to roughly (digits of the largest coordinate)/2 + 100. For 150-digit coefficients and points with 300-digit coordinates, use \p 250 or more.If \p is too low, ellheightmatrix returns numbers that look plausible and a determinant that may be spuriously nonzero or spuriously zero. Always compute at two precisions and confirm agreement. A determinant that changes when you raise the precision is not a certificate.
? \p 60
? d1 = matdet(ellheightmatrix(E, G));
? \p 200
? d2 = matdet(ellheightmatrix(E, G));
? abs(d1 - d2) / abs(d2) \\ should be tiny
8.16 Run the verifier on a rank-5 curve and time each stage.
? \\ find a rank-5 curve first
? { for(a = -200, 200, for(b = -200, 200,
if(4*a^3+27*b^2,
my(E = ellinit([0,0,0,a,b]));
if(type(E)=="t_VEC" && ellrank(E)[1] >= 5,
print([a,b]); break(2))))); }
? \\ then verify:
? #
? verifyrank([0,0,0,a,b], G, 100)
? ##
The height matrix dominates: $\binom{5}{2}+5=15$ canonical heights. Even at 100 digits this is milliseconds. Scaling to rank 30 gives 465 heights — still fast. Verification is cheap; discovery is expensive. That asymmetry is why record claims are easy to check and hard to make.
8.17 Add a mod-$p$ independence certificate to the verifier.
verifymodp(coeffs, pts, nprimes) =
{ my(E = ellinit(coeffs), L = 0, used = List(), cnt = 0);
forprime(p = 100, 10^6,
if(E.disc % p != 0,
my(Lp = relmod(E, pts, p));
if(Lp != 0,
listput(used, p); cnt++;
L = if(L == 0, Lp, matintersect(L, Lp));
if(matsize(L)[2] == 0,
print("independent, certified by primes ", Vec(used));
return(1));
if(cnt >= nprimes, break))));
print("inconclusive after ", cnt, " primes");
0;
}
? verifymodp([0,0,0,-7,6], G, 20)
Output is a certificate: the list of primes. Anyone can recheck it with exact finite arithmetic, no floating point, no trust in a height implementation. This is the artefact you would formalise in Lean (Lesson 90 Ex 7.36).
8.18 Deliberately break the verifier: feed it a dependent set and confirm it catches the error.
? E = ellinit([0,0,0,-7,6]);
? G = select(P -> ellorder(E,P)==0, ellrank(E)[4]);
? bad = concat(G, [elladd(E, G[1], G[2])]); \\ P1 + P2 is dependent!
? verifyrank([0,0,0,-7,6], bad, 80)
*** determinant vanishes: points are dependent
Caught ✓. Also try: including a torsion point (caught by the order check), a point not on the curve (caught by ellisoncurve), and a set at insufficient precision (caught by the two-precision comparison, if you add it).
Testing your verifier against known-bad inputs is not optional. A verifier that never rejects anything is not a verifier.
| Tool | Best at | Get it |
|---|---|---|
| PARI/GP | heights, 2-descent, L-functions, root numbers, everything numeric | brew install pari pari-elldata |
| SageMath | everything; wraps PARI, eclib, FLINT; can call Magma | conda-forge or the macOS app |
| Magma | 4-/8-descent, quadric-intersection search, big Gröbner | commercial; the online calculator for small jobs |
| eclib / mwrank | reference 2-descent implementation | bundled with Sage |
| ratpoints | fast direct point search | bundled with Sage / PARI |
| FLINT (with Arb) | certified ball arithmetic | brew install flint |
| LMFDB | lookup: ranks, generators, Selmer data, isogeny classes | lmfdb.org, JSON API |
| Mathematica | symbolic families, Mestre's construction, Gröbner elimination | — |
WeierstrassCurve. A machine-checked "rank $\ge k$" proof, achievable before Mordell–Weil or heights reach Mathlib, because the method needs neither. As far as anyone knows, nobody has done it.You now have the whole map: what the rank is (Lesson 52), why it is hard (Lesson 64), how it is bounded from below (Lesson 50) and above (Lessons 60, 76), and how records are built (Phase 7). The mathematics is a century old in parts and weeks old in others.
The two things worth remembering when you start building:
8.19 Reproduce a published rank-8 curve and verify it independently.
? \\ Pull a high-rank curve from the LMFDB or from Dujella's tables,
? \\ then run the full verifier from Lesson 98:
? read("verify.gp");
? \\ e.g. a rank-8 curve of moderate conductor:
? E = ellinit([0, 0, 1, -79, 342]); \\ substitute a genuine rank-8 example
? R = ellrank(E, 2);
? G = select(P -> ellorder(E,P) == 0, R[4]);
? verifyrank(E[1..5], G, 100)
? verifymodp(E[1..5], G, 20)
Doing this once, end to end, on someone else's curve is the best possible check that you have understood the pipeline. If your verifier agrees with the published claim, you have working code; if it disagrees, you have learned something specific.
8.20 Pick one of the four projects and write down its first three concrete steps.
Example — Project 4 (Lean certificate):
Mathlib/AlgebraicGeometry/EllipticCurve/Affine.lean and read the WeierstrassCurve.Affine.Point API. Confirm you can state and evaluate the group law on a concrete curve over $\mathbb{F}_{101}$.Decidable instance for "$\sum a_i\bar P_i=\mathcal{O}$ in $\tilde E(\mathbb{F}_p)$" and use native_decide (or a verified kernel computation) to check that the intersection of the relation lattices is trivial for a small worked example — say rank 3 on $y^2=x^3-7x+6$.Then generalise: from rank 3 to rank $k$, from one prime to a list, and finally to a curve with large coefficients. The mathematical content does not change; only the arithmetic gets bigger.
8.21 Write down, in one paragraph each, the statements of the five theorems this course most depends on.
Mordell–Weil (Lesson 52). For $E$ over a number field $K$, $E(K)$ is finitely generated: $E(K)\cong\mathbb{Z}^r\times E(K)_{\text{tors}}$. The proof is weak Mordell–Weil (finiteness of $E(K)/mE(K)$, from finiteness of the class group and finite generation of units) plus a height descent argument.
Néron–Tate height (Lesson 47). $\hat h(P)=\lim h(2^nP)/4^n$ exists, differs from the naive height by $O(1)$, satisfies $\hat h(mP)=m^2\hat h(P)$ exactly, and vanishes precisely on torsion. It makes $E(\mathbb{Q})/\text{tors}$ a positive-definite lattice, which is what allows independence to be certified by a determinant.
Modularity (Lesson 70). Every $E/\mathbb{Q}$ of conductor $N$ corresponds to a weight-2 newform of level $N$ with the same $a_n$. This gives $L(E,s)$ its analytic continuation and functional equation, without which BSD cannot even be stated.
Shioda–Tate (Lesson 80). For an elliptic surface with section, $\rho(S)=2+\sum_v(m_v-1)+\operatorname{rank}\mathcal{E}(\overline k(t))$. It is the budget constraint governing every high-rank construction, and it is why one keeps the discriminant squarefree.
Néron specialisation (Lesson 83). For a non-constant family $\mathcal{E}/\mathbb{Q}(t)$, the specialisation $\mathcal{E}(\mathbb{Q}(t))\to\mathcal{E}_{t_0}(\mathbb{Q})$ is injective for all but a thin set of $t_0$. It is what makes "build the rank once, inherit it everywhere" legitimate.