Skip to content

Commit 8845413

Browse files
committed
Various lemmas for needed by Koebe computations
1 parent f739c18 commit 8845413

4 files changed

Lines changed: 28 additions & 2 deletions

File tree

Ray/Manifold/RiemannSphere.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,13 @@ public theorem continuousOn_toComplex : ContinuousOn OnePoint.toComplex ({∞}
9797
· simp only [mem_compl_iff, mem_singleton_iff, not_true] at m
9898
· exact continuousAt_toComplex.continuousWithinAt
9999

100+
/-- `toComplex` is injective away from `∞` -/
101+
public lemma toComplex_inj {z w : 𝕊} (zi : z ≠ (∞ : 𝕊)) (wi : w ≠ (∞ : 𝕊)) :
102+
z.toComplex = w.toComplex ↔ z = w := by
103+
induction' z using OnePoint.rec
104+
all_goals induction' w using OnePoint.rec
105+
all_goals simp_all
106+
100107
/-- Inversion in `𝕊`, interchanging `0` and `∞` -/
101108
public def inv (z : 𝕊) : 𝕊 := if z = 0 thenelse ↑z.toComplex⁻¹
102109
public instance : Inv 𝕊 := ⟨RiemannSphere.inv⟩

Ray/Multibrot/Basic.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ theorem multibrot_eq_le_two :
394394
rcases(h 3).exists with ⟨n, h⟩; use n; linarith
395395

396396
/-- `multibrot d` is compact -/
397-
theorem isCompact_multibrot : IsCompact (multibrot d) := by
397+
public theorem isCompact_multibrot : IsCompact (multibrot d) := by
398398
refine IsCompact.of_isClosed_subset (isCompact_closedBall _ _) ?_ multibrot_subset_closedBall
399399
rw [multibrot_eq_le_two]; apply isClosed_iInter; intro n
400400
refine IsClosed.preimage ?_ Metric.isClosed_closedBall
@@ -480,7 +480,7 @@ theorem bottcher_tendsto_zero : Tendsto (bottcher' d) (cobounded ℂ) (𝓝 0) :
480480
linarith
481481

482482
/-- `bottcher' d` is analytic outside the Multibrot set -/
483-
theorem bottcher_analytic : AnalyticOnNhd ℂ (bottcher' d) (multibrot d)ᶜ := by
483+
public theorem bottcher_analytic : AnalyticOnNhd ℂ (bottcher' d) (multibrot d)ᶜ := by
484484
set s := superF d
485485
intro c m
486486
apply ContMDiffAt.analyticAt I I

Ray/Multibrot/Isomorphism.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,14 @@ public theorem bottcher_inj : InjOn (bottcher d) (multibrotExt d) := by
160160
rw [← norm_ne_zero_iff, norm_bottcher]
161161
linarith
162162

163+
public lemma bottcher_inj' : InjOn (bottcher' d) (multibrot d)ᶜ := by
164+
intro a am b bm e
165+
simp only [mem_compl_iff, ← multibrotExt_coe] at am bm
166+
simpa using bottcher_inj (d := d) am bm (by simp [bottcher, e])
167+
168+
public lemma deriv_bottcher_ne_zero (m : c ∉ multibrot d) : deriv (bottcher' d) c ≠ 0 :=
169+
bottcher_inj'.deriv_ne_zero isCompact_multibrot.isClosed.isOpen_compl m (bottcher_analytic _ m)
170+
163171
/-!
164172
## The external ray map, and `bottcherHomeomorph`
165173
-/

Ray/Schwarz/Mobius.lean

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,17 @@ public lemma bijOn_mobius (w1 : ‖w‖ < 1) : BijOn (mobius w) (ball 0 1) (ball
103103
@[simp] public lemma mobius_zero : mobius w 0 = w := by simp [mobius]
104104
@[simp] public lemma mobius_self : mobius w w = 0 := by simp [mobius]
105105

106+
public lemma mobius_eq_zero_iff (w1 : ‖w‖ < 1) (z1 : ‖z‖ < 1) :
107+
mobius w z = 0 ↔ w = z := by
108+
simp only [mobius, div_eq_zero_iff, sub_eq_zero, or_iff_left_iff_imp]
109+
intro e
110+
have lt : ‖conj w * z‖ < 1 := by
111+
calc ‖conj w * z‖
112+
_ = ‖w‖ * ‖z‖ := by simp
113+
_ < 1 * 1 := by apply mul_lt_mul' <;> bound
114+
_ = 1 := by norm_num
115+
simp only [← e, one_mem, CStarRing.norm_of_mem_unitary, lt_self_iff_false] at lt
116+
106117
/-- Convenience lemma to pull a inverse scale out of a Möbius denominator -/
107118
public lemma mobius_denom_inv_mul (r0 : r ≠ 0) (w z : ℂ) :
108119
(1 - conj (r⁻¹ * w) * (r⁻¹ * z)) = r⁻¹ ^ 2 * (r ^ 2 - conj w * z) := by

0 commit comments

Comments
 (0)