Skip to content

Commit f389222

Browse files
committed
Add(NumberTheory/ModularForms/Identities): periods of modular forms. (#12601)
Add some basic results about `ModularGroup.T` relating to slash invariant forms of level Gamma(N) and moving elements into verticalStrips. Needed for #12456 Co-authored-by: Chris Birkbeck <c.birkbeck@uea.ac.uk>
1 parent 8d633f3 commit f389222

File tree

4 files changed

+65
-0
lines changed

4 files changed

+65
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3115,6 +3115,7 @@ import Mathlib.NumberTheory.ModularForms.CongruenceSubgroups
31153115
import Mathlib.NumberTheory.ModularForms.EisensteinSeries.Basic
31163116
import Mathlib.NumberTheory.ModularForms.EisensteinSeries.MDifferentiable
31173117
import Mathlib.NumberTheory.ModularForms.EisensteinSeries.UniformConvergence
3118+
import Mathlib.NumberTheory.ModularForms.Identities
31183119
import Mathlib.NumberTheory.ModularForms.JacobiTheta.Bounds
31193120
import Mathlib.NumberTheory.ModularForms.JacobiTheta.Manifold
31203121
import Mathlib.NumberTheory.ModularForms.JacobiTheta.OneVariable

Mathlib/Analysis/Complex/UpperHalfPlane/Topology.lean

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,23 @@ lemma subset_verticalStrip_of_isCompact {K : Set ℍ} (hK : IsCompact K) :
106106
obtain ⟨v, _, hv⟩ := hK.exists_isMinOn hne continuous_im.continuousOn
107107
exact ⟨|re u|, im v, v.im_pos, fun k hk ↦ ⟨isMaxOn_iff.mp hu _ hk, isMinOn_iff.mp hv _ hk⟩⟩
108108

109+
theorem ModularGroup_T_zpow_mem_verticalStrip (z : ℍ) {N : ℕ} (hn : 0 < N) :
110+
∃ n : ℤ, ModularGroup.T ^ (N * n) • z ∈ verticalStrip N z.im := by
111+
let n := Int.floor (z.re/N)
112+
use -n
113+
rw [modular_T_zpow_smul z (N * -n)]
114+
refine ⟨?_, (by simp only [mul_neg, Int.cast_neg, Int.cast_mul, Int.cast_natCast, vadd_im,
115+
le_refl])⟩
116+
have h : (N * (-n : ℝ) +ᵥ z).re = -N * Int.floor (z.re / N) + z.re := by
117+
simp only [Int.cast_natCast, mul_neg, vadd_re, neg_mul]
118+
norm_cast at *
119+
rw [h, add_comm]
120+
simp only [neg_mul, Int.cast_neg, Int.cast_mul, Int.cast_natCast, ge_iff_le]
121+
have hnn : (0 : ℝ) < (N : ℝ) := by norm_cast at *
122+
have h2 : z.re + -(N * n) = z.re - n * N := by ring
123+
rw [h2, abs_eq_self.2 (Int.sub_floor_div_mul_nonneg (z.re : ℝ) hnn)]
124+
apply (Int.sub_floor_div_mul_lt (z.re : ℝ) hnn).le
125+
109126
end strips
110127

111128
/-- A continuous section `ℂ → ℍ` of the natural inclusion map, bundled as a `PartialHomeomorph`. -/

Mathlib/NumberTheory/ModularForms/CongruenceSubgroups.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,14 @@ theorem Gamma_zero_bot : Gamma 0 = ⊥ := by
8888
simp [h]
8989
#align Gamma_zero_bot Gamma_zero_bot
9090

91+
lemma ModularGroup_T_pow_mem_Gamma (N M : ℤ) (hNM : N ∣ M) :
92+
(ModularGroup.T ^ M) ∈ _root_.Gamma (Int.natAbs N) := by
93+
simp only [Gamma_mem, Fin.isValue, ModularGroup.coe_T_zpow, of_apply, cons_val', cons_val_zero,
94+
empty_val', cons_val_fin_one, Int.cast_one, cons_val_one, head_cons, head_fin_const,
95+
Int.cast_zero, and_self, and_true, true_and]
96+
refine Iff.mpr (ZMod.intCast_zmod_eq_zero_iff_dvd M (Int.natAbs N)) ?_
97+
simp only [Int.natCast_natAbs, abs_dvd, hNM]
98+
9199
/-- The congruence subgroup of `SL(2, ℤ)` of matrices whose lower left-hand entry reduces to zero
92100
modulo `N`. -/
93101
def Gamma0 (N : ℕ) : Subgroup SL(2, ℤ) where
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/-
2+
Copyright (c) 2024 Chris Birkbeck. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Chris Birkbeck
5+
-/
6+
7+
import Mathlib.NumberTheory.ModularForms.SlashInvariantForms
8+
import Mathlib.NumberTheory.ModularForms.CongruenceSubgroups
9+
10+
/-!
11+
# Identities of ModularForms and SlashInvariantForms
12+
Collection of useful identities of modular forms.
13+
-/
14+
15+
noncomputable section
16+
17+
open ModularForm UpperHalfPlane Matrix
18+
19+
namespace SlashInvariantForm
20+
21+
/- TODO: Once we have cusps, do this more generally, same below. -/
22+
theorem vAdd_width_periodic (N : ℕ) (k n : ℤ) (f : SlashInvariantForm (Gamma N) k) (z : ℍ) :
23+
f (((N * n) : ℝ) +ᵥ z) = f z := by
24+
norm_cast
25+
rw [← modular_T_zpow_smul z (N * n)]
26+
have Hn := (ModularGroup_T_pow_mem_Gamma N (N * n) (by simp))
27+
simp only [zpow_natCast, Int.natAbs_ofNat] at Hn
28+
convert (SlashInvariantForm.slash_action_eqn' k (Gamma N) f ⟨((ModularGroup.T ^ (N * n))), Hn⟩ z)
29+
unfold SpecialLinearGroup.coeToGL
30+
simp only [Fin.isValue, ModularGroup.coe_T_zpow (N * n), of_apply, cons_val', cons_val_zero,
31+
empty_val', cons_val_fin_one, cons_val_one, head_fin_const, Int.cast_zero, zero_mul, head_cons,
32+
Int.cast_one, zero_add, one_zpow, one_mul]
33+
34+
theorem T_zpow_width_invariant (N : ℕ) (k n : ℤ) (f : SlashInvariantForm (Gamma N) k) (z : ℍ) :
35+
f (((ModularGroup.T ^ (N * n))) • z) = f z := by
36+
rw [modular_T_zpow_smul z (N * n)]
37+
simpa only [Int.cast_mul, Int.cast_natCast] using vAdd_width_periodic N k n f z
38+
39+
end SlashInvariantForm

0 commit comments

Comments
 (0)