Skip to content
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

[Merged by Bors] - Eisenstein series uniform convergence #10377

Closed
wants to merge 143 commits into from
Closed
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
143 commits
Select commit Hold shift + click to select a range
1114eea
wip save
CBirkbeck Feb 6, 2024
e9440a2
Update Mathlib/NumberTheory/ModularForms/EisensteinSeries/Finset_Deco…
CBirkbeck Feb 6, 2024
e229b84
Update Mathlib/NumberTheory/ModularForms/EisensteinSeries/Finset_Deco…
CBirkbeck Feb 6, 2024
3a0fc10
Update Mathlib/NumberTheory/ModularForms/EisensteinSeries/UniformConv…
CBirkbeck Feb 6, 2024
b74fe5c
Update Mathlib/NumberTheory/ModularForms/EisensteinSeries/UniformConv…
CBirkbeck Feb 6, 2024
bcf756c
Update Mathlib/NumberTheory/ModularForms/EisensteinSeries/UniformConv…
CBirkbeck Feb 6, 2024
b241e15
Update Mathlib/NumberTheory/ModularForms/EisensteinSeries/UniformConv…
CBirkbeck Feb 6, 2024
a456d5b
Update Mathlib/NumberTheory/ModularForms/EisensteinSeries/UniformConv…
CBirkbeck Feb 6, 2024
eed710a
Update Mathlib/NumberTheory/ModularForms/EisensteinSeries/UniformConv…
CBirkbeck Feb 6, 2024
6b00e1f
Update Mathlib/NumberTheory/ModularForms/EisensteinSeries/UniformConv…
CBirkbeck Feb 6, 2024
0655fb3
Update Mathlib/NumberTheory/ModularForms/EisensteinSeries/UniformConv…
CBirkbeck Feb 6, 2024
b2a5942
Update Mathlib/NumberTheory/ModularForms/EisensteinSeries/UniformConv…
CBirkbeck Feb 6, 2024
80e3230
some linting
CBirkbeck Feb 6, 2024
0b42af4
missed one
CBirkbeck Feb 6, 2024
8b3ca2e
missed one
CBirkbeck Feb 6, 2024
3b6159b
more lint
CBirkbeck Feb 6, 2024
0fc98a5
more lint
CBirkbeck Feb 6, 2024
79fe9ac
save
CBirkbeck Feb 9, 2024
a68247d
add file names
CBirkbeck Feb 9, 2024
99469cb
shake fix
CBirkbeck Feb 9, 2024
89c9ee8
save
CBirkbeck Feb 9, 2024
8e0f4a8
sections
CBirkbeck Feb 9, 2024
3e94fcb
simplifications, but golfing still needed
CBirkbeck Feb 10, 2024
6012f67
save
CBirkbeck Feb 10, 2024
d63d918
save2
CBirkbeck Feb 10, 2024
bc282a0
lint fix
CBirkbeck Feb 10, 2024
49d5d22
golf
CBirkbeck Feb 10, 2024
edf1752
save
CBirkbeck Feb 10, 2024
38ca47f
more golf
CBirkbeck Feb 12, 2024
b402c36
build fix
CBirkbeck Feb 12, 2024
a3c4d21
fix imports
CBirkbeck Feb 12, 2024
90b37fe
more cleanup
CBirkbeck Feb 12, 2024
83ee7dc
rename file
YaelDillies Feb 13, 2024
9ba96ec
rev fixes wip
CBirkbeck Feb 13, 2024
01f2d44
Merge branch 'eisensteinSeries_Uniform_convergence' of https://github…
CBirkbeck Feb 13, 2024
c4bfb5b
Box theory
YaelDillies Feb 13, 2024
224f82e
feat: Boxes in locally finite ordered rings
YaelDillies Feb 13, 2024
1c0a1e8
moved some lemmas around, while waiting for boxes to be PRd
CBirkbeck Feb 13, 2024
e534563
Merge branch 'eisensteinSeries_Uniform_convergence' of https://github…
CBirkbeck Feb 13, 2024
de4faf1
fix updates
CBirkbeck Feb 13, 2024
0788f1b
fix simp
CBirkbeck Feb 13, 2024
5d9708c
fix simp nf
YaelDillies Feb 13, 2024
cc886d8
fix doc string
CBirkbeck Feb 13, 2024
57154ca
save before trying to generalise the bound
CBirkbeck Feb 13, 2024
627b254
fix
CBirkbeck Feb 13, 2024
f6d0b12
fix
CBirkbeck Feb 13, 2024
682f525
remove junk lemma
CBirkbeck Feb 13, 2024
d2182d3
fix merge issue
CBirkbeck Feb 13, 2024
e653c32
fix merge issue
CBirkbeck Feb 13, 2024
f82014d
shake fix?
CBirkbeck Feb 14, 2024
034f09d
fix import
CBirkbeck Feb 14, 2024
c638374
shake ignore?
CBirkbeck Feb 14, 2024
12d7fdf
save
CBirkbeck Feb 14, 2024
a4ca86a
Merge remote-tracking branch 'origin/master' into finset_box
YaelDillies Feb 16, 2024
bbb7c23
Merge remote-tracking branch 'origin/finset_box' into eisensteinSerie…
CBirkbeck Feb 16, 2024
c99c5a9
fix merge update
CBirkbeck Feb 16, 2024
4b566d2
remove junk lemma
CBirkbeck Feb 16, 2024
23246b3
golf
CBirkbeck Feb 16, 2024
c4bf406
update bound to real powers
CBirkbeck Feb 16, 2024
27421d7
style fix
CBirkbeck Feb 16, 2024
22374fc
remove unused lemma
CBirkbeck Feb 16, 2024
08452b5
Merge remote-tracking branch 'origin/master' into eisensteinSeries_Un…
YaelDillies Feb 20, 2024
ebcf5be
cleanup
YaelDillies Feb 20, 2024
80fce6b
Merge remote-tracking branch 'origin/master' into eisensteinSeries_Un…
CBirkbeck Feb 23, 2024
4c85191
small golf
CBirkbeck Feb 23, 2024
b8ccdad
lint fix and re-squeeze some simps
CBirkbeck Feb 23, 2024
87297e8
2
CBirkbeck Feb 23, 2024
2ed727d
fix last thm
CBirkbeck Feb 23, 2024
9e4428b
fix last thm name
CBirkbeck Feb 23, 2024
33f9ee3
lint fix
CBirkbeck Feb 23, 2024
b887845
generalise fun_ne_zero_cases
CBirkbeck Feb 23, 2024
42b6b8a
add a complex version of main thm
CBirkbeck Feb 27, 2024
96e63cc
fix name
CBirkbeck Feb 27, 2024
dcd880a
rev updates
CBirkbeck Mar 1, 2024
3a09ccc
make arg implicit
CBirkbeck Mar 1, 2024
623b79f
lint fix
CBirkbeck Mar 1, 2024
1ad2e31
some golf
CBirkbeck Mar 6, 2024
8f1d15e
more golf
CBirkbeck Mar 6, 2024
bc25990
more cleanup
CBirkbeck Mar 6, 2024
b5b30b6
move files around
CBirkbeck Mar 6, 2024
eaa2ca5
fix
CBirkbeck Mar 6, 2024
15a5ff6
rev fixes wip
CBirkbeck Mar 8, 2024
9a7b913
this can probs be golfed more, but I'm stoopid
CBirkbeck Mar 8, 2024
3600a74
composing non_zero function with inj fun is non_zero
CBirkbeck Mar 8, 2024
07ec99b
use inj func pr
CBirkbeck Mar 8, 2024
2b6b90d
clean a bit
CBirkbeck Mar 8, 2024
c36b011
merge
CBirkbeck Mar 8, 2024
b4cd118
merge fix
CBirkbeck Mar 18, 2024
4e2ac14
fix
CBirkbeck Mar 25, 2024
db21b89
merge fix
CBirkbeck Apr 15, 2024
083ea46
Merge branch 'eisensteinSeries_Uniform_convergence' of https://github…
CBirkbeck Apr 15, 2024
a0e1e79
Update Mathlib.lean
CBirkbeck Apr 15, 2024
77bafcb
fix
CBirkbeck Apr 15, 2024
e981f3d
rev fixes
CBirkbeck Apr 15, 2024
ab3cec4
Merge branch 'eisensteinSeries_Uniform_convergence' of https://github…
CBirkbeck Apr 15, 2024
f6f8b08
missed one
CBirkbeck Apr 15, 2024
123dd62
merge fix/update
CBirkbeck Apr 26, 2024
405b34d
Merge remote-tracking branch 'origin/master' into eisensteinSeries_Un…
CBirkbeck Apr 26, 2024
dc0a5b1
fix
CBirkbeck Apr 26, 2024
fdeeff6
feat(Complex/UpperHalfPlane): add vertical strips needed for mod form…
CBirkbeck Apr 26, 2024
a243ce6
doc string
CBirkbeck Apr 26, 2024
f18cfea
move strips into topology
CBirkbeck Apr 26, 2024
61b0056
summable lems move test
CBirkbeck Apr 26, 2024
e5e78c0
test2
CBirkbeck Apr 26, 2024
a8380ae
do todo from port
CBirkbeck Apr 26, 2024
95f199f
build fix
CBirkbeck Apr 26, 2024
0472942
fix
CBirkbeck Apr 26, 2024
a5f0f87
Merge branch 'CB_summable_partion_lemmas' of https://github.com/leanp…
CBirkbeck Apr 26, 2024
b8b7b44
merge fix
CBirkbeck Apr 26, 2024
8fbe573
Merge remote-tracking branch 'origin/upper_half_plane_stip_lemmas' in…
CBirkbeck Apr 26, 2024
ac145a1
merge fix
CBirkbeck Apr 26, 2024
01a9357
more fixes
CBirkbeck Apr 26, 2024
3a77b2f
fix docstring
CBirkbeck Apr 26, 2024
10365c4
build fixes
CBirkbeck Apr 26, 2024
105e5d5
fix import
CBirkbeck Apr 26, 2024
8891f5a
remove junk complex.abs
CBirkbeck Apr 30, 2024
9c1c1d2
fix
CBirkbeck Apr 30, 2024
e6b0cdf
updates
CBirkbeck May 1, 2024
9bdf78f
Merge remote-tracking branch 'origin/master' into eisensteinSeries_Un…
CBirkbeck May 1, 2024
1e48883
fix2
CBirkbeck May 1, 2024
aeb0b43
fix lintr
CBirkbeck May 2, 2024
1c05238
updates
CBirkbeck May 2, 2024
8f0e3bc
Merge remote-tracking branch 'origin/master' into eisensteinSeries_Un…
CBirkbeck May 2, 2024
1325630
fix merge
CBirkbeck May 7, 2024
7606655
lintr fix
CBirkbeck May 7, 2024
5852fe8
space
CBirkbeck May 10, 2024
7fb014d
rev changes wip
CBirkbeck May 10, 2024
6823211
small golf
CBirkbeck May 12, 2024
26d9524
more speedups
CBirkbeck May 13, 2024
5b3cfb8
more speedups 2
CBirkbeck May 13, 2024
6c6ddf3
lintr fix
CBirkbeck May 13, 2024
5201ffb
replace rpow_bound
CBirkbeck May 14, 2024
fec3908
some style fixes, wip
CBirkbeck May 14, 2024
bbab1d5
more golf
CBirkbeck May 14, 2024
036b016
Merge branch 'eisensteinSeries_Uniform_convergence' of github.com:lea…
loefflerd May 14, 2024
f748460
refactor using norm, etc
loefflerd May 14, 2024
2bb8c9b
fix truncated docstring
loefflerd May 14, 2024
2cc8984
move lemma
loefflerd May 14, 2024
81c1c0c
prune `open` statements
loefflerd May 14, 2024
80b223b
rename norm_def to norm_eq_max_natAbs
CBirkbeck May 15, 2024
346bbd0
rename norm_def to norm_eq_max_natAbs
CBirkbeck May 15, 2024
1bb0494
Update Mathlib/NumberTheory/ModularForms/EisensteinSeries/UniformConv…
CBirkbeck May 15, 2024
911192d
add David as Author
CBirkbeck May 15, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions Mathlib.lean
Original file line number Diff line number Diff line change
Expand Up @@ -2845,6 +2845,8 @@ import Mathlib.NumberTheory.Modular
import Mathlib.NumberTheory.ModularForms.Basic
import Mathlib.NumberTheory.ModularForms.CongruenceSubgroups
import Mathlib.NumberTheory.ModularForms.EisensteinSeries.Basic
import Mathlib.NumberTheory.ModularForms.EisensteinSeries.Finset_Decomposition
import Mathlib.NumberTheory.ModularForms.EisensteinSeries.UniformConvergence
import Mathlib.NumberTheory.ModularForms.JacobiTheta.Manifold
CBirkbeck marked this conversation as resolved.
Show resolved Hide resolved
import Mathlib.NumberTheory.ModularForms.JacobiTheta.OneVariable
import Mathlib.NumberTheory.ModularForms.JacobiTheta.TwoVariable
Expand Down
2 changes: 2 additions & 0 deletions Mathlib/Analysis/Complex/UpperHalfPlane/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ theorem mk_coe (z : ℍ) (h : 0 < (z : ℂ).im := z.2) : mk z h = z :=
rfl
#align upper_half_plane.mk_coe UpperHalfPlane.mk_coe

