-
Notifications
You must be signed in to change notification settings - Fork 1.2k
[Merged by Bors] - feat(NumberTheory/ModularForms): the Dedekind Eta function #28400
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from 32 commits
Commits
Show all changes
35 commits
Select commit
Hold shift + click to select a range
ed2eb15
open
CBirkbeck dc50298
save
CBirkbeck d6c2526
Merge remote-tracking branch 'upstream/master' into Dedekind_eta
CBirkbeck 64bf79f
update
CBirkbeck f80072a
save
CBirkbeck 6c8f169
remove logderiv stuff
CBirkbeck d0416ab
remove logderiv stuff
CBirkbeck e7eed91
remove logderiv stuff
CBirkbeck 46f2afa
remove stuff
CBirkbeck 4ed6485
save
CBirkbeck 07bb88d
update with complexupperhalfplane
CBirkbeck 6ed01ba
clean
CBirkbeck 0804f62
clean more
CBirkbeck 7266763
clean more
CBirkbeck d310781
arrows
CBirkbeck eec7f0d
Merge remote-tracking branch 'upstream/master' into Dedekind_eta
CBirkbeck 5e81cc0
golf
CBirkbeck a145d41
rev updates
CBirkbeck 4b99d29
typo
CBirkbeck 532866d
typo
CBirkbeck 0a387e5
update
CBirkbeck ae4f93c
hide I
CBirkbeck dc72f90
remove etaProdTerm
CBirkbeck ce15717
first clean
CBirkbeck 01efbda
rev fixes
CBirkbeck dfa9769
fix
CBirkbeck 679f7dc
fix build
CBirkbeck dccbe95
save@
CBirkbeck e7738b5
merge
CBirkbeck b78fffd
fix and merge with other PR
CBirkbeck 777000f
fix
CBirkbeck ab1d6f0
merge
CBirkbeck 3589dfc
Update Mathlib/Analysis/Complex/UpperHalfPlane/Basic.lean
CBirkbeck 15bdbb3
Apply suggestions from code review
CBirkbeck 058d578
fix
CBirkbeck File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,135 @@ | ||
| /- | ||
| Copyright (c) 2024 Chris Birkbeck. All rights reserved. | ||
| Released under Apache 2.0 license as described in the file LICENSE. | ||
| Authors: Chris Birkbeck, David Loeffler | ||
| -/ | ||
|
|
||
| import Mathlib.Analysis.Complex.LocallyUniformLimit | ||
| import Mathlib.Analysis.Complex.UpperHalfPlane.Exp | ||
| import Mathlib.Analysis.NormedSpace.MultipliableUniformlyOn | ||
|
|
||
| /-! | ||
| # Dedekind eta function | ||
|
|
||
| ## Main definitions | ||
|
|
||
| * We define the Dedekind eta function as the infinite product | ||
| `η(z) = q ^ 1/24 * ∏' (1 - q ^ (n + 1))` where `q = e ^ (2πiz)` and `z` is in the upper half-plane. | ||
| The product is taken over all non-negative integers `n`. We then show it is non-vanishing and | ||
| differentiable on the upper half-plane. | ||
|
|
||
| ## References | ||
| * [F. Diamond and J. Shurman, *A First Course in Modular Forms*][diamondshurman2005] | ||
|
CBirkbeck marked this conversation as resolved.
Outdated
|
||
| -/ | ||
|
|
||
| open TopologicalSpace Set MeasureTheory intervalIntegral | ||
| Metric Filter Function Complex | ||
|
|
||
| open UpperHalfPlane hiding I | ||
|
|
||
| open scoped Interval Real NNReal ENNReal Topology BigOperators Nat | ||
|
|
||
| local notation "𝕢" => Periodic.qParam | ||
|
|
||
| local notation "ℍₒ" => upperHalfPlaneSet | ||
|
|
||
| namespace ModularForm | ||
|
|
||
| /-- The q term inside the product defining the eta function. It is defined as | ||
| `eta_q n z = e ^ (2 π i (n + 1) z)`. -/ | ||
| noncomputable abbrev eta_q (n : ℕ) (z : ℂ) := (𝕢 1 z) ^ (n + 1) | ||
|
CBirkbeck marked this conversation as resolved.
|
||
|
|
||
| lemma eta_q_eq_cexp (n : ℕ) (z : ℂ) : eta_q n z = cexp (2 * π * I * (n + 1) * z) := by | ||
|
CBirkbeck marked this conversation as resolved.
|
||
| simp [eta_q, Periodic.qParam, ← Complex.exp_nsmul] | ||
| ring_nf | ||
|
|
||
| lemma eta_q_eq_pow (n : ℕ) (z : ℂ) : eta_q n z = cexp (2 * π * I * z) ^ (n + 1) := by | ||
| simp [eta_q, Periodic.qParam] | ||
|
|
||
| lemma one_sub_eta_q_ne_zero (n : ℕ) {z : ℂ} (hz : z ∈ ℍₒ) : 1 - eta_q n z ≠ 0 := by | ||
| rw [eta_q_eq_cexp, sub_ne_zero] | ||
| intro h | ||
| simpa [← mul_assoc, ← h] using norm_exp_two_pi_I_lt_one ⟨(n + 1) • z, by | ||
| simpa [(show 0 < (n + 1 : ℝ) by positivity)] using hz⟩ | ||
|
|
||
| /-- The eta function, whose value at z is `q^ 1 / 24 * ∏' 1 - q ^ (n + 1)` for `q = e ^ 2 π i z`. -/ | ||
| noncomputable def eta (z : ℂ) := 𝕢 24 z * ∏' (n : ℕ), (1 - eta_q n z) | ||
|
CBirkbeck marked this conversation as resolved.
Outdated
|
||
|
|
||
| local notation "η" => ModularForm.eta | ||
|
CBirkbeck marked this conversation as resolved.
Outdated
|
||
|
|
||
| open ModularForm | ||
|
|
||
|
CBirkbeck marked this conversation as resolved.
Outdated
|
||
| theorem summable_eta_q (z : ℍ) : Summable fun n ↦ ‖-eta_q n z‖ := by | ||
| simp [eta_q, eta_q_eq_pow, summable_nat_add_iff 1, norm_exp_two_pi_I_lt_one z] | ||
|
|
||
| lemma multipliableLocallyUniformlyOn_eta : | ||
| MultipliableLocallyUniformlyOn (fun n a ↦ 1 - eta_q n a) ℍₒ:= by | ||
| use fun z => ∏' (n : ℕ), (1 - eta_q n z) | ||
|
CBirkbeck marked this conversation as resolved.
Outdated
|
||
| simp_rw [sub_eq_add_neg] | ||
| apply hasProdLocallyUniformlyOn_of_forall_compact isOpen_upperHalfPlaneSet | ||
| intro K hK hcK | ||
| by_cases hN : K.Nonempty | ||
| · have hc : ContinuousOn (fun x ↦ ‖cexp (2 * π * I * x)‖) K := by fun_prop | ||
| obtain ⟨z, hz, hB, HB⟩ := hcK.exists_sSup_image_eq_and_ge hN hc | ||
| apply (summable_eta_q ⟨z, hK hz⟩).hasProdUniformlyOn_nat_one_add hcK | ||
| · filter_upwards with n x hx | ||
| simpa [eta_q, eta_q_eq_pow n x, eta_q_eq_pow n (⟨z, hK hz⟩ : ℍₒ)] using | ||
| pow_le_pow_left₀ (by simp [norm_nonneg]) (HB x hx) (n + 1) | ||
|
CBirkbeck marked this conversation as resolved.
Outdated
|
||
| · simp_rw [eta_q, Periodic.qParam] | ||
| fun_prop | ||
| · rw [hasProdUniformlyOn_iff_tendstoUniformlyOn] | ||
| simpa [not_nonempty_iff_eq_empty.mp hN] using tendstoUniformlyOn_empty | ||
|
|
||
| -- Eta is non-vanishing on the upper half plane. -/ | ||
|
CBirkbeck marked this conversation as resolved.
Outdated
|
||
| lemma eta_ne_zero {z : ℂ} (hz : z ∈ ℍₒ) : η z ≠ 0 := by | ||
| apply mul_ne_zero (Periodic.qParam_ne_zero z) | ||
| simp only [eta_q, ne_eq] | ||
| refine tprod_one_add_ne_zero_of_summable (f := fun n ↦ -eta_q n z) ?_ ?_ | ||
|
CBirkbeck marked this conversation as resolved.
Outdated
|
||
| · refine fun i ↦ by simpa using one_sub_eta_q_ne_zero i hz | ||
|
CBirkbeck marked this conversation as resolved.
Outdated
|
||
| · simpa [eta_q, ← summable_norm_iff] using summable_eta_q ⟨z, hz⟩ | ||
|
|
||
| lemma logDeriv_one_sub_cexp (r : ℂ) : logDeriv (fun z ↦ 1 - r * cexp z) = | ||
| fun z ↦ -r * cexp z / (1 - r * cexp z) := by | ||
| ext z | ||
| simp [logDeriv] | ||
|
|
||
| lemma logDeriv_one_sub_mul_cexp_comp (r : ℂ) {g : ℂ → ℂ} (hg : Differentiable ℂ g) : | ||
|
CBirkbeck marked this conversation as resolved.
|
||
| logDeriv ((fun z ↦ 1 - r * cexp z) ∘ g) = | ||
| fun z ↦ -r * (deriv g z) * cexp (g z) / (1 - r * cexp (g z)) := by | ||
| ext y | ||
| rw [logDeriv_comp (by fun_prop) (hg y), logDeriv_one_sub_cexp] | ||
| ring | ||
|
|
||
| private theorem one_sub_eta_logDeriv_eq (z : ℂ) (n : ℕ) : logDeriv (fun x ↦ 1 - eta_q n x) z = | ||
| 2 * π * I * (n + 1) * -eta_q n z / (1 - eta_q n z) := by | ||
|
CBirkbeck marked this conversation as resolved.
Outdated
|
||
| have h2 : (fun x ↦ 1 - cexp (2 * ↑π * I * (n + 1) * x)) = | ||
| ((fun z ↦ 1 - 1 * cexp z) ∘ fun x ↦ 2 * ↑π * I * (n + 1) * x) := by aesop | ||
| have h3 : deriv (fun x : ℂ ↦ (2 * π * I * (n + 1) * x)) = | ||
| fun _ ↦ 2 * π * I * (n + 1) := by | ||
| ext y | ||
| simpa using deriv_const_mul (2 * π * I * (n + 1)) (d := fun (x : ℂ) ↦ x) (x := y) | ||
| simp_rw [eta_q_eq_cexp, h2, logDeriv_one_sub_mul_cexp_comp 1 | ||
| (g := fun x ↦ (2 * π * I * (n + 1) * x)) (by fun_prop), h3] | ||
| simp | ||
|
|
||
| lemma tsum_log_deriv_eta_q (z : ℂ) : ∑' n, logDeriv (fun x ↦ 1 - eta_q n x) z = | ||
|
CBirkbeck marked this conversation as resolved.
Outdated
|
||
| (2 * π * I) * ∑' n, (n + 1) * (-eta_q n z) / (1 - eta_q n z) := by | ||
| have : ∑' i, logDeriv (fun x ↦ 1 - eta_q i x) z = | ||
| ∑' n, (2 * ↑π * I * (n + 1)) * (-eta_q n z) / (1 - eta_q n z) := | ||
| tsum_congr (fun i ↦ one_sub_eta_logDeriv_eq z i) | ||
| rw [this, ← tsum_mul_left] | ||
|
CBirkbeck marked this conversation as resolved.
Outdated
|
||
| grind | ||
|
|
||
| theorem differentiableAt_eta_of_mem_upperHalfPlaneSet {z : ℂ} (hz : z ∈ ℍₒ) : | ||
| DifferentiableAt ℂ eta z := by | ||
| apply DifferentiableAt.mul (by fun_prop) | ||
| have hD := (MultipliableLocallyUniformlyOn.hasProdLocallyUniformlyOn | ||
| multipliableLocallyUniformlyOn_eta).tendstoLocallyUniformlyOn_finsetRange.differentiableOn ?_ | ||
| isOpen_upperHalfPlaneSet | ||
| · exact (hD z hz).differentiableAt (isOpen_upperHalfPlaneSet.mem_nhds hz) | ||
| · filter_upwards with b y | ||
| apply (DifferentiableOn.finset_prod (u := Finset.range b) (f := fun i x ↦ 1 - eta_q i x) | ||
| (by fun_prop)).congr | ||
| simp | ||
|
CBirkbeck marked this conversation as resolved.
Outdated
|
||
|
|
||
| end ModularForm | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.