Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 8110ab9

Browse files
AlexKontorovichhrmacbethmmasdeu
committed
feat(number_theory/modular): fundamental domain part 2 (#8985)
This completes the argument that the standard open domain `{z : |z|>1, |\Re(z)|<1/2}` is a fundamental domain for the action of `SL(2,\Z)` on `\H`. The first PR (#8611) showed that every point in the upper half plane has a representative inside its closure, and here we show that representatives in the open domain are unique. Co-authored-by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com> Co-authored-by: Marc Masdeu <marc.masdeu@gmail.com> Co-authored-by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com> Co-authored-by: Marc Masdeu <marc.masdeu@gmail.com>
1 parent ba556a7 commit 8110ab9

File tree

6 files changed

+287
-43
lines changed

6 files changed

+287
-43
lines changed

src/algebra/group_power/order.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,9 @@ have t : 1^2 ≤ x^2 ↔ |1| ≤ |x| := ⟨abs_le_abs_of_sq_le_sq, sq_le_sq⟩,
400400
@[simp] lemma one_lt_sq_iff_one_lt_abs (x : R) : 1 < x^21 < |x| :=
401401
have t : 1^2 < x^2 ↔ |1| < |x| := ⟨abs_lt_abs_of_sq_lt_sq, sq_lt_sq⟩, by simpa using t
402402

403+
lemma pow_four_le_pow_two_of_pow_two_le {x y : R} (h : x^2 ≤ y) : x^4 ≤ y^2 :=
404+
(pow_mul x 2 2).symm ▸ pow_le_pow_of_le_left (sq_nonneg x) h 2
405+
403406
end linear_ordered_ring
404407

405408
section linear_ordered_comm_ring

src/algebra/order/group.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,6 +1146,9 @@ abs_le.2 ⟨(neg_add (|a|) (|b|)).symm ▸
11461146
add_le_add (neg_le.2 $ neg_le_abs_self _) (neg_le.2 $ neg_le_abs_self _),
11471147
add_le_add (le_abs_self _) (le_abs_self _)⟩
11481148

1149+
lemma abs_add' (a b : α) : |a| ≤ |b| + |b + a| :=
1150+
by simpa using abs_add (-b) (b + a)
1151+
11491152
theorem abs_sub (a b : α) :
11501153
|a - b| ≤ |a| + |b| :=
11511154
by { rw [sub_eq_add_neg, ←abs_neg b], exact abs_add a _ }

src/analysis/complex/upper_half_plane.lean

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,4 +159,13 @@ begin
159159
ring,
160160
end
161161

162+
lemma c_mul_im_sq_le_norm_sq_denom (z : ℍ) (g : SL(2, ℝ)) :
163+
((↑ₘg 1 0 : ℝ) * (z.im))^2 ≤ complex.norm_sq (denom g z) :=
164+
begin
165+
let c := (↑ₘg 1 0 : ℝ),
166+
let d := (↑ₘg 1 1 : ℝ),
167+
calc (c * z.im)^2 ≤ (c * z.im)^2 + (c * z.re + d)^2 : by nlinarith
168+
... = complex.norm_sq (denom g z) : by simp [complex.norm_sq]; ring,
169+
end
170+
162171
end upper_half_plane

src/data/int/basic.lean

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ le_sub_iff_add_le
221221
lemma abs_le_one_iff {a : ℤ} : |a| ≤ 1 ↔ a = 0 ∨ a = 1 ∨ a = -1 :=
222222
by rw [le_iff_lt_or_eq, abs_lt_one_iff, abs_eq (@zero_le_one ℤ _)]
223223

224+
lemma one_le_abs {z : ℤ} (h₀: z ≠ 0) : 1 ≤ |z| :=
225+
add_one_le_iff.mpr (abs_pos.mpr h₀)
226+
224227
@[elab_as_eliminator] protected lemma induction_on {p : ℤ → Prop}
225228
(i : ℤ) (hz : p 0) (hp : ∀ i : ℕ, p i → p (i + 1)) (hn : ∀ i : ℕ, p (-i) → p (-i - 1)) : p i :=
226229
begin
@@ -1290,6 +1293,18 @@ begin
12901293
{ exact is_unit_one.neg }
12911294
end
12921295

1296+
lemma eq_one_or_neg_one_of_mul_eq_one {z w : ℤ} (h : z * w = 1) : z = 1 ∨ z = -1 :=
1297+
is_unit_iff.mp (is_unit_of_mul_eq_one z w h)
1298+
1299+
lemma eq_one_or_neg_one_of_mul_eq_one' {z w : ℤ} (h : z * w = 1) :
1300+
(z = 1 ∧ w = 1) ∨ (z = -1 ∧ w = -1) :=
1301+
begin
1302+
have h' : w * z = 1 := (mul_comm z w) ▸ h,
1303+
rcases eq_one_or_neg_one_of_mul_eq_one h with rfl | rfl;
1304+
rcases eq_one_or_neg_one_of_mul_eq_one h' with rfl | rfl;
1305+
tauto,
1306+
end
1307+
12931308
theorem is_unit_iff_nat_abs_eq {n : ℤ} : is_unit n ↔ n.nat_abs = 1 :=
12941309
by simp [nat_abs_eq_iff, is_unit_iff]
12951310

src/data/int/cast.lean

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,10 @@ by rw [bit1, cast_add, cast_one, cast_bit0]; refl
143143

144144
lemma cast_two [ring α] : ((2 : ℤ) : α) = 2 := by simp
145145

146+
lemma cast_three [ring α] : ((3 : ℤ) : α) = 3 := by simp
147+
148+
lemma cast_four [ring α] : ((4 : ℤ) : α) = 4 := by simp
149+
146150
theorem cast_mono [ordered_ring α] : monotone (coe : ℤ → α) :=
147151
begin
148152
intros m n h,
@@ -177,22 +181,49 @@ by rw [← cast_zero, cast_lt]
177181
@[simp] theorem cast_lt_zero [ordered_ring α] [nontrivial α] {n : ℤ} : (n : α) < 0 ↔ n < 0 :=
178182
by rw [← cast_zero, cast_lt]
179183

180-
@[simp, norm_cast] theorem cast_min [linear_ordered_ring α] {a b : ℤ} :
181-
(↑(min a b) : α) = min a b :=
184+
section linear_ordered_ring
185+
186+
variables [linear_ordered_ring α] {a b : ℤ} (n : ℤ)
187+
188+
@[simp, norm_cast] theorem cast_min : (↑(min a b) : α) = min a b :=
182189
monotone.map_min cast_mono
183190

184-
@[simp, norm_cast] theorem cast_max [linear_ordered_ring α] {a b : ℤ} :
185-
(↑(max a b) : α) = max a b :=
191+
@[simp, norm_cast] theorem cast_max : (↑(max a b) : α) = max a b :=
186192
monotone.map_max cast_mono
187193

188-
@[simp, norm_cast] theorem cast_abs [linear_ordered_ring α] {q : ℤ} :
189-
((|q| : ℤ) : α) = |q| :=
194+
@[simp, norm_cast] theorem cast_abs : ((|a| : ℤ) : α) = |a| :=
190195
by simp [abs_eq_max_neg]
191196

192-
lemma cast_nat_abs {R : Type*} [linear_ordered_ring R] : ∀ (n : ℤ), (n.nat_abs : R) = |n|
193-
| (n : ℕ) := by simp only [int.nat_abs_of_nat, int.cast_coe_nat, nat.abs_cast]
194-
| -[1+n] := by simp only [int.nat_abs, int.cast_neg_succ_of_nat, abs_neg,
195-
← nat.cast_succ, nat.abs_cast]
197+
lemma cast_one_le_of_pos (h : 0 < a) : (1 : α) ≤ a :=
198+
by exact_mod_cast int.add_one_le_of_lt h
199+
200+
lemma cast_le_neg_one_of_neg (h : a < 0) : (a : α) ≤ -1 :=
201+
by exact_mod_cast int.le_sub_one_of_lt h
202+
203+
lemma nneg_mul_add_sq_of_abs_le_one {x : α} (hx : |x| ≤ 1) :
204+
(0 : α) ≤ n * x + n * n :=
205+
begin
206+
have hnx : 0 < n → 0 ≤ x + n := λ hn, by
207+
{ convert add_le_add (neg_le_of_abs_le hx) (cast_one_le_of_pos hn),
208+
rw add_left_neg, },
209+
have hnx' : n < 0 → x + n ≤ 0 := λ hn, by
210+
{ convert add_le_add (le_of_abs_le hx) (cast_le_neg_one_of_neg hn),
211+
rw add_right_neg, },
212+
rw [← mul_add, mul_nonneg_iff],
213+
rcases lt_trichotomy n 0 with h | rfl | h,
214+
{ exact or.inr ⟨by exact_mod_cast h.le, hnx' h⟩, },
215+
{ simp [le_total 0 x], },
216+
{ exact or.inl ⟨by exact_mod_cast h.le, hnx h⟩, },
217+
end
218+
219+
lemma cast_nat_abs : (n.nat_abs : α) = |n| :=
220+
begin
221+
cases n,
222+
{ simp, },
223+
{ simp only [int.nat_abs, int.cast_neg_succ_of_nat, abs_neg, ← nat.cast_succ, nat.abs_cast], },
224+
end
225+
226+
end linear_ordered_ring
196227

197228
lemma coe_int_dvd [comm_ring α] (m n : ℤ) (h : m ∣ n) :
198229
(m : α) ∣ (n : α) :=

0 commit comments

Comments
 (0)