lemma coe_eq_fst (z : ℍ) : (z : ℂ) = z.1 := rfl
CBirkbeck marked this conversation as resolved.
Show resolved Hide resolved

theorem re_add_im (z : ℍ) : (z.re + z.im * Complex.I : ℂ) = z :=
Complex.re_add_im z
#align upper_half_plane.re_add_im UpperHalfPlane.re_add_im
Expand Down
47 changes: 47 additions & 0 deletions Mathlib/Analysis/Complex/UpperHalfPlane/Metric.lean
Original file line number Diff line number Diff line change
Expand Up @@ -384,4 +384,51 @@ instance : IsometricSMul SL(2, ℝ) ℍ :=
exact
(isometry_real_vadd w).comp (h₀.comp <| (isometry_real_vadd v).comp <| isometry_pos_mul u)⟩

section slices

/--The verticel strip of width A and height B-/
CBirkbeck marked this conversation as resolved.
Show resolved Hide resolved
def upperHalfPlaneSlice (A B : ℝ) :=
{z : ℍ | Complex.abs z.1.1 ≤ A ∧ Complex.abs z.1.2 ≥ B}

theorem slice_mem (A B : ℝ) (z : ℍ) :
CBirkbeck marked this conversation as resolved.
Show resolved Hide resolved
z ∈ upperHalfPlaneSlice A B ↔ Complex.abs z.1.1 ≤ A ∧ Complex.abs z.1.2 ≥ B := Iff.rfl

