Definitions/Def_TateCurve_PointSeries.lean
Tate parametrisation point series: coordinate functions and convergence
Throughout, K is a nontrivially normed field whose distance is ultrametric, complete where sums are formed. The basic rational functions are \mathrm{xfun}(w) = w/(1-w)^2 and \mathrm{yfun}(w) = w^2/(1-w)^3, both vanishing at w=0. For w \neq 0,1 they satisfy the inversion identities \mathrm{xfun}(w^{-1}) = \mathrm{xfun}(w) and \mathrm{yfun}(w^{-1}) = -\mathrm{yfun}(w) - \mathrm{xfun}(w), and their norms are computed in the two ultrametric regimes: for \|w\| < 1 one has \|\mathrm{xfun}(w)\| = \|w\| and \|\mathrm{yfun}(w)\| = \|w\|^2, while for \|w\| > 1 both equal \|w\|^{-1} (using that \|1-w\| = \|w\| when \|w\| > 1, recorded here together with 1 - w \neq 0 in that range). For q, u \in K the families indexed by n \in \mathbb{Z} are \mathrm{xTerm}(n) = \mathrm{xfun}(q^n u) and \mathrm{yTerm}(n) = \mathrm{yfun}(q^n u), with value \mathrm{xfun}(u), resp. \mathrm{yfun}(u), at n = 0. A single convergence criterion serves both: if q \neq 0, \|q\| < 1, u \neq 0 and F : K \to K satisfies \|F(w)\| \le \|w\| for \|w\| < 1 and \|F(w)\| \le \|w\|^{-1} for \|w\| > 1, then n \mapsto F(q^n u) is summable over \mathbb{Z}; applied to \mathrm{xfun} and \mathrm{yfun} this gives summability of \mathrm{xTerm} and \mathrm{yTerm}. Finally s_1(q) is the coefficient sum of the q-series module with coefficients c(n) = n, i.e. \sum_{n \ge 1} n\, q^n/(1-q^n), with \|s_1(q)\| \le \|q\| when \|q\| < 1, and the coordinates are defined by \mathrm{pointX} = \sum_{n \in \mathbb{Z}} \mathrm{xfun}(q^n u) - 2 s_1(q), \qquad \mathrm{pointY} = \sum_{n \in \mathbb{Z}} \mathrm{yfun}(q^n u) + s_1(q), the sums being unconditional tsums over \mathbb{Z}.
Relation to Mathlib
Mathlib has no Tate curve or Tate parametrisation; these definitions are the project's own, built on Mathlib's ultrametric normed-field API and its summability criterion for nonarchimedean additive groups.
Where it is used
The pair (\mathrm{pointX}, \mathrm{pointY}) is the image of u under the Tate parametrisation of the curve y^2 + xy = x^3 + a_4(q)x + a_6(q) whose coefficients are the q-series of the companion module, so that K^\times/q^{\mathbb{Z}} maps to the points of that curve. This is the analytic input for the local study at primes of potentially multiplicative reduction.
References
- J. H. Silverman, Advanced Topics in the Arithmetic of Elliptic Curves, Graduate Texts in Mathematics 151, Springer, 1994, Chapter V
- J. Tate, A review of non-Archimedean elliptic functions, in: Elliptic Curves, Modular Forms, and Fermat's Last Theorem, Series in Number Theory I, International Press, 1995, 162–184
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 191 lines
- 23 declarations
- used in the statements of 22 theorems and imported by 24 proofs
- imports 1 definition modules
Source file: Definitions/Def_TateCurve_PointSeries.lean
Imports
Declarations
- theorem
TateCurve.nnnorm_one_sub_of_one_lt - theorem
TateCurve.one_sub_ne_zero_of_one_lt - def
TateCurve.xfun - def
TateCurve.yfun - theorem
TateCurve.xfun_zero - theorem
TateCurve.yfun_zero - theorem
TateCurve.xfun_inv - theorem
TateCurve.yfun_inv - theorem
TateCurve.nnnorm_xfun_of_lt_one - theorem
TateCurve.nnnorm_xfun_of_one_lt - theorem
TateCurve.nnnorm_yfun_of_lt_one - theorem
TateCurve.nnnorm_yfun_of_one_lt - def
TateCurve.xTerm - def
TateCurve.yTerm - theorem
TateCurve.xTerm_zero - theorem
TateCurve.yTerm_zero - theorem
TateCurve.summable_comp_zpow_mul - theorem
TateCurve.summable_xTerm - theorem
TateCurve.summable_yTerm - def
TateCurve.s₁ - def
TateCurve.pointX - def
TateCurve.pointY - theorem
TateCurve.nnnorm_s₁_le
Source
import Mathlib import Definitions.Def_TateCurve_QSeries set_option autoImplicit false open scoped NNReal open IsUltrametricDist Filter namespace TateCurve variable {K : Type*} [NontriviallyNormedField K] [IsUltrametricDist K] section Ultrametric theorem nnnorm_one_sub_of_one_lt {x : K} (hx : 1 < ‖x‖₊) : ‖1 - x‖₊ = ‖x‖₊ := by have h : ‖(1 : K)‖₊ ≠ ‖-x‖₊ := by rw [nnnorm_neg, nnnorm_one] exact ne_of_lt hx rw [sub_eq_add_neg, nnnorm_add_eq_max_of_nnnorm_ne_nnnorm h, nnnorm_neg, nnnorm_one] exact max_eq_right hx.le theorem one_sub_ne_zero_of_one_lt {x : K} (hx : 1 < ‖x‖₊) : (1 : K) - x ≠ 0 := by intro h rw [sub_eq_zero] at h rw [← h, nnnorm_one] at hx exact lt_irrefl 1 hx end Ultrametric section RationalFunctions def xfun (w : K) : K := w / (1 - w) ^ 2 def yfun (w : K) : K := w ^ 2 / (1 - w) ^ 3 @[simp] theorem xfun_zero : xfun (0 : K) = 0 := by simp [xfun] @[simp] theorem yfun_zero : yfun (0 : K) = 0 := by simp [yfun] theorem xfun_inv {w : K} (hw0 : w ≠ 0) (hw1 : w ≠ 1) : xfun w⁻¹ = xfun w := by have h1 : (1 : K) - w ≠ 0 := sub_ne_zero.mpr (Ne.symm hw1) have hvw : w⁻¹ * w = 1 := inv_mul_cancel₀ hw0 have hv1 : (1 : K) - w⁻¹ ≠ 0 := by rw [sub_ne_zero] intro h apply hw1 rw [← inv_inv w, ← h, inv_one] rw [xfun, xfun, div_eq_div_iff (pow_ne_zero 2 hv1) (pow_ne_zero 2 h1)] linear_combination (w - w⁻¹) * hvw theorem yfun_inv {w : K} (hw0 : w ≠ 0) (hw1 : w ≠ 1) : yfun w⁻¹ = -yfun w - xfun w := by have h1 : (1 : K) - w ≠ 0 := sub_ne_zero.mpr (Ne.symm hw1) have hvw : w⁻¹ * w = 1 := inv_mul_cancel₀ hw0 have hv1 : (1 : K) - w⁻¹ ≠ 0 := by rw [sub_ne_zero] intro h apply hw1 rw [← inv_inv w, ← h, inv_one] have hx3 : xfun w = w * (1 - w) / (1 - w) ^ 3 := by rw [xfun, div_eq_div_iff (pow_ne_zero 2 h1) (pow_ne_zero 3 h1)] ring have hrhs : -yfun w - xfun w = -w / (1 - w) ^ 3 := by rw [yfun, hx3, ← neg_div, ← sub_div, div_eq_div_iff (pow_ne_zero 3 h1) (pow_ne_zero 3 h1)] ring rw [hrhs, yfun, div_eq_div_iff (pow_ne_zero 3 hv1) (pow_ne_zero 3 h1)] linear_combination (-(w⁻¹ ^ 2) - w⁻¹ * w ^ 2 + 3 * (w⁻¹ * w) - w) * hvw theorem nnnorm_xfun_of_lt_one {w : K} (hw : ‖w‖₊ < 1) : ‖xfun w‖₊ = ‖w‖₊ := by rw [xfun, nnnorm_div, nnnorm_pow, nnnorm_one_sub_of_lt_one hw, one_pow, div_one] theorem nnnorm_xfun_of_one_lt {w : K} (hw : 1 < ‖w‖₊) : ‖xfun w‖₊ = ‖w‖₊⁻¹ := by have hw0 : ‖w‖₊ ≠ 0 := (zero_lt_one.trans hw).ne' rw [xfun, nnnorm_div, nnnorm_pow, nnnorm_one_sub_of_one_lt hw] have h2 : ‖w‖₊ ^ 2 = ‖w‖₊ * ‖w‖₊ := by ring rw [h2, div_mul_eq_div_div, div_self hw0, one_div] theorem nnnorm_yfun_of_lt_one {w : K} (hw : ‖w‖₊ < 1) : ‖yfun w‖₊ = ‖w‖₊ ^ 2 := by rw [yfun, nnnorm_div, nnnorm_pow, nnnorm_pow, nnnorm_one_sub_of_lt_one hw, one_pow, div_one] theorem nnnorm_yfun_of_one_lt {w : K} (hw : 1 < ‖w‖₊) : ‖yfun w‖₊ = ‖w‖₊⁻¹ := by have hw0 : ‖w‖₊ ≠ 0 := (zero_lt_one.trans hw).ne' rw [yfun, nnnorm_div, nnnorm_pow, nnnorm_pow, nnnorm_one_sub_of_one_lt hw] have h3 : ‖w‖₊ ^ 3 = ‖w‖₊ ^ 2 * ‖w‖₊ := by ring rw [h3, div_mul_eq_div_div, div_self (pow_ne_zero 2 hw0), one_div] end RationalFunctions section Terms variable (q u : K) def xTerm (n : ℤ) : K := xfun (q ^ n * u) def yTerm (n : ℤ) : K := yfun (q ^ n * u) @[simp] theorem xTerm_zero : xTerm q u 0 = xfun u := by rw [xTerm, zpow_zero, one_mul] @[simp] theorem yTerm_zero : yTerm q u 0 = yfun u := by rw [yTerm, zpow_zero, one_mul] variable {q u} theorem summable_comp_zpow_mul [CompleteSpace K] {F : K → K} (hq0 : q ≠ 0) (hq : ‖q‖₊ < 1) (hu0 : u ≠ 0) (hF₁ : ∀ w : K, ‖w‖₊ < 1 → ‖F w‖₊ ≤ ‖w‖₊) (hF₂ : ∀ w : K, 1 < ‖w‖₊ → ‖F w‖₊ ≤ ‖w‖₊⁻¹) : Summable fun n : ℤ => F (q ^ n * u) := by have hq' : ‖q‖ < 1 := by exact_mod_cast hq have hu' : (0 : ℝ) < ‖u‖ := norm_pos_iff.mpr hu0 have hpow := tendsto_pow_atTop_nhds_zero_of_lt_one (norm_nonneg q) hq' apply Summable.of_nat_of_neg_add_one · apply NonarchimedeanAddGroup.summable_of_tendsto_cofinite_zero rw [Nat.cofinite_eq_atTop] have hlim : Tendsto (fun n : ℕ => ‖q‖ ^ n * ‖u‖) atTop (nhds 0) := by simpa using hpow.mul_const ‖u‖ refine squeeze_zero_norm' ?_ hlim filter_upwards [hlim.eventually_lt_const one_pos] with n hn have hn' : ‖q ^ (n : ℤ) * u‖₊ < 1 := by rw [nnnorm_mul, nnnorm_zpow, zpow_natCast] exact_mod_cast hn calc ‖F (q ^ (n : ℤ) * u)‖ ≤ ‖q ^ (n : ℤ) * u‖ := by exact_mod_cast hF₁ _ hn' _ = ‖q‖ ^ n * ‖u‖ := by rw [norm_mul, norm_zpow, zpow_natCast] · apply NonarchimedeanAddGroup.summable_of_tendsto_cofinite_zero rw [Nat.cofinite_eq_atTop] have hlim : Tendsto (fun n : ℕ => ‖q‖ ^ n * ‖u‖⁻¹) atTop (nhds 0) := by simpa using hpow.mul_const ‖u‖⁻¹ refine squeeze_zero_norm' ?_ hlim filter_upwards [hpow.eventually_lt_const hu'] with n hn have hqpos : (0 : ℝ≥0) < ‖q‖₊ := by simpa [pos_iff_ne_zero] using hq0 have hqn : (0 : ℝ≥0) < ‖q‖₊ ^ (n + 1) := pow_pos hqpos _ have hnlt : ‖q‖₊ ^ (n + 1) < ‖u‖₊ := by have h1 : ‖q‖₊ ^ (n + 1) ≤ ‖q‖₊ ^ n := pow_le_pow_of_le_one zero_le hq.le (Nat.le_succ n) exact h1.trans_lt (by exact_mod_cast hn) have hexp : q ^ (-((n : ℤ) + 1)) = (q ^ (n + 1) : K)⁻¹ := by rw [show -((n : ℤ) + 1) = -(((n + 1 : ℕ) : ℤ)) by push_cast; ring, zpow_neg, zpow_natCast] have hval : ‖q ^ (-((n : ℤ) + 1)) * u‖₊ = (‖q‖₊ ^ (n + 1))⁻¹ * ‖u‖₊ := by rw [hexp, nnnorm_mul, nnnorm_inv, nnnorm_pow] have hgt : 1 < ‖q ^ (-((n : ℤ) + 1)) * u‖₊ := by rw [hval] calc (1 : ℝ≥0) = (‖q‖₊ ^ (n + 1))⁻¹ * ‖q‖₊ ^ (n + 1) := (inv_mul_cancel₀ hqn.ne').symm _ < (‖q‖₊ ^ (n + 1))⁻¹ * ‖u‖₊ := mul_lt_mul_of_pos_left hnlt (pos_iff_ne_zero.mpr (inv_ne_zero hqn.ne')) have hbound : ‖F (q ^ (-((n : ℤ) + 1)) * u)‖₊ ≤ ‖q‖₊ ^ n * ‖u‖₊⁻¹ := by refine (hF₂ _ hgt).trans ?_ rw [hval, mul_inv, inv_inv] exact mul_le_mul_left (pow_le_pow_of_le_one zero_le hq.le (Nat.le_succ n)) _ calc ‖F (q ^ (-((n : ℤ) + 1)) * u)‖ ≤ ((‖q‖₊ ^ n * ‖u‖₊⁻¹ : ℝ≥0) : ℝ) := by exact_mod_cast hbound _ = ‖q‖ ^ n * ‖u‖⁻¹ := by push_cast; ring theorem summable_xTerm [CompleteSpace K] (hq0 : q ≠ 0) (hq : ‖q‖₊ < 1) (hu0 : u ≠ 0) : Summable (xTerm q u) := summable_comp_zpow_mul hq0 hq hu0 (fun _ hw => (nnnorm_xfun_of_lt_one hw).le) (fun _ hw => (nnnorm_xfun_of_one_lt hw).le) theorem summable_yTerm [CompleteSpace K] (hq0 : q ≠ 0) (hq : ‖q‖₊ < 1) (hu0 : u ≠ 0) : Summable (yTerm q u) := summable_comp_zpow_mul hq0 hq hu0 (fun w hw => by rw [nnnorm_yfun_of_lt_one hw] calc ‖w‖₊ ^ 2 ≤ ‖w‖₊ ^ 1 := pow_le_pow_of_le_one zero_le hw.le one_le_two _ = ‖w‖₊ := pow_one _) (fun _ hw => (nnnorm_yfun_of_one_lt hw).le) end Terms section PointSeries variable [CompleteSpace K] (q u : K) noncomputable def s₁ : K := coeffSum (fun n => n) q noncomputable def pointX : K := (∑' n : ℤ, xTerm q u n) - 2 * s₁ q noncomputable def pointY : K := (∑' n : ℤ, yTerm q u n) + s₁ q variable {q u} theorem nnnorm_s₁_le (hq : ‖q‖₊ < 1) : ‖s₁ q‖₊ ≤ ‖q‖₊ := nnnorm_coeffSum_le _ hq end PointSeries end TateCurve
Statements phrased using this module (22)
- Analytic Tate curve at q=tᵖ equals the formal Tate base
ModularCurve.tateCurve_curve_X_pow_eq_tateBase0 below · depth 19 - Closed form of the Tate x-coordinate at a constant point
ModularCurve.tateCurve_pointX_C_eq_tateToricPoint_fst0 below · depth 19 - Tate parametrisation at u=c t^j: closed form for X
ModularCurve.tateCurve_pointX_C_mul_X_pow_eq_nonToricPoint_fst2 below · depth 19 - Division polynomial vanishes at Tate N-torsion abscissae
TateCurve.isRoot_prePsi_curve_pointX_laurentSeries35 below · depth 19 - Divisor-sum q-expansion of the Tate X-coordinate
TateCurve.pointX_qExpansion5 below · depth 19 - Divisor-sum q-expansion of the Tate curve Y-coordinate
TateCurve.pointY_qExpansion5 below · depth 19 - Geometric series for w/(1-w)² over an ultrametric field
TateCurve.hasSum_xfun0 below · depth 20 - Power series expansion of w²/(1-w)³
TateCurve.hasSum_yfun0 below · depth 20 - Normal form of the Tate X-coordinate
TateCurve.pointX_normalForm2 below · depth 20 - Normal form of the Tate Y-coordinate
TateCurve.pointY_normalForm2 below · depth 20 - Tate ordinate at a constant point over F((t))
ModularCurve.tateCurve_pointY_C_eq_tateToricPoint_snd0 below · depth 21 - Invariance of the Tate X-series under u ↦ u⁻¹
TateCurve.pointX_inv0 below · depth 21 - Invariance of the Tate X-series under u ↦ qu
TateCurve.pointX_q_mul0 below · depth 21 - Invariance of X under the lattice q^ℤ
TateCurve.pointX_zpow_mul1 below · depth 21 - Invariance of Y under multiplication by qⁿ
TateCurve.pointY_zpow_mul1 below · depth 21 - Additivity of Tate's parametrisation on the unit circle
TateCurve.point_mul_eq_add_of_norm_eq_one0 below · depth 21 - s₁(q) as the sum of qⁿ/(1-qⁿ)²
TateCurve.sOne_eq_tsum_xfun1 below · depth 21 - Invariance of the Tate Y-series under u ↦ qu
TateCurve.pointY_q_mul0 below · depth 22 - The Tate parametrisation lands on the nodal cubic
TateCurve.nodal_xfun_yfun0 below · depth 23 - Inversion formula for the Y-coordinate of the Tate parametrisation
TateCurve.pointY_inv0 below · depth 23 - Tate ordinate at u = c t^j equals the non-toric slot point
ModularCurve.tateCurve_pointY_C_mul_X_pow_eq_nonToricPoint_snd2 below · depth 26 - Additivity of the Tate parametrisation on the fundamental annulus
TateCurve.point_mul_eq_add_of_norm_le_one0 below · depth 26