Documentation

TauCeti.Analysis.SpecialFunctions.Elliptic.Uniformization

The Weierstrass curve of a period lattice #

A period pair L with lattice Λ has the lattice invariants g₂ = 60 ∑' λ⁻⁴ and g₃ = 140 ∑' λ⁻⁶ (PeriodPair.g₂, PeriodPair.g₃), and Mathlib proves the differential equation ℘'² = 4 ℘³ - g₂ ℘ - g₃ (PeriodPair.derivWeierstrassP_sq). Dividing ℘' by 2 turns this into a Weierstrass equation with leading coefficient one, so this file attaches to L the Weierstrass curve

y² = x³ - (g₂ / 4) x - g₃ / 4

(PeriodPair.weierstrassCurve) and the map z ↦ (℘(z), ℘'(z) / 2) from ℂ to its points, sending the lattice to the point at infinity (PeriodPair.weierstrassPoint). These are the first steps of the complex uniformization ℂ / Λ ≃ E(ℂ).

The discriminant of the curve is g₂³ - 27 g₃². For the lattice ℤ τ + ℤ of a point τ of the upper half-plane, the lattice sums are Eisenstein series, g₂ = (4 π⁴ / 3) E₄(τ) and g₃ = (8 π⁶ / 27) E₆(τ) (by Mathlib's tsum_eisSummand_eq_riemannZeta_mul_eisensteinSeries), so the identity E₄³ - E₆² = 1728 Δ (ModularForm.discriminant_eq_E₄_cube_sub_E₆_sq) gives g₂³ - 27 g₃² = (2 π)¹² Δ(τ), which does not vanish. Every lattice is a nonzero multiple of such a lattice, and rescaling a lattice by c multiplies g₂ by c⁻⁴ and g₃ by c⁻⁶; so the discriminant never vanishes and the curve is elliptic. Its j-invariant is 1728 g₂³ / (g₂³ - 27 g₃²), which for ℤ τ + ℤ is the modular invariant j(τ) = E₄(τ)³ / Δ(τ).

The point map has holomorphic lifts to projective coordinates. Off the lattice this is the holomorphy of ℘ and ℘' in the affine chart. Near the point at infinity the projective curve is covered by the chart Y ≠ 0, with coordinates x / y = 2 ℘ / ℘' and 1 / y = 2 / ℘'. Near a lattice point l₀ write ℘'(z) = ℘'_{l₀}(z) - 2 / (z - l₀)³ and `℘(z) = ℘_{l₀}(z) + 1 / (z - l₀)²

whose denominator is -2 at l₀, and similarly for ℘ / ℘'. So both chart coordinates are holomorphic at l₀, they vanish there, and ℘ / ℘' has derivative -1 / 2 at l₀. In particular the point map is injective near every lattice point.

The point map is surjective. By Liouville's theorem ℘ takes every value x: otherwise 1 / (℘ - x), which near a lattice point l₀ is (z - l₀)² divided by a function with value 1 at l₀, would extend by 0 on Λ to a bounded entire Λ-periodic function, hence a constant, while it vanishes on Λ and nowhere else. A point (x, y) of the curve with ℘(z) = x has y = ± ℘'(z) / 2, and z or -z maps to it.

Main definitions #

Main results #

References #

Lattice sums of ℤ τ + ℤ #

theorem UpperHalfPlane.G_periodPair (τ : UpperHalfPlane) {k : ℕ} (hk : 3 ≤ k) :
τ.periodPair.G k = 2 * riemannZeta ↑k * (ModularForm.E hk) τ

For k ≥ 3 the lattice sum G k of ℤ τ + ℤ is the Eisenstein series 2 ζ(k) E_k(τ).

g₂(ℤ τ + ℤ) = (4 π⁴ / 3) E₄(τ).

g₃(ℤ τ + ℤ) = (8 π⁶ / 27) E₆(τ).

The Weierstrass curve of a period lattice #

The Weierstrass curve y² = x³ - (g₂ / 4) x - g₃ / 4 of a period lattice. The point (℘(z), ℘'(z) / 2) lies on it for z ∉ Λ (PeriodPair.equation_weierstrassP).

Instances For

    The discriminant of the Weierstrass curve of a lattice is g₂³ - 27 g₃².

    theorem PeriodPair.weierstrassCurve_smul (L : PeriodPair) (c : ℂˣ) :
    (c • L).weierstrassCurve = { u := c, r := 0, s := 0, t := 0 } • L.weierstrassCurve

    Rescaling the lattice by c changes its Weierstrass curve by the variable change (x, y) ↦ (c⁻² x, c⁻³ y), that is, with u = c and r = s = t = 0.

    The Weierstrass curve depends only on the lattice, not on the chosen basis.

    The discriminant of the Weierstrass curve of ℤ τ + ℤ is (2 π)¹² Δ(τ).

    The discriminant g₂³ - 27 g₃² of a lattice does not vanish.

    theorem PeriodPair.weierstrassCurve_j (L : PeriodPair) :
    L.weierstrassCurve.j = 1728 * L.g₂ ^ 3 / (L.g₂ ^ 3 - 27 * L.g₃ ^ 2)

    The j-invariant of the Weierstrass curve of a lattice is 1728 g₂³ / (g₂³ - 27 g₃²).

    The j-invariant of E_Λ is 1728 exactly when g₃(Λ) = 0.

    The j-invariant of E_Λ is 0 exactly when g₂(Λ) = 0.

    The j-invariant of the Weierstrass curve of ℤ τ + ℤ is the modular invariant j(τ) = E₄(τ)³ / Δ(τ).

    The point (℘(z), ℘'(z) / 2) #

    For z ∉ Λ the point (℘(z), ℘'(z) / 2) lies on the Weierstrass curve of L: this is the differential equation ℘'² = 4 ℘³ - g₂ ℘ - g₃ divided by 4.

    The point (℘(z), ℘'(z) / 2) of the Weierstrass curve of L for z ∉ Λ, and the point at infinity 0 for z ∈ Λ.

    Instances For
      @[simp]

      The point map vanishes exactly on the lattice.

      @[simp]

      The point map is odd: -z goes to (℘(z), -℘'(z) / 2).

      The point map in the chart at infinity #

      theorem PeriodPair.inv_derivWeierstrassP_eq (L : PeriodPair) {l₀ : ℂ} (hl₀ : l₀ ∈ L.lattice) (z : ℂ) :
      (L.derivWeierstrassP z)⁻¹ = (z - l₀) ^ 3 / ((z - l₀) ^ 3 * L.derivWeierstrassPExcept l₀ z - 2)

      Near a lattice point l₀, 1 / ℘' is a holomorphic function divided by a holomorphic function that is -2 at l₀. The identity holds everywhere, including the junk value ℘'(l₀)⁻¹ = 0.

      theorem PeriodPair.weierstrassP_div_derivWeierstrassP_eq (L : PeriodPair) {l₀ : ℂ} (hl₀ : l₀ ∈ L.lattice) (z : ℂ) :
      L.weierstrassP z / L.derivWeierstrassP z = (z - l₀) * (((z - l₀) ^ 2 * (L.weierstrassPExcept l₀ z - 1 / l₀ ^ 2) + 1) / ((z - l₀) ^ 3 * L.derivWeierstrassPExcept l₀ z - 2))

      Near a lattice point l₀, ℘ / ℘' is z - l₀ times a quotient of holomorphic functions whose value at l₀ is 1 / (-2).

      The coordinate 1 / ℘' of the chart at infinity is holomorphic on the domain of that chart: where ℘' ≠ 0, and at the lattice points, where it vanishes.

      The coordinate ℘ / ℘' of the chart at infinity is holomorphic on the domain of that chart: where ℘' ≠ 0, and at the lattice points, where it vanishes.

      theorem PeriodPair.hasDerivAt_weierstrassP_div_derivWeierstrassP (L : PeriodPair) {l₀ : ℂ} (hl₀ : l₀ ∈ L.lattice) :
      HasDerivAt (fun (z : ℂ) => L.weierstrassP z / L.derivWeierstrassP z) (-1 / 2) l₀

      At a lattice point, ℘ / ℘' has derivative -1 / 2: the coordinate -x / y = -2 ℘ / ℘' is a local parameter of the curve at the point at infinity.

      ℘' has no zeros in a punctured neighbourhood of a lattice point.

      The point map is holomorphic. Near every z₀ ∈ ℂ, the point (℘(z), ℘'(z) / 2) (the point at infinity for z ∈ Λ) has a holomorphic lift to nonsingular projective coordinates: the lift [℘ : ℘' / 2 : 1] off the lattice and [2 ℘ / ℘' : 1 : 2 / ℘'] near the lattice.

      The coordinate ℘ / ℘' of the chart at infinity is a function of the point (℘(z), ℘'(z) / 2).

      theorem PeriodPair.exists_mem_nhds_injOn_weierstrassPoint (L : PeriodPair) {l₀ : ℂ} (hl₀ : l₀ ∈ L.lattice) :
      ∃ U ∈ nhds l₀, Set.InjOn L.weierstrassPoint U

      The point map is injective near every lattice point, since the local parameter ℘ / ℘' at the point at infinity has nonzero derivative there.

      Surjectivity of the point map #

      theorem PeriodPair.exists_weierstrassP_eq (L : PeriodPair) (x : ℂ) :
      ∃ z ∉ L.lattice, L.weierstrassP z = x

      ℘ takes every complex value. For every x : ℂ there is z ∉ Λ with ℘(z) = x.

      The point map is surjective: every point of the Weierstrass curve of L is the point at infinity or (℘(z), ℘'(z) / 2) for some z ∉ Λ.

      Homothetic lattices #

      theorem PeriodPair.weierstrassCurve_eq_smul_of_lattice_eq {L L' : PeriodPair} {c : ℂˣ} (h : L'.lattice = (c • L).lattice) :
      L'.weierstrassCurve = { u := c, r := 0, s := 0, t := 0 } • L.weierstrassCurve

      If Λ' = c Λ, the curve of Λ' is obtained from that of Λ by the change of variables (x, y) ↦ (c⁻² x, c⁻³ y), that is, with u = c and r = s = t = 0.

      Homothetic lattices have the same j-invariant.

      For Λ' = c Λ, the isomorphism E_{Λ'}(ℂ) ≃+ E_Λ(ℂ) given by the change of variables (x, y) ↦ (c² x, c³ y). It sends the point of c z to the point of z (PeriodPair.pointAddEquivOfLatticeEq_weierstrassPoint).

      Instances For
        theorem PeriodPair.pointAddEquivOfLatticeEq_some {L L' : PeriodPair} {c : ℂˣ} (h : L'.lattice = (c • L).lattice) {x y x' y' : ℂ} (hxy : L'.weierstrassCurve.toAffine.Nonsingular x y) (hxy' : L.weierstrassCurve.toAffine.Nonsingular x' y') (hx : x' = ↑c ^ 2 * x) (hy : y' = ↑c ^ 3 * y) :

        On affine points, PeriodPair.pointAddEquivOfLatticeEq is (x, y) ↦ (c² x, c³ y).

        @[simp]

        Rescaling naturality of the point map. If Λ' = c Λ, the change of variables from E_{Λ'} to E_Λ sends the point (℘(c z; Λ'), ℘'(c z; Λ') / 2) to (℘(z; Λ), ℘'(z; Λ) / 2).