lemma compact_in_some_slice (K : Set ℍ) (hK : IsCompact K) : ∃ A B : ℝ, 0 < B ∧
CBirkbeck marked this conversation as resolved.
Show resolved Hide resolved
K ⊆ upperHalfPlaneSlice A B := by
by_cases hne : Set.Nonempty K
CBirkbeck marked this conversation as resolved.
Show resolved Hide resolved
· have hcts : ContinuousOn (fun t => t.im) K := by
CBirkbeck marked this conversation as resolved.
Show resolved Hide resolved
apply Continuous.continuousOn UpperHalfPlane.continuous_im
obtain ⟨b, _, HB⟩ := IsCompact.exists_isMinOn hK hne hcts
let t := (⟨Complex.I, by simp⟩ : ℍ)
CBirkbeck marked this conversation as resolved.
Show resolved Hide resolved
have ht : UpperHalfPlane.im t = I.im := by rfl
obtain ⟨r, _, hr2⟩ := Bornology.IsBounded.subset_closedBall_lt hK.isBounded 0 t
refine' ⟨Real.sinh (r) + Complex.abs ((UpperHalfPlane.center t r)), b.im, b.2, _⟩
CBirkbeck marked this conversation as resolved.
Show resolved Hide resolved
intro z hz
simp only [I_im, slice_mem, abs_ofReal, ge_iff_le] at *
constructor
have hr3 := hr2 hz
CBirkbeck marked this conversation as resolved.
Show resolved Hide resolved
simp only [Metric.mem_closedBall] at hr3
apply le_trans (abs_re_le_abs z)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would this be more readable with calc?

