FLT/KnownIn1980s/EllipticCurves/TateCurveConstruction.lean
Explanation legend Lean4 Domain Explanation Language (L4DEL)
L4DEL explanations are a separate layer. They do not change the Lean source. Intuition is explanatory prose; numbered items are a reading path; sources link the wording back to evidence.
- L4DEL
- Lean4 Domain Explanation Language
Credit: The upstream authors and contributors retain credit for the project and mathematics. lean4-explainer only renders their pinned source and adds the separately disclosed explanation layer.
Project sources: Pinned project documentation, Pinned FLT blueprint introduction
128 declarations, 0 contain sorry, 0 declared as axioms
The power series identity underlying the construction of the Tate curve
If k is a nonarchimedean local field and q ∈ kˣ has |q| < 1, then Tate showed
that kˣ/qᶻ is the group of k-points of an elliptic curve E_q/k with Weierstrass
equation y² + xy = x³ + a₄(q)x + a₆(q), for certain explicit power series a₄ and
a₆ in q with integer coefficients; the map kˣ → E_q(k) is given by explicit
power series X(u,q) and Y(u,q) in q whose coefficients are Laurent polynomials
in u.
The purely algebraic input to this construction is the identity
Y² + XY = X³ + a₄X + a₆ in ℚ(u)⟦q⟧, which this file states and proves
(TateCurve.weierstrass_equation). The identity is extracted from Theorem V.1.1 of
[Silverman, Advanced topics in the arithmetic of elliptic curves], where it is
deduced from the complex-analytic theory of the Weierstrass ℘-function, using also
its supporting results Theorem I.6.2 (the q-expansions of ℘ and ℘') and
Theorem I.7.1 (the q-expansions of g₂ and g₃); see also the remark "In other
words, we want to verify that this identity holds in the ring ℚ(u)[[q]]" in
Silverman's proof of Theorem V.3.1(c).
Silverman's argument is complex-analytic, so an extra step (which Silverman leaves
implicit) is needed to descend from an identity of convergent series of complex numbers
to the identity of formal power series over ℚ(u): the coefficients of both sides are
rational functions of u, and the analytic identity shows that they agree at infinitely
many complex values of u, hence they agree in ℚ(u).
Strategy of the proof
Fix τ in the upper half plane and z ∈ ℂ, and set q = e(τ), u = e(z), where
e(w) = exp(2πiw); let Λ_τ = ℤτ + ℤ (the PeriodPair.lattice of the pair (τ, 1)).
q-expansions (Silverman I.6.2, I.7.1). Prove℘(z; Λ_τ) = (2πi)²(1/12 + Xₐ(u, q))(weierstrassP_q_expansion),℘'(z; Λ_τ) = (2πi)³(Xₐ(u, q) + 2Yₐ(u, q))(derivWeierstrassP_q_expansion),g₂(Λ_τ) = (2πi)⁴(1 + 240s₃(q))/12(g₂_q_expansion),g₃(Λ_τ) = -(2πi)⁶(1 - 504s₅(q))/216(g₃_q_expansion),
where
Xₐ,Yₐ,sₖare the analytic functions defined below (sums overn : ℤ, resp. the convergent version ofTateCurve.s). The main tool is the "row sum" identity∑_{m : ℤ} (w + m)⁻ᵏ = ((-2πi)ᵏ/(k-1)!) ∑_{d ≥ 1} dᵏ⁻¹ e(w)ᵈ, obtained by differentiating the classical partial-fraction expansion of the cotangent; this isEisensteinSeries.qExpansion_identityin Mathlib (see alsocot_series_repandpi_mul_cot_pi_q_exp).The analytic Weierstrass equation (Silverman V.1.1(a)). Substitute the expansions of step 1 into the differential equation
℘'² = 4℘³ - g₂℘ - g₃(Mathlib'sPeriodPair.derivWeierstrassP_sq) and simplify; after dividing by(2πi)⁶and by4, everything cancels to giveanalytic_weierstrass:Yₐ² + XₐYₐ = Xₐ³ - 5s₃Xₐ - (5s₃ + 7s₅)/12.Rearrangement. For
0 < ‖q‖ < ‖u‖ < 1, expand each term of the sums overn : ℤdefiningXₐ,Yₐas a geometric-type series (v/(1-v)² = ∑ m vᵐ,v²/(1-v)³ = ∑ (m choose 2) vᵐfor‖v‖ < 1), and rearrange the resulting absolutely convergent double series by powers ofq. The coefficients that appear are exactly the coefficients of the formal seriesXandYevaluated atu(hasSum_X_eval,hasSum_Y_eval; for transcendentalu, so that evaluation of coefficients atuis a ring homomorphism).Descent. If
F ∈ ℚ(u)⟦q⟧is such that, for infinitely manyu₀ ∈ ℂ, the series∑ₙ Fₙ(u₀)q₀ⁿconverges with sum0for all sufficiently small nonzeroq₀, thenF = 0(eq_zero_of_forall_hasSum_zero): indeed eachFₙ(u₀)vanishes by uniqueness of coefficients of convergent power series, and a rational function with infinitely many zeros is zero. Applying this toF = Y² + XY - X³ - a₄X - a₆withu₀ranging over the (uncountably many, hence infinitely many) transcendental points of the punctured unit disc, steps 2 and 3 provide the vanishing hypothesis, andTateCurve.weierstrass_equationfollows.
The supporting material lives in the namespace TateCurve.Blueprint.
Implementation notes
We work in (RatFunc ℚ)⟦X⟧, formal power series over the field ℚ(u) of rational
functions. Beware of the clash of notation: the power series variable (written q
above and in the references) is PowerSeries.X, whereas the rational function
variable u is RatFunc.X, and neither has anything to do with the coordinate X
on the curve, which is the power series TateCurve.X defined below.
There is also the possibility of a purely algebraic proof of the identity, avoiding complex analysis entirely; see https://mathoverflow.net/questions/469021/low-level-proof-of-identity-related-to-weierstrass-p-function This file does not take that route.
Other notes
Main statements written by Kevin Buzzard, slop proofs written by William Coram and Samual Yin, final clean-up done by codex, file now compiles in a couple of seconds.
Imports (11)
- Mathlib.FieldTheory.RatFunc.AsPolynomial
- Mathlib.NumberTheory.ArithmeticFunction.Misc
- Mathlib.RingTheory.PowerSeries.Basic
- Mathlib.Analysis.SpecialFunctions.Elliptic.Weierstrass
- Mathlib.NumberTheory.LSeries.RiemannZeta
- Mathlib.Algebra.AlgebraicCard
- Mathlib.Analysis.Complex.UpperHalfPlane.Exp
- Mathlib.Analysis.SpecificLimits.Normed
- Mathlib.NumberTheory.ModularForms.EisensteinSeries.QExpansion
- Mathlib.NumberTheory.TsumDivisorsAntidiagonal
- Mathlib.NumberTheory.ZetaValues
Imported by 1 file
- def
TateCurve.sThe power seriessₖ = ∑_{n ≥ 1} σₖ(n)qⁿ ∈ ℚ(u)⟦q⟧(whereσₖ(n)is the sum of thekth powers of the positive divisors ofn) line 136 sourceSource documentation
The power series
sₖ = ∑_{n ≥ 1} σₖ(n)qⁿ ∈ ℚ(u)⟦q⟧(whereσₖ(n)is the sum of thekth powers of the positive divisors ofn). Up to a normalising constant, these are theq-expansions of the Eisenstein series of weightk + 1.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Nat,PowerSeries,RatFunc,RatProof uses:
PowerSeries.mk,ArithmeticFunction,ArithmeticFunction.sigma14 instances, coercions and auxiliary constants left out.
def s (k : ℕ) : (RatFunc ℚ)⟦X⟧ := .mk fun n ↦ (σ k n : RatFunc ℚ)
Mentions: TateCurve.X
- def
TateCurve.a₄The coefficienta₄ = -5s₃ = -5q - 45q² - ⋯of the Tate curvey² + xy = x³ + a₄x + a₆line 140 sourceSource documentation
The coefficient
a₄ = -5s₃ = -5q - 45q² - ⋯of the Tate curvey² + xy = x³ + a₄x + a₆.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
PowerSeries,RatFunc,RatProof uses:
HMul.hMul,Unit,Neg.neg,OfNat.ofNat, TateCurve.s,Nat23 instances, coercions and auxiliary constants left out.
def a₄ : (RatFunc ℚ)⟦X⟧ := -5 * s 3
Mentions: TateCurve.X, TateCurve.s
- def
TateCurve.a₆The coefficienta₆ = -(5s₃ + 7s₅)/12 = -q - 23q² - ⋯of the Tate curvey² + xy = x³ + a₄x + a₆line 146 sourceSource documentation
The coefficient
a₆ = -(5s₃ + 7s₅)/12 = -q - 23q² - ⋯of the Tate curvey² + xy = x³ + a₄x + a₆. (Division by12is implemented as scalar multiplication by12⁻¹ ∈ ℚ(u); note that5σ₃(n) + 7σ₅(n)is always divisible by12, soa₆in fact has integer coefficients, though we do not need this.)standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
PowerSeries,RatFunc,RatProof uses:
HSMul.hSMul,Unit,Inv.inv,OfNat.ofNat,Neg.neg,HAdd.hAdd,HMul.hMul, TateCurve.s,Nat36 instances, coercions and auxiliary constants left out.
def a₆ : (RatFunc ℚ)⟦X⟧ := (12 : RatFunc ℚ)⁻¹ • -(5 * s 3 + 7 * s 5)
Mentions: TateCurve.X, TateCurve.s
- def
TateCurve.XThe power seriesX(u,q) = u/(1-u)² + ∑_{n ≥ 1} (∑_{d ∣ n} d(uᵈ + u⁻ᵈ - 2)) qⁿ ∈ ℚ(u)⟦q⟧, thex-coordinate of the uniformisationkˣ/qᶻ ≃ E_q(k)of the Tate curve line 151 sourceSource documentation
The power series
X(u,q) = u/(1-u)² + ∑_{n ≥ 1} (∑_{d ∣ n} d(uᵈ + u⁻ᵈ - 2)) qⁿ ∈ ℚ(u)⟦q⟧, thex-coordinate of the uniformisationkˣ/qᶻ ≃ E_q(k)of the Tate curve.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
PowerSeries,RatFunc,RatProof uses:
HAdd.hAdd,Unit,RingHom,PowerSeries.C,HDiv.hDiv,RatFunc.X,HPow.hPow,Nat,HSub.hSub,OfNat.ofNat,PowerSeries.mk,Finset.sum,Nat.divisors,HMul.hMul,Inv.inv38 instances, coercions and auxiliary constants left out.
def X : (RatFunc ℚ)⟦X⟧ := …
- def
TateCurve.YDocumented declaration: Y line 158 sourceSource documentation
The power series
Y(u,q) = u²/(1-u)³ + ∑_{n ≥ 1} (∑_{d ∣ n} ((d choose 2)uᵈ - (d+1 choose 2)u⁻ᵈ + d)) qⁿinℚ(u)⟦q⟧, they-coordinate of the uniformisationkˣ/qᶻ ≃ E_q(k)of the Tate curve.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
PowerSeries,RatFunc,RatProof uses:
HAdd.hAdd,Unit,RingHom,PowerSeries.C,HDiv.hDiv,HPow.hPow,Nat,RatFunc.X,OfNat.ofNat,HSub.hSub,PowerSeries.mk,Finset.sum,Nat.divisors,HMul.hMul,Nat.choose,Inv.inv37 instances, coercions and auxiliary constants left out.
def Y : (RatFunc ℚ)⟦X⟧ := .C (u ^ 2 / (1 - u) ^ 3) + .mk fun n ↦ ∑ d ∈ n.divisors, …
Mentions: TateCurve.X
- def
TateCurve.Blueprint.ee z = exp (2πiz)line 168 sourceSource documentation
e z = exp (2πiz). We will takeu = e zandq = e τ.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
ComplexProof uses:
Complex.exp,HMul.hMul,OfNat.ofNat,Real.pi,Complex.I6 instances, coercions and auxiliary constants left out.
def e (z : ℂ) : ℂ := Complex.exp (2 * (Real.pi : ℂ) * I * z)
- lemma
TateCurve.Blueprint.e_ne_zeroline 170 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,Ne, TateCurve.Blueprint.e,OfNat.ofNatProof uses:
Complex.exp_ne_zero,HMul.hMul,Real.pi,Complex.I8 instances, coercions and auxiliary constants left out.
- lemma
TateCurve.Blueprint.e_addline 172 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,Eq, TateCurve.Blueprint.e,HAdd.hAdd,HMul.hMulProof uses:
Eq.mpr,Complex.exp,OfNat.ofNat,Real.pi,Complex.I,id,congrArg,of_eq_true,Eq.trans,Nat,True,congr,HPow.hPow,Nat.rawCast,Mathlib.Tactic.Ring.Common.mul_congr,Mathlib.Tactic.Ring.cast_pos,Mathlib.Meta.NormNum.isNat_ofNat,Eq.refl,Mathlib.Meta.NormNum.instAtLeastTwo,Mathlib.Tactic.Ring.Common.atom_pfand 22 more40 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
- lemma
TateCurve.Blueprint.e_negline 176 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,Eq, TateCurve.Blueprint.e,Neg.neg,Inv.invProof uses:
Eq.mpr,Complex.exp,HMul.hMul,OfNat.ofNat,Real.pi,Complex.I,id,congrArg,of_eq_true,Eq.trans,Nat,True,congr,HAdd.hAdd,HPow.hPow,Nat.rawCast,Int.rawCast,inferInstance,Ring,Int.negOfNatand 37 more49 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
- lemma
TateCurve.Blueprint.e_intMulline 180 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Int,Complex,Eq, TateCurve.Blueprint.e,HMul.hMul,HPow.hPowProof uses:
Eq.mpr,Complex.exp,OfNat.ofNat,Real.pi,Complex.I,id,congrArg,of_eq_true,Eq.trans,Nat,True,congr,HAdd.hAdd,Nat.rawCast,Mathlib.Tactic.Ring.Common.mul_congr,Mathlib.Tactic.Ring.cast_pos,Mathlib.Meta.NormNum.isNat_ofNat,Eq.refl,Mathlib.Meta.NormNum.instAtLeastTwo,Mathlib.Tactic.Ring.Common.atom_pfand 18 more48 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
- lemma
TateCurve.Blueprint.e_sub_intCast_mulline 184 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,Int,Eq, TateCurve.Blueprint.e,HSub.hSub,HMul.hMul,HPow.hPow,Neg.negProof uses:
Eq.mpr,HAdd.hAdd,id,congrArg,sub_eq_add_neg, TateCurve.Blueprint.e_add,mul_comm,Eq.symm,neg_mul,Int.cast_neg, TateCurve.Blueprint.e_intMul,Eq.refl47 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
- lemma
TateCurve.Blueprint.e_intCast_mul_natAbsline 187 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Int,LE.le,OfNat.ofNat,Complex,Eq, TateCurve.Blueprint.e,HMul.hMul,HPow.hPow,Nat,Int.natAbsProof uses:
Eq.mpr,id,congrArg,Eq.symm,Int.natAbs_of_nonneg, TateCurve.Blueprint.e_intMul,zpow_natCast,Eq.refl28 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
- lemma
TateCurve.Blueprint.e_neg_intCast_mul_natAbsline 191 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Int,LE.le,OfNat.ofNat,Complex,Eq, TateCurve.Blueprint.e,Neg.neg,HMul.hMul,HPow.hPow,Nat,Int.natAbsProof uses:
Eq.mpr,id,congrArg,Eq.symm,neg_mul,Int.cast_neg,Int.ofNat_natAbs_of_nonpos, TateCurve.Blueprint.e_intMul,zpow_natCast,Eq.refl44 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
- lemma
TateCurve.Blueprint.norm_eline 195 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,Eq,Real,Norm.norm, TateCurve.Blueprint.e,Real.exp,Neg.neg,HMul.hMul,OfNat.ofNat,Nat,Real.pi,Complex.imProof uses:
Eq.mpr,HSub.hSub,HAdd.hAdd,Complex.re,id,congrFun',congrArg,Eq.trans,Complex.exp,Complex.I,Complex.norm_exp,Complex.mul_re,congr,Complex.mul_im,of_eq_true,True,HPow.hPow,Nat.rawCast,Int.rawCast,inferInstanceand 43 more65 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
- lemma
TateCurve.Blueprint.norm_e_lt_oneline 200 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,LT.lt,Real,OfNat.ofNat,Complex.im,Norm.norm, TateCurve.Blueprint.eProof uses:
of_eq_true,Eq.trans,Neg.neg,HMul.hMul,Nat,Real.pi,True,Real.exp,congrFun',congrArg, TateCurve.Blueprint.norm_e,eq_true62 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
- lemma
TateCurve.Blueprint.norm_e_lt_norm_eline 203 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,LT.lt,Real,Complex.im,Norm.norm, TateCurve.Blueprint.eProof uses:
of_eq_true,Eq.trans,Neg.neg,HMul.hMul,OfNat.ofNat,Nat,Real.pi,True,Real.exp,congr,congrArg, TateCurve.Blueprint.norm_e,HAdd.hAdd,eq_true68 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
- lemma
TateCurve.Blueprint.two_pi_I_ne_zeroline 206 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Ne,Complex,HMul.hMul,OfNat.ofNat,Nat,Real.pi,Complex.IProof uses:
of_eq_true,Not,Eq,Eq.trans,False,True,congrArg,Or,congr,Real,or_self,not_false_eq_true40 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
- def
TateCurve.Blueprint.periodPairThe pair of periods(τ, 1), forτnot real line 210 sourceSource documentation
The pair of periods
(τ, 1), forτnot real. ItsPeriodPair.latticeisΛ_τ = ℤτ + ℤ.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,Ne,Real,Complex.im,OfNat.ofNat,PeriodPairProof uses:
PeriodPair.mk7 instances, coercions and auxiliary constants left out.
Tactic trace: 3 steps
Open to load the checked before-and-after goal states.
def periodPair (τ : ℂ) (hτ : τ.im ≠ 0) : PeriodPair where …
- lemma
TateCurve.Blueprint.periodPair_ω₁line 217 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,Ne,Real,Complex.im,OfNat.ofNat,Eq,PeriodPair.ω₁, TateCurve.Blueprint.periodPairProof uses:
rfl4 instances, coercions and auxiliary constants left out.
- lemma
TateCurve.Blueprint.periodPair_ω₂line 219 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,Ne,Real,Complex.im,OfNat.ofNat,Eq,PeriodPair.ω₂, TateCurve.Blueprint.periodPairProof uses:
rfl6 instances, coercions and auxiliary constants left out.
- lemma
TateCurve.Blueprint.hasSum_lattice_prodTransport of aHasSumover the latticeΛ_τ = ℤτ + ℤalong the reindexingℤ × ℤ ≃ Λ_τ,(n, m) ↦ nτ + mline 223 sourceSource documentation
Transport of a
HasSumover the latticeΛ_τ = ℤτ + ℤalong the reindexingℤ × ℤ ≃ Λ_τ,(n, m) ↦ nτ + m.private lemma hasSum_lattice_prod {τ : ℂ} (hτ : τ.im ≠ 0) {f : ℂ → ℂ} {S : ℂ} (h : HasSum (fun l : (periodPair τ hτ).lattice ↦ f l) S) : HasSum (fun p : ℤ × ℤ ↦ f (p.1 * τ + p.2)) S := by …Mentions: TateCurve.Blueprint.periodPair
- def
TateCurve.Blueprint.sAnThe convergent power seriessₖ(q) = ∑_{n ≥ 1} σₖ(n)qⁿ, for‖q‖ < 1(junk value otherwise); the evaluation of the formal seriesTateCurve.s katqline 232 sourceSource documentation
The convergent power series
sₖ(q) = ∑_{n ≥ 1} σₖ(n)qⁿ, for‖q‖ < 1(junk value otherwise); the evaluation of the formal seriesTateCurve.s katq. Convergence follows from the crude estimateσₖ(n) ≤ n^(k+1).standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Nat,ComplexProof uses:
tsum,HMul.hMul,ArithmeticFunction,ArithmeticFunction.sigma,HPow.hPow,SummationFilter.unconditional21 instances, coercions and auxiliary constants left out.
def sAn (k : ℕ) (q : ℂ) : ℂ := ∑' n : ℕ, (σ k n : ℂ) * q ^ n
- def
TateCurve.Blueprint.XAnThe analytic functionXₐ(u, q) = ∑_{n : ℤ} qⁿu/(1 - qⁿu)² - 2s₁(q), defined for0 < ‖q‖ < 1andu ∉ qᶻ(junk value otherwise) line 239 sourceSource documentation
The analytic function
Xₐ(u, q) = ∑_{n : ℤ} qⁿu/(1 - qⁿu)² - 2s₁(q), defined for0 < ‖q‖ < 1andu ∉ qᶻ(junk value otherwise). This is the function calledX(u, q)in [Silverman, Advanced topics, Theorem V.1.1]. The sum converges absolutely: the terms forn → ∞areO(‖q‖ⁿ), and likewise forn → -∞after rewritingv/(1-v)² = v⁻¹/(1-v⁻¹)²withv = qⁿu.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
ComplexProof uses:
HSub.hSub,tsum,Int,HDiv.hDiv,HMul.hMul,HPow.hPow,Nat,OfNat.ofNat,SummationFilter.unconditional, TateCurve.Blueprint.sAn28 instances, coercions and auxiliary constants left out.
def XAn (u q : ℂ) : ℂ := (∑' n : ℤ, q ^ n * u / (1 - q ^ n * u) ^ 2) - 2 * sAn 1 q
Mentions: TateCurve.Blueprint.sAn
- def
TateCurve.Blueprint.YAnThe analytic functionYₐ(u, q) = ∑_{n : ℤ} (qⁿu)²/(1 - qⁿu)³ + s₁(q), defined for0 < ‖q‖ < 1andu ∉ qᶻ(junk value otherwise) line 244 sourceSource documentation
The analytic function
Yₐ(u, q) = ∑_{n : ℤ} (qⁿu)²/(1 - qⁿu)³ + s₁(q), defined for0 < ‖q‖ < 1andu ∉ qᶻ(junk value otherwise). This is the function calledY(u, q)in [Silverman, Advanced topics, Theorem V.1.1].standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
ComplexProof uses:
HAdd.hAdd,tsum,Int,HDiv.hDiv,HPow.hPow,Nat,HMul.hMul,OfNat.ofNat,HSub.hSub,SummationFilter.unconditional, TateCurve.Blueprint.sAn27 instances, coercions and auxiliary constants left out.
def YAn (u q : ℂ) : ℂ := (∑' n : ℤ, (q ^ n * u) ^ 2 / (1 - q ^ n * u) ^ 3) + sAn 1 q
Mentions: TateCurve.Blueprint.sAn
- lemma
TateCurve.Blueprint.hasSum_choose_two_mul_geometricThe Lambert-type sum∑_{n ≥ 0} (n choose 2)rⁿ = r²/(1 - r)³for‖r‖ < 1, by shifting the index in∑' n, ((n + 2).choose 2) * rⁿ = 1/(1 - r)³line 258 sourceSource documentation
The Lambert-type sum
∑_{n ≥ 0} (n choose 2)rⁿ = r²/(1 - r)³for‖r‖ < 1, by shifting the index in∑' n, ((n + 2).choose 2) * rⁿ = 1/(1 - r)³.private lemma hasSum_choose_two_mul_geometric {r : ℂ} (hr : ‖r‖ < 1) : HasSum (fun n : ℕ ↦ ((n.choose 2 : ℕ) : ℂ) * r ^ n) (r ^ 2 * ((1 - r) ^ 3)⁻¹) := by … - lemma
TateCurve.Blueprint.tsum_sq_mul_geometric_of_norm_lt_oneDocumented declaration: tsum_sq_mul_geometric_of_norm_lt_one line 271 sourceSource documentation
The Lambert-type sum
∑_{n ≥ 0} n²rⁿ = r(1 + r)/(1 - r)³for‖r‖ < 1, from then(n-1)/2- andn-sums (hasSum_choose_two_mul_geometric,hasSum_coe_mul_geometric_of_norm_lt_one).private lemma tsum_sq_mul_geometric_of_norm_lt_one {r : ℂ} (hr : ‖r‖ < 1) : ∑' n : ℕ, (n : ℂ) ^ 2 * r ^ n = r * (1 + r) / (1 - r) ^ 3 := by … - lemma
TateCurve.Blueprint.sum_int_inv_pow_succRow sum, exponentk + 1 ≥ 2, with the Lambert sum in series form: forwin the upper half plane,∑_{m : ℤ} (w + m)⁻⁽ᵏ⁺¹⁾ = ((-2πi)ᵏ⁺¹/k!) ∑_{d ≥ 0} dᵏ e(w)ᵈline 293 sourceSource documentation
Row sum, exponent
k + 1 ≥ 2, with the Lambert sum in series form: forwin the upper half plane,∑_{m : ℤ} (w + m)⁻⁽ᵏ⁺¹⁾ = ((-2πi)ᵏ⁺¹/k!) ∑_{d ≥ 0} dᵏ e(w)ᵈ. This isEisensteinSeries.qExpansion_identity.private lemma sum_int_inv_pow_succ (w : ℂ) (hw : 0 < w.im) {k : ℕ} (hk : 1 ≤ k) : ∑' m : ℤ, ((w + m) ^ (k + 1))⁻¹ = (-2 * (Real.pi : ℂ) * I) ^ (k + 1) / (k.factorial : ℂ) * ∑' d : ℕ, (d : ℂ) ^ k * e w ^ d := by …Mentions: TateCurve.Blueprint.e
- theorem
TateCurve.Blueprint.sum_int_inv_sqRow sum, exponent2: forwin the upper half plane,∑_{m : ℤ} (w + m)⁻² = (2πi)² e(w)/(1 - e(w))²line 303 sourceSource documentation
Row sum, exponent
2: forwin the upper half plane,∑_{m : ℤ} (w + m)⁻² = (2πi)² e(w)/(1 - e(w))². This is the casek = 1ofsum_int_inv_pow_succtogether with the closed form of the Lambert sum.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,LT.lt,Real,OfNat.ofNat,Complex.im,Eq,tsum,Int,Inv.inv,HPow.hPow,Nat,HAdd.hAdd,SummationFilter.unconditional,HMul.hMul,Real.pi,Complex.I,HDiv.hDiv, TateCurve.Blueprint.e,HSub.hSubProof uses:
of_eq_true,Eq.trans,True,congrFun',congrArg,Neg.neg,Nat.factorial,le_rfl,congr,neg_mul,Even.neg_pow,Even,Nat.cast_one,div_one,SummationFilter,optParam,funext,pow_one,tsum_coe_mul_geometric_of_norm_lt_one, TateCurve.Blueprint.norm_e_lt_one and 1 more114 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
theorem sum_int_inv_sq (w : ℂ) (hw : 0 < w.im) : ∑' m : ℤ, ((w + m) ^ 2)⁻¹ = (2 * (Real.pi : ℂ) * I) ^ 2 * (e w / (1 - e w) ^ 2) := by …Mentions: TateCurve.Blueprint.e
- theorem
TateCurve.Blueprint.sum_int_inv_cubeDocumented declaration: sum_int_inv_cube line 312 sourceSource documentation
Row sum, exponent
3: forwin the upper half plane,∑_{m : ℤ} (w + m)⁻³ = -(2πi)³/2 ⬝ e(w)(1 + e(w))/(1 - e(w))³(note the sign: the exponent is odd, and the general formula has(-2πi)ᵏ/(k-1)!). This is the casek = 2ofsum_int_inv_pow_succtogether with the closed form of the Lambert sum.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,LT.lt,Real,OfNat.ofNat,Complex.im,Eq,tsum,Int,Inv.inv,HPow.hPow,Nat,HAdd.hAdd,SummationFilter.unconditional,HMul.hMul,HDiv.hDiv,Neg.neg,Real.pi,Complex.I, TateCurve.Blueprint.e,HSub.hSubProof uses:
Nat.factorial,one_le_two,Eq.mpr,id,congrArg, TateCurve.Blueprint.norm_e_lt_one,Mathlib.Tactic.Ring.of_eq,Nat.rawCast,Int.rawCast,inferInstance,Ring,Int.negOfNat,Mathlib.Tactic.Ring.Common.mul_congr,Mathlib.Tactic.Ring.Common.div_congr,Mathlib.Tactic.Ring.Common.pow_congr,Mathlib.Tactic.Ring.Common.neg_congr,Mathlib.Tactic.Ring.cast_pos,Mathlib.Meta.NormNum.isNat_ofNat,Eq.refl,Mathlib.Meta.NormNum.instAtLeastTwoand 67 more125 instances, coercions and auxiliary constants left out.
Tactic trace: 4 steps
Open to load the checked before-and-after goal states.
theorem sum_int_inv_cube (w : ℂ) (hw : 0 < w.im) : ∑' m : ℤ, ((w + m) ^ 3)⁻¹ = -(2 * (Real.pi : ℂ) * I) ^ 3 / 2 * (e w * (1 + e w) / (1 - e w) ^ 3) := by …Mentions: TateCurve.Blueprint.e
- lemma
TateCurve.Blueprint.summable_int_inv_pow∑_{m : ℤ} (w + m)⁻ᵏconverges (absolutely) for everywandk ≥ 2line 321 sourceSource documentation
∑_{m : ℤ} (w + m)⁻ᵏconverges (absolutely) for everywandk ≥ 2.private lemma summable_int_inv_pow (w : ℂ) {k : ℕ} (hk : 2 ≤ k) : Summable fun m : ℤ ↦ ((w + m) ^ k)⁻¹ := … - lemma
TateCurve.Blueprint.summable_comp_negline 326 source - lemma
TateCurve.Blueprint.summable_int_inv_pow_subline 330 source - lemma
TateCurve.Blueprint.tsum_int_inv_pow_subline 334 source - lemma
TateCurve.Blueprint.tsum_int_inv_pow_negEvenness of the row sum underw ↦ -w, for even exponents line 340 sourceSource documentation
Evenness of the row sum under
w ↦ -w, for even exponents.private lemma tsum_int_inv_pow_neg (w : ℂ) {k : ℕ} (hk : Even k) : ∑' m : ℤ, ((w + m) ^ k)⁻¹ = ∑' m : ℤ, ((-w + m) ^ k)⁻¹ := by … - lemma
TateCurve.Blueprint.tsum_int_inv_pow_neg_oddOddness of the row sum underw ↦ -w, for odd exponents line 348 sourceSource documentation
Oddness of the row sum under
w ↦ -w, for odd exponents.private lemma tsum_int_inv_pow_neg_odd (w : ℂ) {k : ℕ} (hk : Odd k) : ∑' m : ℤ, ((w + m) ^ k)⁻¹ = -∑' m : ℤ, ((-w + m) ^ k)⁻¹ := by … - lemma
TateCurve.Blueprint.hasSum_int_inv_powThe Basel-type sums overℤ:∑_{m : ℤ} m⁻ᵏ = 2ζ(k)for evenk ≥ 2(them = 0term is junk0) line 357 sourceSource documentation
The Basel-type sums over
ℤ:∑_{m : ℤ} m⁻ᵏ = 2ζ(k)for evenk ≥ 2(them = 0term is junk0).private lemma hasSum_int_inv_pow {k : ℕ} (hk : 2 ≤ k) (hk2 : Even k) : HasSum (fun m : ℤ ↦ ((m : ℂ) ^ k)⁻¹) (2 * riemannZeta k) := by … - lemma
TateCurve.Blueprint.one_sub_inv_ne_zeroline 362 source - lemma
TateCurve.Blueprint.inv_div_one_sub_inv_sqThe rational-function identityv⁻¹/(1 - v⁻¹)² = v/(1 - v)²(true forv ≠ 0, includingv = 1where both sides are junk0) line 367 sourceSource documentation
The rational-function identity
v⁻¹/(1 - v⁻¹)² = v/(1 - v)²(true forv ≠ 0, includingv = 1where both sides are junk0).private lemma inv_div_one_sub_inv_sq {v : ℂ} (hv : v ≠ 0) : v⁻¹ / (1 - v⁻¹) ^ 2 = v / (1 - v) ^ 2 := by … - lemma
TateCurve.Blueprint.norm_pow_div_one_sub_pow_leNorm bound forvʲ/(1 - v)ᵏwhen‖v‖ ≤ a < 1line 375 sourceSource documentation
Norm bound for
vʲ/(1 - v)ᵏwhen‖v‖ ≤ a < 1.private lemma norm_pow_div_one_sub_pow_le {v : ℂ} {a : ℝ} (hva : ‖v‖ ≤ a) (ha : a < 1) (j k : ℕ) : ‖v ^ j / (1 - v) ^ k‖ ≤ ‖v‖ ^ j / (1 - a) ^ k := by … - lemma
TateCurve.Blueprint.summable_aux'If‖x‖ < 1and‖xy‖ < 1then∑_{n ≥ 1} (xⁿy)ʲ/(1 - xⁿy)ᵏconverges forj ≥ 1(the terms decay geometrically) line 389 sourceSource documentation
If
‖x‖ < 1and‖xy‖ < 1then∑_{n ≥ 1} (xⁿy)ʲ/(1 - xⁿy)ᵏconverges forj ≥ 1(the terms decay geometrically).private lemma summable_aux' {x y : ℂ} (hx : ‖x‖ < 1) (hxy : ‖x * y‖ < 1) {j k : ℕ} (hj : 1 ≤ j) : Summable fun n : ℕ ↦ (x ^ (n + 1) * y) ^ j / (1 - x ^ (n + 1) * y) ^ k := by … - lemma
TateCurve.Blueprint.summable_auxIf‖x‖ < 1and‖xy‖ < 1then∑_{n ≥ 1} xⁿy/(1 - xⁿy)²converges (the terms decay geometrically) line 405 sourceSource documentation
If
‖x‖ < 1and‖xy‖ < 1then∑_{n ≥ 1} xⁿy/(1 - xⁿy)²converges (the terms decay geometrically).private lemma summable_aux {x y : ℂ} (hx : ‖x‖ < 1) (hxy : ‖x * y‖ < 1) : Summable fun n : ℕ ↦ x ^ (n + 1) * y / (1 - x ^ (n + 1) * y) ^ 2 := … - lemma
TateCurve.Blueprint.sum_int_inv_sq'Extension ofsum_int_inv_sqtowin the lower half plane, using the evenness ofw ↦ ∑_m (w + m)⁻²and the invariance ofv/(1-v)²underv ↦ v⁻¹line 411 sourceSource documentation
Extension of
sum_int_inv_sqtowin the lower half plane, using the evenness ofw ↦ ∑_m (w + m)⁻²and the invariance ofv/(1-v)²underv ↦ v⁻¹.private lemma sum_int_inv_sq' (w : ℂ) (hw : w.im ≠ 0) : ∑' m : ℤ, ((w + m) ^ 2)⁻¹ = (2 * (Real.pi : ℂ) * I) ^ 2 * (e w / (1 - e w) ^ 2) := by …Mentions: TateCurve.Blueprint.e
- lemma
TateCurve.Blueprint.hasSum_int_inv_sqThe Basel problem overℤ:∑_{m : ℤ} m⁻² = π²/3(them = 0term is junk0) line 419 sourceSource documentation
The Basel problem over
ℤ:∑_{m : ℤ} m⁻² = π²/3(them = 0term is junk0).private lemma hasSum_int_inv_sq : HasSum (fun m : ℤ ↦ ((m : ℂ) ^ 2)⁻¹) ((Real.pi : ℂ) ^ 2 / 3) := by … - lemma
TateCurve.Blueprint.tsum_pnat_of_zeroDropping a vanishing0th term:∑'_{n : ℕ+} g n = ∑'_{n : ℕ} g nwheng 0 = 0(true without summability hypotheses, since both sides are junk simultaneously) line 427 sourceSource documentation
Dropping a vanishing
0th term:∑'_{n : ℕ+} g n = ∑'_{n : ℕ} g nwheng 0 = 0(true without summability hypotheses, since both sides are junk simultaneously).private lemma tsum_pnat_of_zero (g : ℕ → ℂ) (hg0 : g 0 = 0) : ∑' n : ℕ+, g n = ∑' n : ℕ, g n := by … - lemma
TateCurve.Blueprint.tsum_pnat_coe_mul_geometricThe Lambert sum overℕ+:∑_{c ≥ 1} c xᶜ = x/(1 - x)²for‖x‖ < 1line 436 sourceSource documentation
The Lambert sum over
ℕ+:∑_{c ≥ 1} c xᶜ = x/(1 - x)²for‖x‖ < 1.private lemma tsum_pnat_coe_mul_geometric {x : ℂ} (hx : ‖x‖ < 1) : ∑' c : ℕ+, (c : ℂ) * x ^ (c : ℕ) = x / (1 - x) ^ 2 := by … - lemma
TateCurve.Blueprint.summable_corr_natline 441 source - lemma
TateCurve.Blueprint.tsum_V_natThe Lambert-to-divisor-sum rearrangement:∑_{n ≥ 0} qⁿ/(1 - qⁿ)² = ∑_{N ≥ 1} σ₁(N)qᴺ(then = 0term is junk0) line 448 sourceSource documentation
The Lambert-to-divisor-sum rearrangement:
∑_{n ≥ 0} qⁿ/(1 - qⁿ)² = ∑_{N ≥ 1} σ₁(N)qᴺ(then = 0term is junk0).private lemma tsum_V_nat {q : ℂ} (hq1 : ‖q‖ < 1) : ∑' n : ℕ, q ^ n / (1 - q ^ n) ^ 2 = sAn 1 q := by …Mentions: TateCurve.Blueprint.sAn
- lemma
TateCurve.Blueprint.summable_corr_intline 464 source - lemma
TateCurve.Blueprint.tsum_corr_intThe corrector sum overℤ:∑_{n : ℤ} qⁿ/(1 - qⁿ)² = 2∑_{N ≥ 1} σ₁(N)qᴺ(then = 0term is junk0, andn ↔ -nare equal) line 474 sourceSource documentation
The corrector sum over
ℤ:∑_{n : ℤ} qⁿ/(1 - qⁿ)² = 2∑_{N ≥ 1} σ₁(N)qᴺ(then = 0term is junk0, andn ↔ -nare equal).private lemma tsum_corr_int {q : ℂ} (hq0 : q ≠ 0) (hq1 : ‖q‖ < 1) : ∑' n : ℤ, q ^ n / (1 - q ^ n) ^ 2 = 2 * sAn 1 q := by …Mentions: TateCurve.Blueprint.sAn
- lemma
TateCurve.Blueprint.norm_mul_lt_one‖qu‖ < 1when‖q‖ < ‖u‖ < 1line 499 sourceSource documentation
‖qu‖ < 1when‖q‖ < ‖u‖ < 1.private lemma norm_mul_lt_one {u q : ℂ} (hqu : ‖q‖ < ‖u‖) (hu1 : ‖u‖ < 1) : ‖q * u‖ < 1 := by … - lemma
TateCurve.Blueprint.norm_mul_inv_lt_one‖qu⁻¹‖ < 1when0 < ‖q‖ < ‖u‖line 505 sourceSource documentation
‖qu⁻¹‖ < 1when0 < ‖q‖ < ‖u‖.private lemma norm_mul_inv_lt_one {u q : ℂ} (hq0 : 0 < ‖q‖) (hqu : ‖q‖ < ‖u‖) : ‖q * u⁻¹‖ < 1 := by … - lemma
TateCurve.Blueprint.zpow_neg_natCast_mulThe substitutionv ↦ v⁻¹onv = qⁿu⁻¹producesq⁻ⁿuline 511 sourceSource documentation
The substitution
v ↦ v⁻¹onv = qⁿu⁻¹producesq⁻ⁿu.private lemma zpow_neg_natCast_mul (q u : ℂ) (n : ℕ) : q ^ (-(n : ℤ)) * u = (q ^ n * u⁻¹)⁻¹ := by … - lemma
TateCurve.Blueprint.summable_VSummability of the series definingXAn, for0 < ‖q‖ < ‖u‖ < 1line 516 sourceSource documentation
Summability of the series defining
XAn, for0 < ‖q‖ < ‖u‖ < 1.private lemma summable_V {u q : ℂ} (hq0 : q ≠ 0) (hqu : ‖q‖ < ‖u‖) (hu1 : ‖u‖ < 1) : Summable fun n : ℤ ↦ q ^ n * u / (1 - q ^ n * u) ^ 2 := by … - lemma
TateCurve.Blueprint.im_sub_int_mul_ne_zeroFor0 < im z < im τ, every rowz - nτavoids the real axis line 532 sourceSource documentation
For
0 < im z < im τ, every rowz - nτavoids the real axis.private lemma im_sub_int_mul_ne_zero {τ z : ℂ} (hτ : 0 < τ.im) (hz : 0 < z.im) (hzτ : z.im < τ.im) (n : ℤ) : (z - n * τ).im ≠ 0 := by … - lemma
TateCurve.Blueprint.corrector_row_evalDocumented declaration: corrector_row_eval line 542 sourceSource documentation
The corrector rows of the
℘-expansion:∑_{m : ℤ} (nτ + m)⁻² = (2πi)² V(qⁿ) + [n = 0]π²/3whereV(v) = v/(1-v)²(the rown = 0is the Basel problem, and itsV-term is junk0).private lemma corrector_row_eval {τ : ℂ} (hτ : 0 < τ.im) (n : ℤ) : ∑' m : ℤ, (((n * τ + m : ℂ)) ^ 2)⁻¹ = (2 * (Real.pi : ℂ) * I) ^ 2 * (e τ ^ n / (1 - e τ ^ n) ^ 2) + if n = 0 then (Real.pi : ℂ) ^ 2 / 3 else 0 := by …Mentions: TateCurve.Blueprint.e
- theorem
TateCurve.Blueprint.weierstrassP_q_expansionDocumented declaration: weierstrassP_q_expansion line 568 sourceSource documentation
The
q-expansion of the Weierstrass℘-function (Silverman, Advanced topics, Theorem I.6.2): forτin the upper half plane and0 < im z < im τ(which forcesz ∉ Λ_τ),℘(z; Λ_τ) = (2πi)² (1/12 + Xₐ(e z, e τ)).Proof: group the absolutely convergent sum defining
℘into rowsω = nτ + m,n : ℤ(Fubini). The condition0 < im z < im τguaranteesim (z - nτ) ≠ 0for everyn, so each row evaluates viasum_int_inv_sq': the rowncontributes(2πi)² V(e(z - nτ)) - ∑_m (nτ + m)⁻²whereV v = v/(1-v)², the corrector being2ζ(2) = π²/3forn = 0(Basel) and(2πi)² V(qⁿ)forn ≠ 0. Summing overn, the first parts give(2πi)²(Xₐ + 2s₁(q)), the correctors give(2πi)² ⬝ 2s₁(q) + π²/3(Lambert/divisor-sum rearrangement,tsum_corr_int), and-π²/3 = (2πi)²/12.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,LT.lt,Real,OfNat.ofNat,Complex.im,Eq,PeriodPair.weierstrassP, TateCurve.Blueprint.periodPair,LT.lt.ne',HMul.hMul,HPow.hPow,Nat,Real.pi,Complex.I,HAdd.hAdd,HDiv.hDiv, TateCurve.Blueprint.XAn, TateCurve.Blueprint.eProof uses:
Ne, TateCurve.Blueprint.e_ne_zero,Norm.norm, TateCurve.Blueprint.norm_e_lt_one, TateCurve.Blueprint.norm_e_lt_norm_e,LT.lt.trans,HasSum,Prod,Int,HSub.hSub,Inv.inv,Prod.fst,Prod.snd,SummationFilter.unconditional,Eq.mp,Subtype,Membership.mem,Submodule,PeriodPair.lattice,congrFun'and 120 more172 instances, coercions and auxiliary constants left out.
Tactic trace: 25 steps
Open to load the checked before-and-after goal states.
theorem weierstrassP_q_expansion (τ : ℂ) (hτ : 0 < τ.im) (z : ℂ) (hz : 0 < z.im) (hzτ : z.im < τ.im) : ℘[periodPair τ hτ.ne'] z = (2 * (Real.pi : ℂ) * I) ^ 2 * (1 / 12 + XAn (e z) (e τ)) := by …Mentions: TateCurve.Blueprint.periodPair, TateCurve.Blueprint.XAn, TateCurve.Blueprint.e
- lemma
TateCurve.Blueprint.inv_sq_div_one_sub_inv_cubeThe rational-function identity(v⁻¹)²/(1 - v⁻¹)³ = -(v/(1 - v)³)forv ≠ 0line 619 sourceSource documentation
The rational-function identity
(v⁻¹)²/(1 - v⁻¹)³ = -(v/(1 - v)³)forv ≠ 0.private lemma inv_sq_div_one_sub_inv_cube {v : ℂ} (hv : v ≠ 0) : (v⁻¹) ^ 2 / (1 - v⁻¹) ^ 3 = -(v / (1 - v) ^ 3) := by … - lemma
TateCurve.Blueprint.inv_mul_one_add_inv_div_one_sub_inv_cubeThe rational-function identityv⁻¹(1 + v⁻¹)/(1 - v⁻¹)³ = -(v(1 + v)/(1 - v)³)forv ≠ 0: the function on the right-hand side ofsum_int_inv_cubeis odd underv ↦ v⁻¹line 629 sourceSource documentation
The rational-function identity
v⁻¹(1 + v⁻¹)/(1 - v⁻¹)³ = -(v(1 + v)/(1 - v)³)forv ≠ 0: the function on the right-hand side ofsum_int_inv_cubeis odd underv ↦ v⁻¹.private lemma inv_mul_one_add_inv_div_one_sub_inv_cube {v : ℂ} (hv : v ≠ 0) : v⁻¹ * (1 + v⁻¹) / (1 - v⁻¹) ^ 3 = -(v * (1 + v) / (1 - v) ^ 3) := by … - lemma
TateCurve.Blueprint.div_sq_add_two_mul_div_cubeDocumented declaration: div_sq_add_two_mul_div_cube line 639 sourceSource documentation
The rational-function identity
v/(1-v)² + 2v²/(1-v)³ = v(1+v)/(1-v)³recombining theXAnandYAnsummands into the℘'row sums (also true at the junk valuev = 1, where all terms are0).private lemma div_sq_add_two_mul_div_cube (v : ℂ) : v / (1 - v) ^ 2 + 2 * (v ^ 2 / (1 - v) ^ 3) = v * (1 + v) / (1 - v) ^ 3 := by … - lemma
TateCurve.Blueprint.sum_int_inv_cube'Extension ofsum_int_inv_cubetowin the lower half plane line 649 sourceSource documentation
Extension of
sum_int_inv_cubetowin the lower half plane. In contrast to the square case, the row sum is odd underw ↦ -w, matching the oddness ofv(1+v)/(1-v)³underv ↦ v⁻¹.private lemma sum_int_inv_cube' (w : ℂ) (hw : w.im ≠ 0) : ∑' m : ℤ, ((w + m) ^ 3)⁻¹ = -(2 * (Real.pi : ℂ) * I) ^ 3 / 2 * (e w * (1 + e w) / (1 - e w) ^ 3) := by …Mentions: TateCurve.Blueprint.e
- lemma
TateCurve.Blueprint.summable_V₂Summability of the series definingYAn, for0 < ‖q‖ < ‖u‖ < 1line 659 sourceSource documentation
Summability of the series defining
YAn, for0 < ‖q‖ < ‖u‖ < 1.private lemma summable_V₂ {u q : ℂ} (hq0 : q ≠ 0) (hqu : ‖q‖ < ‖u‖) (hu1 : ‖u‖ < 1) : Summable fun n : ℤ ↦ (q ^ n * u) ^ 2 / (1 - q ^ n * u) ^ 3 := by … - theorem
TateCurve.Blueprint.derivWeierstrassP_q_expansionTheq-expansion of℘'(Silverman, Advanced topics, Theorem I.6.2): under the hypotheses ofweierstrassP_q_expansion,℘'(z; Λ_τ) = (2πi)³ (Xₐ(e z, e τ) + 2Yₐ(e z, e τ))line 684 sourceSource documentation
The
q-expansion of℘'(Silverman, Advanced topics, Theorem I.6.2): under the hypotheses ofweierstrassP_q_expansion,℘'(z; Λ_τ) = (2πi)³ (Xₐ(e z, e τ) + 2Yₐ(e z, e τ)).Proof: as for
weierstrassP_q_expansion, but simpler: group the absolutely convergent sum℘'(z) = -2∑_ω (z - ω)⁻³into rowsω = nτ + m(no regularising terms are needed here) and applysum_int_inv_cube'to each row. The identityv/(1-v)² + 2v²/(1-v)³ = v(1+v)/(1-v)³recombines the result intoXₐ + 2Yₐ.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,LT.lt,Real,OfNat.ofNat,Complex.im,Eq,PeriodPair.derivWeierstrassP, TateCurve.Blueprint.periodPair,LT.lt.ne',HMul.hMul,HPow.hPow,Nat,Real.pi,Complex.I,HAdd.hAdd, TateCurve.Blueprint.XAn, TateCurve.Blueprint.e, TateCurve.Blueprint.YAnProof uses:
Ne, TateCurve.Blueprint.e_ne_zero,Norm.norm, TateCurve.Blueprint.norm_e_lt_one, TateCurve.Blueprint.norm_e_lt_norm_e,HasSum,Prod,Int,HDiv.hDiv,Neg.neg,HSub.hSub,Prod.fst,Prod.snd,SummationFilter.unconditional,PeriodPair.hasSum_derivWeierstrassP,Summable,Summable.congr,Inv.inv,Summable.mul_left,Mathlib.Meta.NormNum.isNat_le_trueand 100 more153 instances, coercions and auxiliary constants left out.
Tactic trace: 18 steps
Open to load the checked before-and-after goal states.
theorem derivWeierstrassP_q_expansion (τ : ℂ) (hτ : 0 < τ.im) (z : ℂ) (hz : 0 < z.im) (hzτ : z.im < τ.im) : ℘'[periodPair τ hτ.ne'] z = (2 * (Real.pi : ℂ) * I) ^ 3 * (XAn (e z) (e τ) + 2 * YAn (e z) (e τ)) := by …Mentions: TateCurve.Blueprint.periodPair, TateCurve.Blueprint.XAn, TateCurve.Blueprint.e, TateCurve.Blueprint.YAn
- lemma
TateCurve.Blueprint.sum_int_inv_fourthRow sum, exponent4: forwin the upper half plane,∑_{m : ℤ} (w + m)⁻⁴ = (2πi)⁴/6 ⬝ ∑_{d ≥ 1} d³e(w)ᵈline 726 sourceSource documentation
Row sum, exponent
4: forwin the upper half plane,∑_{m : ℤ} (w + m)⁻⁴ = (2πi)⁴/6 ⬝ ∑_{d ≥ 1} d³e(w)ᵈ. This is the casek = 3ofsum_int_inv_pow_succ.private lemma sum_int_inv_fourth (w : ℂ) (hw : 0 < w.im) : ∑' m : ℤ, ((w + m) ^ 4)⁻¹ = (2 * (Real.pi : ℂ) * I) ^ 4 / 6 * ∑' d : ℕ, (d : ℂ) ^ 3 * e w ^ d := by …Mentions: TateCurve.Blueprint.e
- lemma
TateCurve.Blueprint.hasSum_int_inv_fourthThe Basel-type sum overℤin weight4:∑_{m : ℤ} m⁻⁴ = π⁴/45line 735 sourceSource documentation
The Basel-type sum over
ℤin weight4:∑_{m : ℤ} m⁻⁴ = π⁴/45.private lemma hasSum_int_inv_fourth : HasSum (fun m : ℤ ↦ ((m : ℂ) ^ 4)⁻¹) ((Real.pi : ℂ) ^ 4 / 45) := by … - lemma
TateCurve.Blueprint.not_summable_natCast_pow∑ dᵏdiverges; used to see that the Lambert series contributes junk0in then = 0row line 743 sourceSource documentation
∑ dᵏdiverges; used to see that the Lambert series contributes junk0in then = 0row.private lemma not_summable_natCast_pow (k : ℕ) : ¬ Summable fun d : ℕ ↦ (d : ℂ) ^ k := by …
- lemma
TateCurve.Blueprint.tsum_natCast_pow_mul_oneThe junk value of the Lambert series in the rown = 0:∑_{d ≥ 0} dʲ ⬝ 1ᵈ = 0, since the series diverges line 756 sourceSource documentation
The junk value of the Lambert series in the row
n = 0:∑_{d ≥ 0} dʲ ⬝ 1ᵈ = 0, since the series diverges.private lemma tsum_natCast_pow_mul_one (j : ℕ) : ∑' d : ℕ, (d : ℂ) ^ j * (1 : ℂ) ^ d = 0 := by … - lemma
TateCurve.Blueprint.tsum_tsum_pow_eq_sAnThe divisor-sum rearrangement∑_{n ≥ 0} ∑_{d ≥ 0} dʲ q^{nd} = sⱼ(q)for‖q‖ < 1andj ≠ 0(the rown = 0is junk0, and the termsd = 0vanish) line 762 sourceSource documentation
The divisor-sum rearrangement
∑_{n ≥ 0} ∑_{d ≥ 0} dʲ q^{nd} = sⱼ(q)for‖q‖ < 1andj ≠ 0(the rown = 0is junk0, and the termsd = 0vanish).private lemma tsum_tsum_pow_eq_sAn {q : ℂ} (hq1 : ‖q‖ < 1) {j : ℕ} (hj : j ≠ 0) : ∑' n : ℕ, ∑' d : ℕ, (d : ℂ) ^ j * (q ^ n) ^ d = sAn j q := by …Mentions: TateCurve.Blueprint.sAn
- lemma
TateCurve.Blueprint.tsum_int_lambert_natAbsThe two-tailed version:∑_{n : ℤ} ∑_{d ≥ 0} dʲ q^{|n|d} = 2sⱼ(q)for‖q‖ < 1andj ≠ 0, given summability of the rows line 776 sourceSource documentation
The two-tailed version:
∑_{n : ℤ} ∑_{d ≥ 0} dʲ q^{|n|d} = 2sⱼ(q)for‖q‖ < 1andj ≠ 0, given summability of the rows.private lemma tsum_int_lambert_natAbs {q : ℂ} (hq1 : ‖q‖ < 1) {j : ℕ} (hj : j ≠ 0) (hL : Summable fun n : ℤ ↦ ∑' d : ℕ, (d : ℂ) ^ j * (q ^ n.natAbs) ^ d) : ∑' n : ℤ, ∑' d : ℕ, (d : ℂ) ^ j * (q ^ n.natAbs) ^ d = 2 * sAn j q := by …Mentions: TateCurve.Blueprint.sAn
- lemma
TateCurve.Blueprint.row_eval_ne_zeroRowsn ≠ 0of an even-weight lattice sum, via a row-sum identityhrowvalid on the upper half plane (evenness reducesn < 0ton > 0) line 799 sourceSource documentation
Rows
n ≠ 0of an even-weight lattice sum, via a row-sum identityhrowvalid on the upper half plane (evenness reducesn < 0ton > 0).private lemma row_eval_ne_zero {τ : ℂ} (hτ : 0 < τ.im) {k j : ℕ} (hkeven : Even k) {C : ℂ} (hrow : ∀ w : ℂ, 0 < w.im → ∑' m : ℤ, ((w + m) ^ k)⁻¹ = C * ∑' d : ℕ, (d : ℂ) ^ j * e w ^ d) {n : ℤ} (hn : n ≠ 0) : ∑' m : ℤ, (((n : ℂ) * τ + m) ^ k)⁻¹ = C * ∑' d : ℕ, (d : ℂ) ^ j * (e τ ^ n.natAbs) ^ d := by …Mentions: TateCurve.Blueprint.e
- lemma
TateCurve.Blueprint.G_q_expansionDocumented declaration: G_q_expansion line 822 sourceSource documentation
Common core of
g₂_q_expansionandg₃_q_expansion: theq-expansion of the Eisenstein lattice sumG k = ∑_{ω ∈ Λ_τ} ω⁻ᵏfor evenk > 2, given the row-sum identity with constantC(which is(2πi)ᵏ/(k-1)!) and the valueZof the rown = 0(which is2ζ(k)). Reindex the lattice sum byℤ × ℤ, evaluate the rows (row_eval_ne_zero), and sum overnby Fubini and the divisor-sum rearrangement (tsum_int_lambert_natAbs), giving the coefficientsσⱼ,j = k - 1.private lemma G_q_expansion (τ : ℂ) (hτ : 0 < τ.im) {k j : ℕ} (hj : j ≠ 0) (hk : 2 < k) (hkeven : Even k) {C Z : ℂ} (hC : C ≠ 0) (hrow : ∀ w : ℂ, 0 < w.im → ∑' m : ℤ, ((w + m) ^ k)⁻¹ = C * ∑' d : ℕ, (d : ℂ) ^ j * e w ^ d) (hZ : HasSum (fun m : ℤ ↦ ((m : ℂ) ^ k)⁻¹) Z) : (periodPair τ hτ.ne').G k = Z + 2 * C * sAn j (e τ) := by …Mentions: TateCurve.Blueprint.e, TateCurve.Blueprint.periodPair, TateCurve.Blueprint.sAn
- theorem
TateCurve.Blueprint.g₂_q_expansionTheq-expansion ofg₂(Silverman, Advanced topics, Theorem I.7.1):g₂(Λ_τ) = (2πi)⁴/12 ⬝ (1 + 240s₃(q))line 868 sourceSource documentation
The
q-expansion ofg₂(Silverman, Advanced topics, Theorem I.7.1):g₂(Λ_τ) = (2πi)⁴/12 ⬝ (1 + 240s₃(q)).This is
g₂ = 60G₄and the casek = 4ofG_q_expansion, with row-sum identitysum_int_inv_fourthand2ζ(4) = π⁴/45(hasSum_int_inv_fourth).standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,LT.lt,Real,OfNat.ofNat,Complex.im,Eq,PeriodPair.g₂, TateCurve.Blueprint.periodPair,LT.lt.ne',HMul.hMul,HDiv.hDiv,HPow.hPow,Nat,Real.pi,Complex.I,HAdd.hAdd, TateCurve.Blueprint.sAn, TateCurve.Blueprint.eProof uses:
Eq.mpr,PeriodPair.G,id,congrArg,PeriodPair.g₂.eq_1,Mathlib.Meta.NormNum.isNat_eq_false,Mathlib.Meta.NormNum.isNat_ofNat,Eq.refl,Bool,Bool.false,Mathlib.Meta.NormNum.isNat_lt_true,Exists.intro,Mathlib.Meta.NormNum.isNat_eq_true,Mathlib.Meta.NormNum.isNat_add,div_ne_zero,pow_ne_zero, TateCurve.Blueprint.two_pi_I_ne_zero,Mathlib.Meta.NormNum.instAtLeastTwo,Nat.cast_zero,Mathlib.Tactic.Ring.of_eqand 69 more109 instances, coercions and auxiliary constants left out.
Tactic trace: 9 steps
Open to load the checked before-and-after goal states.
theorem g₂_q_expansion (τ : ℂ) (hτ : 0 < τ.im) : (periodPair τ hτ.ne').g₂ = (2 * (Real.pi : ℂ) * I) ^ 4 / 12 * (1 + 240 * sAn 3 (e τ)) := by …Mentions: TateCurve.Blueprint.periodPair, TateCurve.Blueprint.sAn, TateCurve.Blueprint.e
- theorem
TateCurve.Blueprint.bernoulli'_fiveline 880 source - theorem
TateCurve.Blueprint.bernoulli'_sixline 884 source - theorem
TateCurve.Blueprint.riemannZeta_sixThe valueζ(6) = π⁶/945(companion to Mathlib'sriemannZeta_four) line 890 sourceSource documentation
The value
ζ(6) = π⁶/945(companion to Mathlib'sriemannZeta_four).standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Eq,Complex,riemannZeta,OfNat.ofNat,Nat,HDiv.hDiv,HPow.hPow,Real.piProof uses:
HMul.hMul,Neg.neg,HAdd.hAdd,HSub.hSub,bernoulli,Nat.factorial,riemannZeta_two_mul_nat,Mathlib.Meta.NormNum.isNat_eq_false,Mathlib.Meta.NormNum.isNat_ofNat,Eq.refl,Bool,Bool.false,Eq.mpr,id,congrArg,Eq.mp,Mathlib.Meta.NormNum.isNat_eq_true,Mathlib.Meta.NormNum.isNat_mul,Mathlib.Meta.NormNum.instAtLeastTwo,Mathlib.Meta.NormNum.isNat_natCastand 66 more92 instances, coercions and auxiliary constants left out.
Tactic trace: 8 steps
Open to load the checked before-and-after goal states.
theorem riemannZeta_six : riemannZeta 6 = (π : ℂ) ^ 6 / 945 := by …
- lemma
TateCurve.Blueprint.sum_int_inv_sixthRow sum, exponent6: forwin the upper half plane,∑_{m : ℤ} (w + m)⁻⁶ = (2πi)⁶/120 ⬝ ∑_{d ≥ 1} d⁵e(w)ᵈline 900 sourceSource documentation
Row sum, exponent
6: forwin the upper half plane,∑_{m : ℤ} (w + m)⁻⁶ = (2πi)⁶/120 ⬝ ∑_{d ≥ 1} d⁵e(w)ᵈ. This is the casek = 5ofsum_int_inv_pow_succ.private lemma sum_int_inv_sixth (w : ℂ) (hw : 0 < w.im) : ∑' m : ℤ, ((w + m) ^ 6)⁻¹ = (2 * (Real.pi : ℂ) * I) ^ 6 / 120 * ∑' d : ℕ, (d : ℂ) ^ 5 * e w ^ d := by …Mentions: TateCurve.Blueprint.e
- lemma
TateCurve.Blueprint.hasSum_int_inv_sixthThe Basel-type sum overℤin weight6:∑_{m : ℤ} m⁻⁶ = 2ζ(6) = 2π⁶/945line 909 sourceSource documentation
The Basel-type sum over
ℤin weight6:∑_{m : ℤ} m⁻⁶ = 2ζ(6) = 2π⁶/945.private lemma hasSum_int_inv_sixth : HasSum (fun m : ℤ ↦ ((m : ℂ) ^ 6)⁻¹) (2 * ((Real.pi : ℂ) ^ 6 / 945)) := by … - theorem
TateCurve.Blueprint.g₃_q_expansionTheq-expansion ofg₃(Silverman, Advanced topics, Theorem I.7.1):g₃(Λ_τ) = -(2πi)⁶/216 ⬝ (1 - 504s₅(q))line 920 sourceSource documentation
The
q-expansion ofg₃(Silverman, Advanced topics, Theorem I.7.1):g₃(Λ_τ) = -(2πi)⁶/216 ⬝ (1 - 504s₅(q)).This is
g₃ = 140G₆and the casek = 6ofG_q_expansion, with row-sum identitysum_int_inv_sixthand2ζ(6) = 2π⁶/945(hasSum_int_inv_sixth).standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,LT.lt,Real,OfNat.ofNat,Complex.im,Eq,PeriodPair.g₃, TateCurve.Blueprint.periodPair,LT.lt.ne',HMul.hMul,HDiv.hDiv,Neg.neg,HPow.hPow,Nat,Real.pi,Complex.I,HSub.hSub, TateCurve.Blueprint.sAn, TateCurve.Blueprint.eProof uses:
Eq.mpr,PeriodPair.G,id,congrArg,PeriodPair.g₃.eq_1,HAdd.hAdd,Mathlib.Meta.NormNum.isNat_eq_false,Mathlib.Meta.NormNum.isNat_ofNat,Eq.refl,Bool,Bool.false,Mathlib.Meta.NormNum.isNat_lt_true,Exists.intro,Mathlib.Meta.NormNum.isNat_eq_true,Mathlib.Meta.NormNum.isNat_add,div_ne_zero,pow_ne_zero, TateCurve.Blueprint.two_pi_I_ne_zero,Mathlib.Meta.NormNum.instAtLeastTwo,Nat.cast_zeroand 79 more114 instances, coercions and auxiliary constants left out.
Tactic trace: 9 steps
Open to load the checked before-and-after goal states.
theorem g₃_q_expansion (τ : ℂ) (hτ : 0 < τ.im) : (periodPair τ hτ.ne').g₃ = -(2 * (Real.pi : ℂ) * I) ^ 6 / 216 * (1 - 504 * sAn 5 (e τ)) := by …Mentions: TateCurve.Blueprint.periodPair, TateCurve.Blueprint.sAn, TateCurve.Blueprint.e
- theorem
TateCurve.Blueprint.log_div_two_pi_I_imline 934 source - theorem
TateCurve.Blueprint.e_log_div_two_pi_Iline 940 source - theorem
TateCurve.Blueprint.notMem_lattice_of_im_betweenline 948 source - theorem
TateCurve.Blueprint.analytic_weierstrass_algebraline 964 source - theorem
TateCurve.Blueprint.analytic_weierstrass_of_expline 981 source - theorem
TateCurve.Blueprint.analytic_weierstrassThe analytic form of the main theorem (Silverman, Advanced topics, Theorem V.1.1(a)): for0 < ‖q‖ < ‖u‖ < 1,Yₐ² + XₐYₐ = Xₐ³ - 5s₃(q)Xₐ - (5s₃(q) + 7s₅(q))/12line 1002 sourceSource documentation
The analytic form of the main theorem (Silverman, Advanced topics, Theorem V.1.1(a)): for
0 < ‖q‖ < ‖u‖ < 1,Yₐ² + XₐYₐ = Xₐ³ - 5s₃(q)Xₐ - (5s₃(q) + 7s₅(q))/12.Proof sketch: the hypotheses ensure
u ∉ qᶻ, and we may choosez,τwithe z = u,e τ = q,0 < im z < im τ(soz ∉ Λ_τ). Substitute the fourq-expansions into the differential equation℘'² = 4℘³ - g₂℘ - g₃(PeriodPair.derivWeierstrassP_sq) and divide by(2πi)⁶and by4(analytic_weierstrass_algebra).standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,LT.lt,Real,OfNat.ofNat,Norm.norm,Eq,HAdd.hAdd,HPow.hPow,Nat, TateCurve.Blueprint.YAn,HMul.hMul, TateCurve.Blueprint.XAn,HSub.hSub, TateCurve.Blueprint.sAn,HDiv.hDivProof uses:
Complex.im,Complex.log,Real.pi,Complex.I,Eq.mpr,Neg.neg,Real.log,id,congrArg,div_pos,Iff.mpr,neg_pos,Real.log_neg_iff,mul_pos,Mathlib.Meta.Positivity.pos_of_isNat,Mathlib.Meta.NormNum.isNat_ofNat,Eq.refl,Mathlib.Meta.NormNum.instAtLeastTwo,Bool,Nat.bleand 8 more98 instances, coercions and auxiliary constants left out.
Tactic trace: 8 steps
Open to load the checked before-and-after goal states.
theorem analytic_weierstrass {u q : ℂ} (h0 : 0 < ‖q‖) (h1 : ‖q‖ < ‖u‖) (h2 : ‖u‖ < 1) : YAn u q ^ 2 + XAn u q * YAn u q = XAn u q ^ 3 - 5 * sAn 3 q * XAn u q - (5 * sAn 3 q + 7 * sAn 5 q) / 12 := by …Mentions: TateCurve.Blueprint.YAn, TateCurve.Blueprint.XAn, TateCurve.Blueprint.sAn
- def
TateCurve.Blueprint.evalAtEvaluation of a rational function inℚ(u)at a complex number, with junk value0at the (finitely many) poles line 1024 sourceSource documentation
Evaluation of a rational function in
ℚ(u)at a complex number, with junk value0at the (finitely many) poles.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,RatFunc,RatProof uses:
RatFunc.eval,Algebra.algebraMap10 instances, coercions and auxiliary constants left out.
def evalAt (u : ℂ) (r : RatFunc ℚ) : ℂ := r.eval (algebraMap ℚ ℂ) u
- def
TateCurve.Blueprint.evalAtHomFor transcendentalu, evaluation atuis a ring homomorphismℚ(u) →+* ℂ(there are no poles to produce junk values) line 1028 sourceSource documentation
For transcendental
u, evaluation atuis a ring homomorphismℚ(u) →+* ℂ(there are no poles to produce junk values).private noncomputable def evalAtHom (u : ℂ) (hu : Transcendental ℚ u) : RatFunc ℚ →+* ℂ where …
- theorem
TateCurve.Blueprint.evalAtHom_applyline 1035 source - theorem
TateCurve.Blueprint.evalAtHom_ratFuncXline 1040 source - lemma
TateCurve.Blueprint.hasSum_pnat_of_natline 1047 source - lemma
TateCurve.Blueprint.hasSum_nat_of_pnat_addline 1054 source - lemma
TateCurve.Blueprint.tsum_int_decompSplitting a summableℤ-indexed sum into the term at0and the two tails line 1065 sourceSource documentation
Splitting a summable
ℤ-indexed sum into the term at0and the two tails.private lemma tsum_int_decomp {f : ℤ → ℂ} (hf : Summable f) : ∑' n : ℤ, f n = f 0 + ∑' n : ℕ+, f ((n : ℕ) : ℤ) + ∑' n : ℕ+, f (-((n : ℕ) : ℤ)) := by … - lemma
TateCurve.Blueprint.hasSum_pnat_lambert₁line 1080 source - lemma
TateCurve.Blueprint.hasSum_pnat_lambert₂line 1084 source - lemma
TateCurve.Blueprint.hasSum_pnat_lambert₂'line 1089 source - lemma
TateCurve.Blueprint.norm_pow_mul_lt_oneIf‖q‖ < 1and‖q * y‖ < 1then‖qⁿy‖ < 1for everyn ≥ 1line 1108 sourceSource documentation
If
‖q‖ < 1and‖q * y‖ < 1then‖qⁿy‖ < 1for everyn ≥ 1.private lemma norm_pow_mul_lt_one {q y : ℂ} (hq1 : ‖q‖ < 1) (hqy : ‖q * y‖ < 1) (n : ℕ+) : ‖q ^ (n : ℕ) * y‖ < 1 := by … - lemma
TateCurve.Blueprint.cast_le_sqline 1115 source - lemma
TateCurve.Blueprint.choose_two_le_sqline 1120 source - lemma
TateCurve.Blueprint.choose_add_one_two_le_sqline 1124 source - lemma
TateCurve.Blueprint.summable_coeff_prodGeometric-decay summability of the double series∑ a(m)yᵐq^{nm}, for any coefficients of at most quadratic growth line 1134 sourceSource documentation
Geometric-decay summability of the double series
∑ a(m)yᵐq^{nm}, for any coefficients of at most quadratic growth.private lemma summable_coeff_prod {a : ℕ → ℂ} {x y : ℂ} (ha : ∀ m : ℕ+, ‖a (m : ℕ)‖ ≤ (((m : ℕ)) : ℝ) ^ 2) (hx : ‖x‖ < 1) (hxy : ‖x * y‖ < 1) : Summable fun p : ℕ+ × ℕ+ ↦ a (p.2 : ℕ) * y ^ (p.2 : ℕ) * x ^ ((p.1 : ℕ) * (p.2 : ℕ)) := by … - lemma
TateCurve.Blueprint.hasSum_prod_pnatA summable double series overℕ+ × ℕ+has sum the iterated sum of its rows line 1151 sourceSource documentation
A summable double series over
ℕ+ × ℕ+has sum the iterated sum of its rows.private lemma hasSum_prod_pnat {T : ℕ+ × ℕ+ → ℂ} {F : ℕ+ → ℂ} (hsum : Summable T) (hfib : ∀ n : ℕ+, HasSum (fun m : ℕ+ ↦ T (n, m)) (F n)) : HasSum T (∑' n : ℕ+, F n) := by … - lemma
TateCurve.Blueprint.hasSum_prod_lambertFubini for the Lambert-type double series with coefficientsaof at most quadratic growth, whose rows sum in closed form tog (qⁿy)line 1159 sourceSource documentation
Fubini for the Lambert-type double series with coefficients
aof at most quadratic growth, whose rows sum in closed form tog (qⁿy).private lemma hasSum_prod_lambert {q y : ℂ} (a : ℕ → ℂ) (g : ℂ → ℂ) (ha : ∀ m : ℕ+, ‖a (m : ℕ)‖ ≤ (((m : ℕ)) : ℝ) ^ 2) (hq1 : ‖q‖ < 1) (hqy : ‖q * y‖ < 1) (hg : ∀ v : ℂ, ‖v‖ < 1 → HasSum (fun m : ℕ+ ↦ a (m : ℕ) * v ^ (m : ℕ)) (g v)) : HasSum (fun p : ℕ+ × ℕ+ ↦ a (p.2 : ℕ) * y ^ (p.2 : ℕ) * q ^ ((p.1 : ℕ) * (p.2 : ℕ))) (∑' n : ℕ+, g (q ^ (n : ℕ) * y)) := … - lemma
TateCurve.Blueprint.hasSum_divisor_collectCollecting a double series∑_{n,m} g(m)x^{nm}by powers ofx: the coefficient ofx^Nis the divisor sum∑_{d ∣ N} g dline 1169 sourceSource documentation
Collecting a double series
∑_{n,m} g(m)x^{nm}by powers ofx: the coefficient ofx^Nis the divisor sum∑_{d ∣ N} g d.private lemma hasSum_divisor_collect (g : ℕ → ℂ) {x : ℂ} {S : ℂ} (hT : HasSum (fun p : ℕ+ × ℕ+ ↦ g (p.2 : ℕ) * x ^ ((p.1 : ℕ) * (p.2 : ℕ))) S) : HasSum (fun N : ℕ+ ↦ (∑ d ∈ (N : ℕ).divisors, g d) * x ^ (N : ℕ)) S := by … - lemma
TateCurve.Blueprint.hasSum_prodCThey = 1double series, with the divisor sums already recognised ass₁line 1191 sourceSource documentation
The
y = 1double series, with the divisor sums already recognised ass₁.private lemma hasSum_prodC {q : ℂ} (hq1 : ‖q‖ < 1) : HasSum (fun p : ℕ+ × ℕ+ ↦ ((p.2 : ℕ) : ℂ) * (1 : ℂ) ^ (p.2 : ℕ) * q ^ ((p.1 : ℕ) * (p.2 : ℕ))) (sAn 1 q) := by …Mentions: TateCurve.Blueprint.sAn
- theorem
TateCurve.Blueprint.coeff_X_of_neline 1203 source - theorem
TateCurve.Blueprint.evalAt_coeff_X_zeroline 1208 source - theorem
TateCurve.Blueprint.evalAt_coeff_Xline 1212 source - theorem
TateCurve.Blueprint.coeff_Y_of_neline 1219 source - theorem
TateCurve.Blueprint.evalAt_coeff_Y_zeroline 1225 source - theorem
TateCurve.Blueprint.evalAt_coeff_Yline 1229 source - theorem
TateCurve.Blueprint.hasSum_X_evalDocumented declaration: hasSum_X_eval line 1250 sourceSource documentation
Rearrangement for
X(extracted from Silverman's proof of Advanced topics, Theorem V.3.1(c)): for0 < ‖q‖ < ‖u‖ < 1withutranscendental (so that evaluation of coefficients atuis a ring homomorphism), the coefficients of the formal seriesTateCurve.Xevaluated atusum toXₐ(u, q).Proof: expand each term of
Xₐ: forn ≥ 1,qⁿu/(1 - qⁿu)² = ∑_{m ≥ 1} m qⁿᵐuᵐ(geometric series,‖qⁿu‖ < 1); forn ≤ -1withN = -n, the rational-function identityv/(1-v)² = v⁻¹/(1-v⁻¹)²givesqⁿu/(1 - qⁿu)² = ∑_{m ≥ 1} m qᴺᵐu⁻ᵐ(‖qᴺu⁻¹‖ < 1); and-2s₁(q) = -2∑_N (∑_{d ∣ N} d) qᴺ. All double series converge absolutely (summable_coeff_prod), so they may be collected by powers ofq(hasSum_divisor_collect), and the coefficient ofqᴺis exactly∑_{d ∣ N} d(uᵈ + u⁻ᵈ - 2).standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,Transcendental,Rat,LT.lt,Real,OfNat.ofNat,Norm.norm,HasSum,Nat,HMul.hMul, TateCurve.Blueprint.evalAt,LinearMap,RatFunc,RingHom.id,PowerSeries,Unit,PowerSeries.coeff, TateCurve.X,HPow.hPow, TateCurve.Blueprint.XAn and 1 moreProof uses:
Ne,Iff.mp,norm_pos_iff,LT.lt.trans,Prod,PNat,Prod.snd,Prod.fst,tsum,HDiv.hDiv,HSub.hSub,Inv.inv,Finset.sum,Nat.divisors,HAdd.hAdd, TateCurve.Blueprint.sAn,HasSum.congr_fun,HasSum.sub,HasSum.add,HasSum.mul_leftand 95 more202 instances, coercions and auxiliary constants left out.
Tactic trace: 17 steps
Open to load the checked before-and-after goal states.
theorem hasSum_X_eval {u q : ℂ} (hu : Transcendental ℚ u) (h0 : 0 < ‖q‖) (h1 : ‖q‖ < ‖u‖) (h2 : ‖u‖ < 1) : HasSum (fun n : ℕ ↦ evalAt u ((PowerSeries.coeff n) X) * q ^ n) (XAn u q) := by …Mentions: TateCurve.Blueprint.evalAt, TateCurve.X, TateCurve.Blueprint.XAn
- theorem
TateCurve.Blueprint.hasSum_Y_evalRearrangement forY: for0 < ‖q‖ < ‖u‖ < 1withutranscendental, the coefficients of the formal seriesTateCurve.Yevaluated atusum toYₐ(u, q)line 1289 sourceSource documentation
Rearrangement for
Y: for0 < ‖q‖ < ‖u‖ < 1withutranscendental, the coefficients of the formal seriesTateCurve.Yevaluated atusum toYₐ(u, q).Proof: as for
hasSum_X_eval, usingv²/(1-v)³ = ∑_{m ≥ 1} (m choose 2) vᵐfor the rowsn ≥ 1, the rational-function identityv²/(1-v)³ = -v⁻¹/(1-v⁻¹)³together withv/(1-v)³ = ∑_{m ≥ 1} ((m+1) choose 2) vᵐfor the rowsn ≤ -1, ands₁(q) = ∑_N (∑_{d ∣ N} d) qᴺfor the correction term.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,Transcendental,Rat,LT.lt,Real,OfNat.ofNat,Norm.norm,HasSum,Nat,HMul.hMul, TateCurve.Blueprint.evalAt,LinearMap,RatFunc,RingHom.id,PowerSeries,Unit,PowerSeries.coeff, TateCurve.Y,HPow.hPow, TateCurve.Blueprint.YAn and 1 moreProof uses:
Ne,Iff.mp,norm_pos_iff,LT.lt.trans,Prod,PNat,Nat.choose,Prod.snd,Prod.fst,tsum,HDiv.hDiv,HSub.hSub,HAdd.hAdd,Inv.inv,Finset.sum,Nat.divisors, TateCurve.Blueprint.sAn,HasSum.congr_fun,HasSum.add,HasSum.suband 96 more200 instances, coercions and auxiliary constants left out.
Tactic trace: 17 steps
Open to load the checked before-and-after goal states.
theorem hasSum_Y_eval {u q : ℂ} (hu : Transcendental ℚ u) (h0 : 0 < ‖q‖) (h1 : ‖q‖ < ‖u‖) (h2 : ‖u‖ < 1) : HasSum (fun n : ℕ ↦ evalAt u ((PowerSeries.coeff n) Y) * q ^ n) (YAn u q) := by …Mentions: TateCurve.Blueprint.evalAt, TateCurve.Y, TateCurve.Blueprint.YAn
- theorem
TateCurve.Blueprint.evalAt_ratCastline 1327 source - theorem
TateCurve.Blueprint.summable_sAn_termsline 1331 source - theorem
TateCurve.Blueprint.ofNat_powerSeries_eq_Cline 1339 source - theorem
TateCurve.Blueprint.coeff_a₆line 1344 source - theorem
TateCurve.Blueprint.evalAt_coeff_a₆line 1351 source - theorem
TateCurve.Blueprint.coeff_a₄line 1356 source - theorem
TateCurve.Blueprint.evalAt_coeff_a₄line 1364 source - theorem
TateCurve.Blueprint.hasSum_a₄_evalThe coefficients of the formal seriesa₄evaluated at anyusum to-5s₃(q)for‖q‖ < 1line 1371 sourceSource documentation
The coefficients of the formal series
a₄evaluated at anyusum to-5s₃(q)for‖q‖ < 1. (The coefficients are constants, so this is just the convergence of∑ σ₃(n)qⁿ.)standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,LT.lt,Real,Norm.norm,OfNat.ofNat,HasSum,Nat,HMul.hMul, TateCurve.Blueprint.evalAt,LinearMap,RatFunc,Rat,RingHom.id,PowerSeries,Unit,PowerSeries.coeff, TateCurve.a₄,HPow.hPow,Neg.neg, TateCurve.Blueprint.sAn and 1 moreProof uses:
HasSum.congr_fun,ArithmeticFunction,ArithmeticFunction.sigma,tsum,HasSum.mul_left,Summable.hasSum,Eq.mpr,Eq,id,congrArg,Mathlib.Tactic.Ring.of_eq,HAdd.hAdd,Nat.rawCast,Int.rawCast,inferInstance,Ring,Int.negOfNat,Mathlib.Tactic.Ring.Common.mul_congr,Mathlib.Tactic.Ring.Common.neg_congr,Mathlib.Tactic.Ring.cast_posand 32 more119 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
theorem hasSum_a₄_eval (u : ℂ) {q : ℂ} (hq : ‖q‖ < 1) : HasSum (fun n : ℕ ↦ evalAt u ((PowerSeries.coeff n) a₄) * q ^ n) (-5 * sAn 3 q) := …Mentions: TateCurve.Blueprint.evalAt, TateCurve.a₄, TateCurve.Blueprint.sAn
- theorem
TateCurve.Blueprint.hasSum_a₆_evalThe coefficients of the formal seriesa₆evaluated at anyusum to-(5s₃(q) + 7s₅(q))/12for‖q‖ < 1line 1378 sourceSource documentation
The coefficients of the formal series
a₆evaluated at anyusum to-(5s₃(q) + 7s₅(q))/12for‖q‖ < 1.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Complex,LT.lt,Real,Norm.norm,OfNat.ofNat,HasSum,Nat,HMul.hMul, TateCurve.Blueprint.evalAt,LinearMap,RatFunc,Rat,RingHom.id,PowerSeries,Unit,PowerSeries.coeff, TateCurve.a₆,HPow.hPow,HDiv.hDiv,Neg.negand 3 moreProof uses:
HasSum.congr_fun,ArithmeticFunction,ArithmeticFunction.sigma,tsum,HasSum.div_const,HasSum.neg,HasSum.add,HasSum.mul_left,Summable.hasSum,Eq.mpr,Eq,id,congrArg,Mathlib.Tactic.Ring.of_eq,Nat.rawCast,Rat.rawCast,Int.negOfNat,Mathlib.Tactic.Ring.Common.mul_congr,Mathlib.Tactic.Ring.Common.div_congr,Int.rawCastand 55 more150 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
theorem hasSum_a₆_eval (u : ℂ) {q : ℂ} (hq : ‖q‖ < 1) : HasSum (fun n : ℕ ↦ evalAt u ((PowerSeries.coeff n) a₆) * q ^ n) (-(5 * sAn 3 q + 7 * sAn 5 q) / 12) := …Mentions: TateCurve.Blueprint.evalAt, TateCurve.a₆, TateCurve.Blueprint.sAn
- theorem
TateCurve.Blueprint.coeffs_eq_zero_of_hasSum_puncturedline 1387 source - theorem
TateCurve.Blueprint.ratFunc_eq_zero_of_evalAt_eq_zero_on_infiniteline 1405 source - theorem
TateCurve.Blueprint.eq_zero_of_forall_hasSum_zeroDocumented declaration: eq_zero_of_forall_hasSum_zero line 1431 sourceSource documentation
The descent lemma: a formal power series
F ∈ ℚ(u)⟦q⟧vanishes provided that, for infinitely manyu₀ : ℂ, the evaluated series∑ₙ Fₙ(u₀)q₀ⁿconverges with sum0for all sufficiently small nonzeroq₀.Proof sketch: fix
u₀. The functionq₀ ↦ ∑ₙ Fₙ(u₀)q₀ⁿis analytic on‖q₀‖ < r(a power series converging pointwise on a disc is analytic there) and vanishes on the punctured disc, hence at0by continuity; by uniqueness of power series coefficients,Fₙ(u₀) = 0for alln. So for eachnthe rational functionFₙvanishes at infinitely many points ofℂ(junk values at the finitely many poles ofFₙdo not matter, as removing them leaves an infinite set), hence its numerator has infinitely many roots andFₙ = 0(Polynomial.eq_zero_of_infinite_isRoot).standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
PowerSeries,RatFunc,Rat,Set,Complex,Set.Infinite,Membership.mem,Exists,Real,And,GT.gt,OfNat.ofNat,LT.lt,Norm.norm,HasSum,Nat,HMul.hMul, TateCurve.Blueprint.evalAt,LinearMap,RingHom.idand 5 moreProof uses:
PowerSeries.ext,congrFun77 instances, coercions and auxiliary constants left out.
Tactic trace: 4 steps
Open to load the checked before-and-after goal states.
theorem eq_zero_of_forall_hasSum_zero (F : (RatFunc ℚ)⟦X⟧) (S : Set ℂ) (hS : S.Infinite) (h : ∀ u ∈ S, ∃ r > 0, ∀ q : ℂ, 0 < ‖q‖ → ‖q‖ < r → HasSum (fun n : ℕ ↦ evalAt u ((PowerSeries.coeff n) F) * q ^ n) 0) : F = 0 := by …Mentions: TateCurve.X, TateCurve.Blueprint.evalAt
- theorem
TateCurve.Blueprint.hasSum_evalAt_addline 1440 source - theorem
TateCurve.Blueprint.hasSum_evalAt_negline 1452 source - theorem
TateCurve.Blueprint.hasSum_evalAt_subline 1461 source - theorem
TateCurve.Blueprint.hasSum_evalAt_mulline 1468 source - theorem
TateCurve.Blueprint.transcendental_punctured_unit_disk_infiniteline 1484 source - theorem
TateCurve.weierstrass_equationThe point(X(u,q), Y(u,q))satisfies the Weierstrass equationy² + xy = x³ + a₄x + a₆of the Tate curve, as an identity inℚ(u)⟦q⟧line 1527 sourceSource documentation
The point
(X(u,q), Y(u,q))satisfies the Weierstrass equationy² + xy = x³ + a₄x + a₆of the Tate curve, as an identity inℚ(u)⟦q⟧.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Eq,PowerSeries,RatFunc,Rat,HAdd.hAdd,Unit,HPow.hPow,Nat, TateCurve.Y,OfNat.ofNat,HMul.hMul, TateCurve.X, TateCurve.a₄, TateCurve.a₆Proof uses:
Eq.mpr,HSub.hSub,id,congrArg,Eq.symm,propext,sub_eq_zero, TateCurve.Blueprint.eq_zero_of_forall_hasSum_zero,Set.ofPred,Complex,And,Transcendental,LT.lt,Real,Norm.norm,Membership.mem,Set,Exists.intro,GT.gt,HasSumand 114 more137 instances, coercions and auxiliary constants left out.
Tactic trace: 16 steps
Open to load the checked before-and-after goal states.
theorem weierstrass_equation : Y ^ 2 + X * Y = X ^ 3 + a₄ * X + a₆ := by …
Mentions: TateCurve.Y, TateCurve.X, TateCurve.a₄, TateCurve.a₆