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

Commit 992e26f

Browse files
committed
feat(topology/algebra/affine): a sufficiently small dilation of a point in the interior of a set lands in the interior (#13766)
Formalized as part of the Sphere Eversion project.
1 parent b4cad37 commit 992e26f

File tree

3 files changed

+61
-11
lines changed

3 files changed

+61
-11
lines changed

src/algebra/add_torsor.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ equal. -/
114114
@[simp] lemma vsub_eq_zero_iff_eq {p1 p2 : P} : p1 -ᵥ p2 = (0 : G) ↔ p1 = p2 :=
115115
iff.intro eq_of_vsub_eq_zero (λ h, h ▸ vsub_self _)
116116

117+
lemma vsub_ne_zero {p q : P} : p -ᵥ q ≠ (0 : G) ↔ p ≠ q :=
118+
not_congr vsub_eq_zero_iff_eq
119+
117120
/-- Cancellation adding the results of two subtractions. -/
118121
@[simp] lemma vsub_add_vsub_cancel (p1 p2 p3 : P) : p1 -ᵥ p2 + (p2 -ᵥ p3) = (p1 -ᵥ p3) :=
119122
begin
@@ -129,6 +132,9 @@ begin
129132
rw [vsub_add_vsub_cancel, vsub_self],
130133
end
131134

135+
lemma vadd_vsub_eq_sub_vsub (g : G) (p q : P) : g +ᵥ p -ᵥ q = g - (q -ᵥ p) :=
136+
by rw [vadd_vsub_assoc, sub_eq_add_neg, neg_vsub_eq_vsub_rev]
137+
132138
/-- Subtracting the result of adding a group element produces the same result
133139
as subtracting the points and subtracting that group element. -/
134140
lemma vsub_vadd_eq_vsub_sub (p1 p2 : P) (g : G) : p1 -ᵥ (g +ᵥ p2) = (p1 -ᵥ p2) - g :=

src/analysis/normed/group/basic.lean

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,9 @@ lemma norm_le_add_norm_add (u v : E) :
256256
calc ∥u∥ = ∥u + v - v∥ : by rw add_sub_cancel
257257
... ≤ ∥u + v∥ + ∥v∥ : norm_sub_le _ _
258258

259+
lemma ball_eq (y : E) (ε : ℝ) : metric.ball y ε = { x | ∥x - y∥ < ε} :=
260+
by { ext, simp [dist_eq_norm], }
261+
259262
lemma ball_zero_eq (ε : ℝ) : ball (0 : E) ε = {x | ∥x∥ < ε} :=
260263
set.ext $ assume a, by simp
261264

@@ -425,6 +428,20 @@ lemma normed_group.cauchy_seq_iff [nonempty α] [semilattice_sup α] {u : α →
425428
cauchy_seq u ↔ ∀ ε > 0, ∃ N, ∀ m, N ≤ m → ∀ n, N ≤ n → ∥u m - u n∥ < ε :=
426429
by simp [metric.cauchy_seq_iff, dist_eq_norm]
427430

431+
lemma normed_group.nhds_basis_norm_lt (x : E) :
432+
(𝓝 x).has_basis (λ (ε : ℝ), 0 < ε) (λ (ε : ℝ), { y | ∥y - x∥ < ε }) :=
433+
begin
434+
simp_rw ← ball_eq,
435+
exact metric.nhds_basis_ball,
436+
end
437+
438+
lemma normed_group.nhds_zero_basis_norm_lt :
439+
(𝓝 (0 : E)).has_basis (λ (ε : ℝ), 0 < ε) (λ (ε : ℝ), { y | ∥y∥ < ε }) :=
440+
begin
441+
convert normed_group.nhds_basis_norm_lt (0 : E),
442+
simp,
443+
end
444+
428445
lemma normed_group.uniformity_basis_dist :
429446
(𝓤 E).has_basis (λ (ε : ℝ), 0 < ε) (λ ε, {p : E × E | ∥p.fst - p.snd∥ < ε}) :=
430447
begin

src/analysis/normed_space/add_torsor.lean

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ variables {W Q : Type*} [normed_group W] [metric_space Q] [normed_add_torsor W Q
2424

2525
section normed_space
2626

27-
variables {𝕜 : Type*} [normed_field 𝕜] [normed_space 𝕜 V]
27+
variables {𝕜 : Type*} [normed_field 𝕜] [normed_space 𝕜 V] [normed_space 𝕜 W]
2828

2929
open affine_map
3030

31-
lemma affine_subspace.is_closed_direction_iff [normed_space 𝕜 W] (s : affine_subspace 𝕜 Q) :
31+
lemma affine_subspace.is_closed_direction_iff (s : affine_subspace 𝕜 Q) :
3232
is_closed (s.direction : set W) ↔ is_closed (s : set Q) :=
3333
begin
3434
rcases s.eq_bot_or_nonempty with rfl|⟨x, hx⟩, { simp [is_closed_singleton] },
@@ -60,15 +60,6 @@ lemma lipschitz_with_line_map (p₁ p₂ : P) :
6060
lipschitz_with.of_dist_le_mul $ λ c₁ c₂,
6161
((dist_line_map_line_map p₁ p₂ c₁ c₂).trans (mul_comm _ _)).le
6262

63-
omit V
64-
65-
lemma antilipschitz_with_line_map [normed_space 𝕜 W] {p₁ p₂ : Q} (h : p₁ ≠ p₂) :
66-
antilipschitz_with (nndist p₁ p₂)⁻¹ (line_map p₁ p₂ : 𝕜 → Q) :=
67-
antilipschitz_with.of_le_mul_dist $ λ c₁ c₂, by rw [dist_line_map_line_map, nnreal.coe_inv,
68-
← dist_nndist, mul_left_comm, inv_mul_cancel (dist_ne_zero.2 h), mul_one]
69-
70-
include V
71-
7263
@[simp] lemma dist_line_map_left (p₁ p₂ : P) (c : 𝕜) :
7364
dist (line_map p₁ p₂ c) p₁ = ∥c∥ * dist p₁ p₂ :=
7465
by simpa only [line_map_apply_zero, dist_zero_right] using dist_line_map_line_map p₁ p₂ c 0
@@ -93,6 +84,8 @@ by rw [homothety_eq_line_map, dist_line_map_right]
9384
dist p₂ (homothety p₁ c p₂) = ∥1 - c∥ * dist p₁ p₂ :=
9485
by rw [dist_comm, dist_homothety_self]
9586

87+
section invertible_two
88+
9689
variables [invertible (2:𝕜)]
9790

9891
@[simp] lemma dist_left_midpoint (p₁ p₂ : P) :
@@ -120,6 +113,40 @@ begin
120113
exact div_le_div_of_le_of_nonneg (norm_add_le _ _) (norm_nonneg _),
121114
end
122115

116+
end invertible_two
117+
118+
omit V
119+
include W
120+
121+
lemma antilipschitz_with_line_map {p₁ p₂ : Q} (h : p₁ ≠ p₂) :
122+
antilipschitz_with (nndist p₁ p₂)⁻¹ (line_map p₁ p₂ : 𝕜 → Q) :=
123+
antilipschitz_with.of_le_mul_dist $ λ c₁ c₂, by rw [dist_line_map_line_map, nnreal.coe_inv,
124+
← dist_nndist, mul_left_comm, inv_mul_cancel (dist_ne_zero.2 h), mul_one]
125+
126+
lemma eventually_homothety_mem_of_mem_interior (x : Q) {s : set Q} {y : Q} (hy : y ∈ interior s) :
127+
∀ᶠ δ in 𝓝 (1 : 𝕜), homothety x δ y ∈ s :=
128+
begin
129+
rw (normed_group.nhds_basis_norm_lt (1 : 𝕜)).eventually_iff,
130+
cases eq_or_ne y x with h h, { use 1, simp [h.symm, interior_subset hy], },
131+
have hxy : 0 < ∥y -ᵥ x∥, { rwa [norm_pos_iff, vsub_ne_zero], },
132+
obtain ⟨u, hu₁, hu₂, hu₃⟩ := mem_interior.mp hy,
133+
obtain ⟨ε, hε, hyε⟩ := metric.is_open_iff.mp hu₂ y hu₃,
134+
refine ⟨ε / ∥y -ᵥ x∥, div_pos hε hxy, λ δ (hδ : ∥δ - 1∥ < ε / ∥y -ᵥ x∥), hu₁ (hyε _)⟩,
135+
rw [lt_div_iff hxy, ← norm_smul, sub_smul, one_smul] at hδ,
136+
rwa [homothety_apply, metric.mem_ball, dist_eq_norm_vsub W, vadd_vsub_eq_sub_vsub],
137+
end
138+
139+
lemma eventually_homothety_image_subset_of_finite_subset_interior
140+
(x : Q) {s : set Q} {t : set Q} (ht : t.finite) (h : t ⊆ interior s) :
141+
∀ᶠ δ in 𝓝 (1 : 𝕜), homothety x δ '' t ⊆ s :=
142+
begin
143+
suffices : ∀ y ∈ t, ∀ᶠ δ in 𝓝 (1 : 𝕜), homothety x δ y ∈ s,
144+
{ simp_rw set.image_subset_iff,
145+
exact (filter.eventually_all_finite ht).mpr this, },
146+
intros y hy,
147+
exact eventually_homothety_mem_of_mem_interior x (h hy),
148+
end
149+
123150
end normed_space
124151

125152
variables [normed_space ℝ V] [normed_space ℝ W]

0 commit comments

Comments
 (0)