have := Complex.abs.sub_le (z : ℂ) (UpperHalfPlane.center t r) 0
simp only [sub_zero, ge_iff_le] at this
rw [dist_le_iff_dist_coe_center_le] at hr3
apply le_trans this
have htim : UpperHalfPlane.im t = 1 := by
simp only [ht]
rw [htim] at hr3
simp only [one_mul, add_le_add_iff_right, ge_iff_le] at *
exact hr3
have hbz := HB hz
simp only [mem_setOf_eq, ge_iff_le] at *
convert hbz
rw [UpperHalfPlane.im]
apply abs_eq_self.mpr z.2.le
· rw [not_nonempty_iff_eq_empty] at hne
rw [hne]
simp only [empty_subset, and_true, exists_const]
use 1
linarith
CBirkbeck marked this conversation as resolved.
Show resolved Hide resolved

end slices

end UpperHalfPlane
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
/-
Copyright (c) 2024 Chris Birkbeck. All rights reserved.
YaelDillies marked this conversation as resolved.
Show resolved Hide resolved
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Birkbeck
-/
import Mathlib.Data.Complex.Abs
import Mathlib.Data.IsROrC.Basic

/-! # Decomposing `ℤ × ℤ` into squares

We partition `ℤ × ℤ` into squares of the form `Icc (-n) n × Icc (-n) n` for `n : ℕ`. This is useful
for bounding Eisenstein series.
-/

