A lattice in the complex plane rolls up into a torus, and the torus is secretly a cubic curve
The cubic y² = x³ + ax + b comes with a strange chord-and-tangent rule for adding points. The secret: the curve is a doughnut, and that rule is ordinary addition, wrapped around.
The plane, a lattice of points m + nτ, and a rule: points that differ by a lattice vector count as the same. Press play and watch the plane roll up into a torus.
Take the complex plane and a lattice — all the points m + nτ for whole numbers m and n. Declare two complex numbers to be the same if they differ by a lattice vector, and the entire plane collapses onto a single tile with its opposite edges glued. The yellow and cyan curves are those two glued edge pairs; on the finished doughnut they are the two loops you cannot shrink away.
One honest caveat: a flat torus cannot be bent smoothly into 3-space without stretching (only an infinitely crinkled embedding avoids it), so the round doughnut cannot carry the true flat metric. τ genuinely controls the tile and the doughnut’s proportions — the roundness is the price of drawing it here.
Drag a point around the torus on the left and watch its image travel along the cubic on the right. The yellow circles land on the curve’s two real branches.
Off the yellow lines, ℘(z) and ℘′(z) are genuinely complex, and the marker shows only their real parts — the true image has left the page. Drag onto a yellow line to land back on the real curve.
The map z ↦ (℘(z), ℘′(z)) sends the torus onto the cubic, and it is a perfect one-to-one correspondence once the single point z = 0 is sent to the point at infinity. Because ℘ satisfies the differential equation (℘′)² = 4℘³ − g₂℘ − g₃, every point of the torus lands exactly on the curve — the equation of the cubic is not imposed, it is a theorem about the lattice.
The torus C/Λ is a lovely object but it comes with no polynomial. To find one we need functions on it — that is, functions on C that are unchanged when you shift by any lattice vector. Such doubly periodic functions are hard to come by: a non-constant one must have poles, because a holomorphic function that is bounded on the whole plane is constant.
Weierstrass’s solution was to build one by brute force. Sum 1/(z − ω)² over every lattice vector ω, with a correction term to make the sum converge:
℘(z) = 1/z² + Σ [ 1/(z − ω)² − 1/ω² ]
The result is doubly periodic by construction, with a double pole at each lattice point. And now the miracle: ℘ and its derivative ℘′ are not independent. They satisfy
(℘′)² = 4℘³ − g₂℘ − g₃
where g₂ and g₃ are numbers computed from the lattice alone. That is a cubic equation. Setting x = ℘(z) and y = ℘′(z) sends every point of the torus onto the curve y² = 4x³ − g₂x − g₃, and the map is a perfect one-to-one correspondence once z = 0 is sent to the point at infinity. The equation was not chosen; it was forced by the lattice.
On the torus, addition is unambiguous: z₁ and z₂ are complex numbers, so add them and wrap the result back into the tile. The claim is that this matches the geometric rule on the cubic — draw the line through two points, find the third intersection, reflect it.
The reason is a counting theorem about doubly periodic functions: the zeros minus the poles of such a function, counted with multiplicity over one tile, always sum to a lattice vector. A straight line ax + by + c = 0 pulls back to the function a℘(z) + b℘′(z) + c on the torus, which has exactly three zeros and a pole of order three at the origin. Subtracting the triple pole at z = 0 costs nothing, so the three zeros z₁, z₂, z₃ must satisfy z₁ + z₂ + z₃ = 0.
In other words: three points of the cubic are collinear exactly when they sum to zero on the torus. That is the whole group law, and it is a statement about addition of complex numbers. The chord-and-tangent construction is explored in its own right in the Algebraic Geometry module’s Elliptic Curves & the Group Law lesson.
Drag τ around the upper half-plane. Outside the shaded region, a cyan marker shows the equivalent τ inside it; the j-invariant says which curve you are on.
Every complex elliptic curve is C/Λ for some lattice, and rescaling lets us take Λ = Z + Zτ with τ in the upper half-plane. But different τ can give the same lattice: τ and τ + 1 obviously do, and so do τ and −1/τ. Those two moves generate the group SL₂(Z), and the shaded region is one exact copy of the quotient — the moduli space of elliptic curves. The j-invariant is the coordinate on it: same j, same curve, no matter how different the parallelograms look.
Spot a mistake or have an idea?