@@ -14,21 +14,21 @@ public import Mathlib.Analysis.Complex.RemovableSingularity
1414In this file we prove several versions of the Schwarz lemma.
1515
1616* `Complex.norm_deriv_le_div_of_mapsTo_ball`, `Complex.abs_deriv_le_div_of_mapsTo_ball`: if
17- `f : ℂ → E` sends an open disk with center `c` and a positive radius `R₁` to an open ball with
17+ `f : ℂ → E` sends an open disk with center `c` and a positive radius `R₁` to a closed ball with
1818 center `f c` and radius `R₂`, then the norm of the derivative of `f` at `c` is at most
1919 the ratio `R₂ / R₁`;
2020
2121* `Complex.dist_le_div_mul_dist_of_mapsTo_ball`: if `f : ℂ → E` sends an open disk with center `c`
22- and radius `R₁` to an open disk with center `f c` and radius `R₂`, then for any `z` in the former
22+ and radius `R₁` to a closed disk with center `f c` and radius `R₂`, then for any `z` in the former
2323 disk we have `dist (f z) (f c) ≤ (R₂ / R₁) * dist z c`;
2424
25- * `Complex.abs_deriv_le_one_of_mapsTo_ball`: if `f : ℂ → ℂ` sends an open disk of positive radius
26- to itself and the center of this disk to itself, then the norm of the derivative of `f`
27- at the center of this disk is at most `1`;
25+ * `Complex.abs_deriv_le_one_of_mapsTo_ball`: if `f : ℂ → ℂ` sends a point `c` to itself
26+ and it maps an open disk with center `c` to the closed disk with the same center and radius,
27+ then the norm of the derivative of `f` at the center of this disk is at most `1`;
2828
29- * `Complex.dist_le_dist_of_mapsTo_ball_self`: if `f : ℂ → ℂ` sends an open disk to itself and the
30- center `c` of this disk to itself, then for any point `z` of this disk we have
31- `dist (f z) c ≤ dist z c`;
29+ * `Complex.dist_le_dist_of_mapsTo_ball_self`: if `f : ℂ → ℂ` sends a point `c` to itself
30+ and it maps an open disk with center `c` to the closed disk with the same center and radius,
31+ then for any point `z` of this disk we have `dist (f z) c ≤ dist z c`;
3232
3333* `Complex.norm_le_norm_of_mapsTo_ball_self`: if `f : ℂ → ℂ` sends an open disk with center `0` to
3434 itself, then for any point `z` of this disk we have `abs (f z) ≤ abs z`.
@@ -40,32 +40,25 @@ over complex numbers.
4040
4141## TODO
4242
43- * Prove that these inequalities are strict unless `f` is an affine map.
44-
4543* Prove that any diffeomorphism of the unit disk to itself is a Möbius map.
4644
4745 ## Tags
4846
4947Schwarz lemma
5048-/
5149
52- @[expose] public section
53-
54-
5550open Metric Set Function Filter TopologicalSpace
5651
57- open scoped Topology
52+ open scoped Topology ComplexConjugate
5853
59- namespace Complex
60-
61- section Space
62-
63- variable {E : Type *} [NormedAddCommGroup E] [NormedSpace ℂ E] {R₁ R₂ : ℝ} {f : ℂ → E}
54+ variable {E : Type *} [NormedAddCommGroup E] [NormedSpace ℂ E] {R R₁ R₂ : ℝ} {f : ℂ → E}
6455 {c z z₀ : ℂ}
6556
57+ namespace Complex
58+
6659/-- An auxiliary lemma for `Complex.norm_dslope_le_div_of_mapsTo_ball`. -/
6760theorem schwarz_aux {f : ℂ → ℂ} (hd : DifferentiableOn ℂ f (ball c R₁))
68- (h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)) (hz : z ∈ ball c R₁) :
61+ (h_maps : MapsTo f (ball c R₁) (closedBall (f c) R₂)) (hz : z ∈ ball c R₁) :
6962 ‖dslope f c z‖ ≤ R₂ / R₁ := by
7063 have hR₁ : 0 < R₁ := nonempty_ball.1 ⟨z, hz⟩
7164 suffices ∀ᶠ r in 𝓝[<] R₁, ‖dslope f c z‖ ≤ R₂ / r by
@@ -84,39 +77,40 @@ theorem schwarz_aux {f : ℂ → ℂ} (hd : DifferentiableOn ℂ f (ball c R₁)
8477 intro z hz
8578 have hz' : z ≠ c := ne_of_mem_sphere hz hr₀.ne'
8679 rw [dslope_of_ne _ hz', slope_def_module, norm_smul, norm_inv, mem_sphere_iff_norm.1 hz, ←
87- div_eq_inv_mul, div_le_div_iff_of_pos_right hr₀, ← dist_eq_norm ]
88- exact le_of_lt ( h_maps ( mem_ball.2 ( by rw [mem_sphere.1 hz]; exact hr.2 )))
80+ div_eq_inv_mul, div_le_div_iff_of_pos_right hr₀, ← mem_closedBall_iff_norm ]
81+ exact h_maps <| mem_ball.2 <| by rw [mem_sphere.1 hz]; exact hr.2
8982 · rw [closure_ball c hr₀.ne', mem_closedBall]
9083 exact hr.1 .le
9184
85+ public section
86+
9287/-- Two cases of the **Schwarz Lemma** (derivative and distance), merged together. -/
9388theorem norm_dslope_le_div_of_mapsTo_ball (hd : DifferentiableOn ℂ f (ball c R₁))
94- (h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)) (hz : z ∈ ball c R₁) :
89+ (h_maps : MapsTo f (ball c R₁) (closedBall (f c) R₂)) (hz : z ∈ ball c R₁) :
9590 ‖dslope f c z‖ ≤ R₂ / R₁ := by
9691 have hR₁ : 0 < R₁ := nonempty_ball.1 ⟨z, hz⟩
97- have hR₂ : 0 < R₂ := nonempty_ball. 1 ⟨f z, h_maps hz⟩
92+ have hR₂ : 0 ≤ R₂ := nonempty_closedBall.mp ⟨f z, h_maps hz⟩
9893 rcases eq_or_ne (dslope f c z) 0 with hc | hc
99- · rw [hc, norm_zero]; exact div_nonneg hR₂.le hR₁.le
94+ · rw [hc, norm_zero]; exact div_nonneg hR₂ hR₁.le
10095 rcases exists_dual_vector ℂ _ hc with ⟨g, hg, hgf⟩
10196 have hg' : ‖g‖₊ = 1 := NNReal.eq hg
102- have hg₀ : ‖g‖₊ ≠ 0 := by simpa only [hg'] using one_ne_zero
10397 calc
10498 ‖dslope f c z‖ = ‖dslope (g ∘ f) c z‖ := by
10599 rw [g.dslope_comp, hgf, RCLike.norm_ofReal, abs_norm]
106100 exact fun _ => hd.differentiableAt (ball_mem_nhds _ hR₁)
107101 _ ≤ R₂ / R₁ := by
108102 refine schwarz_aux (g.differentiable.comp_differentiableOn hd) (MapsTo.comp ?_ h_maps) hz
109- simpa only [hg', NNReal.coe_one, one_mul] using g.lipschitz.mapsTo_ball hg₀ (f c) R₂
103+ simpa only [hg', NNReal.coe_one, one_mul] using g.lipschitz.mapsTo_closedBall (f c) R₂
110104
111105/-- Equality case in the **Schwarz Lemma** : in the setup of `norm_dslope_le_div_of_mapsTo_ball`, if
112106`‖dslope f c z₀‖ = R₂ / R₁` holds at a point in the ball then the map `f` is affine. -/
113107theorem affine_of_mapsTo_ball_of_exists_norm_dslope_eq_div [CompleteSpace E] [StrictConvexSpace ℝ E]
114- (hd : DifferentiableOn ℂ f (ball c R₁)) (h_maps : Set.MapsTo f (ball c R₁) (ball (f c) R₂))
108+ (hd : DifferentiableOn ℂ f (ball c R₁))
109+ (h_maps : Set.MapsTo f (ball c R₁) (closedBall (f c) R₂))
115110 (h_z₀ : z₀ ∈ ball c R₁) (h_eq : ‖dslope f c z₀‖ = R₂ / R₁) :
116111 Set.EqOn f (fun z => f c + (z - c) • dslope f c z₀) (ball c R₁) := by
117112 set g := dslope f c
118113 rintro z hz
119- by_cases h : z = c; · simp [h]
120114 have h_R₁ : 0 < R₁ := nonempty_ball.mp ⟨_, h_z₀⟩
121115 have g_le_div : ∀ z ∈ ball c R₁, ‖g z‖ ≤ R₂ / R₁ := fun z hz =>
122116 norm_dslope_le_div_of_mapsTo_ball hd h_maps hz
@@ -131,7 +125,7 @@ theorem affine_of_mapsTo_ball_of_exists_norm_dslope_eq_div [CompleteSpace E] [St
131125
132126theorem affine_of_mapsTo_ball_of_exists_norm_dslope_eq_div' [CompleteSpace E]
133127 [StrictConvexSpace ℝ E] (hd : DifferentiableOn ℂ f (ball c R₁))
134- (h_maps : Set.MapsTo f (ball c R₁) (ball (f c) R₂))
128+ (h_maps : Set.MapsTo f (ball c R₁) (closedBall (f c) R₂))
135129 (h_z₀ : ∃ z₀ ∈ ball c R₁, ‖dslope f c z₀‖ = R₂ / R₁) :
136130 ∃ C : E, ‖C‖ = R₂ / R₁ ∧ Set.EqOn f (fun z => f c + (z - c) • C) (ball c R₁) :=
137131 let ⟨z₀, h_z₀, h_eq⟩ := h_z₀
@@ -141,46 +135,43 @@ theorem affine_of_mapsTo_ball_of_exists_norm_dslope_eq_div' [CompleteSpace E]
141135`R₁` to an open ball with center `f c` and radius `R₂`, then the norm of the derivative of
142136`f` at `c` is at most the ratio `R₂ / R₁`. -/
143137theorem norm_deriv_le_div_of_mapsTo_ball (hd : DifferentiableOn ℂ f (ball c R₁))
144- (h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)) (h₀ : 0 < R₁) : ‖deriv f c‖ ≤ R₂ / R₁ := by
138+ (h_maps : MapsTo f (ball c R₁) (closedBall (f c) R₂)) (h₀ : 0 < R₁) :
139+ ‖deriv f c‖ ≤ R₂ / R₁ := by
145140 simpa only [dslope_same] using norm_dslope_le_div_of_mapsTo_ball hd h_maps (mem_ball_self h₀)
146141
147- /-- The **Schwarz Lemma** : if `f : ℂ → E` sends an open disk with center `c` and radius `R₁` to an
148- open ball with center `f c` and radius `R₂`, then for any `z` in the former disk we have
142+ /-- The **Schwarz Lemma** : if `f : ℂ → E` sends an open disk with center `c` and radius `R₁` to a
143+ closed ball with center `f c` and radius `R₂`, then for any `z` in the former disk we have
149144`dist (f z) (f c) ≤ (R₂ / R₁) * dist z c`. -/
150145theorem dist_le_div_mul_dist_of_mapsTo_ball (hd : DifferentiableOn ℂ f (ball c R₁))
151- (h_maps : MapsTo f (ball c R₁) (ball (f c) R₂)) (hz : z ∈ ball c R₁) :
146+ (h_maps : MapsTo f (ball c R₁) (closedBall (f c) R₂)) (hz : z ∈ ball c R₁) :
152147 dist (f z) (f c) ≤ R₂ / R₁ * dist z c := by
153148 rcases eq_or_ne z c with (rfl | hne)
154149 · simp only [dist_self, mul_zero, le_rfl]
155150 simpa only [dslope_of_ne _ hne, slope_def_module, norm_smul, norm_inv, ← div_eq_inv_mul, ←
156151 dist_eq_norm, div_le_iff₀ (dist_pos.2 hne)] using norm_dslope_le_div_of_mapsTo_ball hd h_maps hz
157152
158- end Space
159-
160- variable {f : ℂ → ℂ} {c z : ℂ} {R R₁ R₂ : ℝ}
161-
162153/-- The **Schwarz Lemma** : if `f : ℂ → ℂ` sends an open disk of positive radius to itself and the
163154center of this disk to itself, then the norm of the derivative of `f` at the center of
164155this disk is at most `1`. -/
165156theorem norm_deriv_le_one_of_mapsTo_ball (hd : DifferentiableOn ℂ f (ball c R))
166- (h_maps : MapsTo f (ball c R) (ball c R)) (hc : f c = c ) (h₀ : 0 < R) : ‖deriv f c‖ ≤ 1 :=
167- (norm_deriv_le_div_of_mapsTo_ball hd ( by rwa [hc]) h₀).trans_eq (div_self h₀.ne')
157+ (h_maps : MapsTo f (ball c R) (closedBall ( f c) R) ) (h₀ : 0 < R) : ‖deriv f c‖ ≤ 1 :=
158+ (norm_deriv_le_div_of_mapsTo_ball hd h_maps h₀).trans_eq (div_self h₀.ne')
168159
169160/-- The **Schwarz Lemma** : if `f : ℂ → ℂ` sends an open disk to itself and the center `c` of this
170161disk to itself, then for any point `z` of this disk we have `dist (f z) c ≤ dist z c`. -/
171162theorem dist_le_dist_of_mapsTo_ball_self (hd : DifferentiableOn ℂ f (ball c R))
172- (h_maps : MapsTo f (ball c R) (ball c R)) (hc : f c = c) (hz : z ∈ ball c R) :
173- dist (f z) c ≤ dist z c := by
174- have := dist_le_div_mul_dist_of_mapsTo_ball hd (by rwa [hc]) hz
175- rwa [hc, div_self, one_mul] at this
176- exact (nonempty_ball.1 ⟨z, hz⟩).ne'
177-
178- /-- The **Schwarz Lemma** : if `f : ℂ → ℂ` sends an open disk with center `0` to itself, then for any
179- point `z` of this disk we have `‖f z‖ ≤ ‖z‖`. -/
163+ (h_maps : MapsTo f (ball c R) (closedBall (f c) R)) (hz : z ∈ ball c R) :
164+ dist (f z) (f c) ≤ dist z c := by
165+ simpa [(nonempty_ball.1 ⟨z, hz⟩).ne'] using dist_le_div_mul_dist_of_mapsTo_ball hd h_maps hz
166+
167+ /-- The **Schwarz Lemma** : if `f : ℂ → E` sends an open disk with center `0`
168+ to the closed ball with center `0` of the same radius,
169+ then for any point `z` of this disk we have `‖f z‖ ≤ ‖z‖`. -/
180170theorem norm_le_norm_of_mapsTo_ball_self (hd : DifferentiableOn ℂ f (ball 0 R))
181- (h_maps : MapsTo f (ball 0 R) (ball 0 R)) (h₀ : f 0 = 0 ) (hz : ‖z‖ < R) :
171+ (h_maps : MapsTo f (ball 0 R) (closedBall 0 R)) (h₀ : f 0 = 0 ) (hz : ‖z‖ < R) :
182172 ‖f z‖ ≤ ‖z‖ := by
183- replace hz : z ∈ ball (0 : ℂ) R := mem_ball_zero_iff.2 hz
184- simpa only [dist_zero_right] using dist_le_dist_of_mapsTo_ball_self hd h_maps h₀ hz
173+ simpa [h₀] using dist_le_dist_of_mapsTo_ball_self hd (by rwa [h₀]) (mem_ball_zero_iff.mpr hz)
174+
175+ end -- public section
185176
186177end Complex
0 commit comments