open Complex

open scoped BigOperators NNReal Classical Filter Matrix

noncomputable section

namespace EisensteinSeries
CBirkbeck marked this conversation as resolved.
Show resolved Hide resolved

open Finset

/-- For `m : ℤ` this is the finset of `ℤ × ℤ` of elements such that the maximum of the
absolute values of the pair is `m` -/
def square (m : ℤ) : Finset (ℤ × ℤ) :=
((Icc (-m) (m)) ×ˢ (Icc (-m) (m))).filter fun x => max x.1.natAbs x.2.natAbs = m

-- a re-definition in simp-normal form
lemma square_eq (m : ℤ) :
square m = ((Icc (-m) m) ×ˢ (Icc (-m) m)).filter fun x => max |x.1| |x.2| = m := by
simp [square]

lemma mem_square_aux {m : ℤ} {i} : i ∈ Icc (-m) m ×ˢ Icc (-m) m ↔ max |i.1| |i.2| ≤ m := by
simp [abs_le]

lemma square_disj {n : ℤ} : Disjoint (square (n+1)) (Icc (-n) n ×ˢ Icc (-n) n) := by
rw [square_eq]
simp only [Finset.disjoint_left, mem_filter, mem_square_aux]
rintro x ⟨-, hx⟩
simp [hx]

lemma square_union {n : ℤ} :
square (n+1) ∪ Icc (-n) n ×ˢ Icc (-n) n = Icc (-(n+1)) (n+1) ×ˢ Icc (-(n+1)) (n+1) := by
ext x
rw [mem_union, square_eq, mem_filter, mem_square_aux, mem_square_aux,
and_iff_right_of_imp le_of_eq, Int.le_add_one_iff, or_comm]

lemma square_disjunion (n : ℤ) :
(square (n+1)).disjUnion (Icc (-n) n ×ˢ Icc (-n) n) square_disj =
Icc (-(n+1)) (n+1) ×ˢ Icc (-(n+1)) (n+1) := by rw [disjUnion_eq_union, square_union]

theorem square_size (n : ℕ) : Finset.card (square (n + 1)) = 8 * (n + 1) := by
have : (((square (n+1)).disjUnion (Icc (-n : ℤ) n ×ˢ Icc (-n : ℤ) n) square_disj).card : ℤ) =
(Icc (-(n+1 : ℤ)) (n+1) ×ˢ Icc (-(n+1 : ℤ)) (n+1)).card
· rw [square_disjunion]
rw [card_disjUnion, card_product, Nat.cast_add, Nat.cast_mul, card_product, Nat.cast_mul,
Int.card_Icc, Int.card_Icc, Int.toNat_sub_of_le, Int.toNat_sub_of_le,
← eq_sub_iff_add_eq] at this
· rw [← Nat.cast_inj (R := ℤ), this, Nat.cast_mul, Nat.cast_ofNat, Nat.cast_add_one]
ring_nf
· linarith
· linarith

theorem natAbs_le_iff_mem_Icc (a : ℤ) (n : ℕ) :
Int.natAbs a ≤ n ↔ a ∈ Finset.Icc (-(n : ℤ)) n := by
rw [mem_Icc, ← abs_le, Int.abs_eq_natAbs, Int.ofNat_le]

@[simp]
theorem square_mem (n : ℕ) (x : ℤ × ℤ) : x ∈ square n ↔ max x.1.natAbs x.2.natAbs = n := by
simp_rw [square, Finset.mem_filter, Nat.cast_inj, mem_product, and_iff_right_iff_imp,
← natAbs_le_iff_mem_Icc]
rintro rfl
simp only [le_max_iff, le_refl, true_or, or_true, and_self]

theorem square_size' {n : ℕ} (h : n ≠ 0) : Finset.card (square n) = 8 * n := by
obtain ⟨n, rfl⟩ := n.exists_eq_succ_of_ne_zero h
exact mod_cast square_size n

theorem squares_cover_all (y : ℤ × ℤ) : ∃! i : ℕ, y ∈ square i := by
use max y.1.natAbs y.2.natAbs
simp only [square_mem, and_self_iff, forall_eq']

@[simp]
lemma square_zero : square 0 = {(0, 0)} := rfl

theorem square_zero_card : Finset.card (square 0) = 1 := by
rw [square_zero, card_singleton]

lemma Complex_abs_eq_of_mem_square (n : ℕ) (x : ℤ × ℤ) (h : x ∈ square n) :
Complex.abs x.1 = n ∨ Complex.abs x.2 = n := by
simp_rw [eq_comm (b := (n : ℝ)), ← int_cast_abs, square_mem] at *
norm_cast
subst n
simp only [Nat.cast_max, Int.coe_natAbs, max_eq_left_iff, max_eq_right_iff] at *
exact Int.le_total |x.2| |x.1|

lemma Complex_abs_square_left_ne (n : ℕ) (x : ℤ × ℤ) (h : x ∈ square n)
(hx : Complex.abs (x.1) ≠ n) : Complex.abs (x.2) = n :=
Complex_abs_eq_of_mem_square n x h |>.resolve_left hx

lemma fun_ne_zero_cases (x : Fin 2 → ℤ) : x ≠ 0 ↔ x 0 ≠ 0 ∨ x 1 ≠ 0 := by
rw [Function.ne_iff]
exact Fin.exists_fin_two

lemma square_ne_zero (n : ℕ) (x : Fin 2 → ℤ) (hx : ⟨x 0, x 1 ⟩ ∈ square n) : x ≠ 0 ↔ n ≠ 0 := by
constructor
intro h h0
rw [h0] at hx
simp only [Nat.cast_zero, square_zero, mem_singleton, Prod.mk.injEq] at hx
rw [fun_ne_zero_cases, hx.1, hx.2] at h
simp only [ne_eq, not_true_eq_false, or_self] at *
intro hn h
have hx0 : x 0 = 0 := by
simp only [h, Pi.zero_apply]
have hx1 : x 1 = 0 := by
simp only [h, Pi.zero_apply]
rw [hx0, hx1] at hx
simp only [square_mem, Int.natAbs_zero, max_self] at hx
exact hn (id hx.symm)