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

Commit bc91ed7

Browse files
committed
feat(analysis/normed_space/basic): scaling a set scales its diameter, translating it leaves it unchanged (#18990)
1 parent 6315581 commit bc91ed7

File tree

6 files changed

+87
-7
lines changed

6 files changed

+87
-7
lines changed

src/analysis/normed/mul_action.lean

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@ by simpa only [dist_eq_norm, sub_zero] using dist_smul_pair s x y
3434
lemma nndist_smul_le (s : α) (x y : β) : nndist (s • x) (s • y) ≤ ‖s‖₊ * nndist x y :=
3535
dist_smul_le s x y
3636

37-
lemma lipschitz_with_smul (s : α) : lipschitz_with ‖s‖₊ ((•) s : β → β) :=
37+
lemma edist_smul_le (s : α) (x y : β) : edist (s • x) (s • y) ≤ ‖s‖₊ • edist x y :=
38+
by simpa only [edist_nndist, ennreal.coe_mul] using ennreal.coe_le_coe.mpr (nndist_smul_le s x y)
39+
40+
lemma lipschitz_with_smul (s : α) : lipschitz_with ‖s‖₊ ((•) s : β → β) :=
3841
lipschitz_with_iff_dist_le_mul.2 $ dist_smul_le _
3942

4043
end seminormed_add_group
@@ -91,8 +94,10 @@ variables [module α β] [has_bounded_smul α β]
9194
lemma dist_smul₀ (s : α) (x y : β) : dist (s • x) (s • y) = ‖s‖ * dist x y :=
9295
by simp_rw [dist_eq_norm, (norm_smul _ _).symm, smul_sub]
9396

94-
lemma nndist_smul₀ (s : α) (x y : β) :
95-
nndist (s • x) (s • y) = ‖s‖₊ * nndist x y :=
97+
lemma nndist_smul₀ (s : α) (x y : β) : nndist (s • x) (s • y) = ‖s‖₊ * nndist x y :=
9698
nnreal.eq $ dist_smul₀ s x y
9799

100+
lemma edist_smul₀ (s : α) (x y : β) : edist (s • x) (s • y) = ‖s‖₊ • edist x y :=
101+
by simp only [edist_nndist, nndist_smul₀, ennreal.coe_mul, ennreal.smul_def, smul_eq_mul]
102+
98103
end normed_division_ring_module

src/analysis/normed_space/basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ about these definitions.
2323
variables {α : Type*} {β : Type*} {γ : Type*} {ι : Type*}
2424

2525
open filter metric function set
26-
open_locale topology big_operators nnreal ennreal uniformity pointwise
26+
open_locale topology big_operators nnreal ennreal uniformity
2727

2828
section seminormed_add_comm_group
2929

src/analysis/normed_space/pointwise.lean

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,59 @@ multiplication of bounded sets remain bounded.
2121
open metric set
2222
open_locale pointwise topology
2323

24-
variables {𝕜 E : Type*} [normed_field 𝕜]
24+
variables {𝕜 E : Type*}
25+
26+
section smul_zero_class
27+
variables [seminormed_add_comm_group 𝕜] [seminormed_add_comm_group E]
28+
variables [smul_zero_class 𝕜 E] [has_bounded_smul 𝕜 E]
29+
30+
lemma ediam_smul_le (c : 𝕜) (s : set E) :
31+
emetric.diam (c • s) ≤ ‖c‖₊ • emetric.diam s :=
32+
(lipschitz_with_smul c).ediam_image_le s
33+
34+
end smul_zero_class
35+
36+
section division_ring
37+
variables [normed_division_ring 𝕜] [seminormed_add_comm_group E]
38+
variables [module 𝕜 E] [has_bounded_smul 𝕜 E]
39+
40+
lemma ediam_smul₀ (c : 𝕜) (s : set E) :
41+
emetric.diam (c • s) = ‖c‖₊ • emetric.diam s :=
42+
begin
43+
refine le_antisymm (ediam_smul_le c s) _,
44+
obtain rfl | hc := eq_or_ne c 0,
45+
{ obtain rfl | hs := s.eq_empty_or_nonempty,
46+
{ simp },
47+
simp [zero_smul_set hs, ←set.singleton_zero], },
48+
{ have := (lipschitz_with_smul c⁻¹).ediam_image_le (c • s),
49+
rwa [← smul_eq_mul, ←ennreal.smul_def, set.image_smul, inv_smul_smul₀ hc s, nnnorm_inv,
50+
ennreal.le_inv_smul_iff (nnnorm_ne_zero_iff.mpr hc)] at this }
51+
end
52+
53+
lemma diam_smul₀ (c : 𝕜) (x : set E) : diam (c • x) = ‖c‖ * diam x :=
54+
by simp_rw [diam, ediam_smul₀, ennreal.to_real_smul, nnreal.smul_def, coe_nnnorm, smul_eq_mul]
55+
56+
lemma inf_edist_smul₀ {c : 𝕜} (hc : c ≠ 0) (s : set E) (x : E) :
57+
emetric.inf_edist (c • x) (c • s) = ‖c‖₊ • emetric.inf_edist x s :=
58+
begin
59+
simp_rw [emetric.inf_edist],
60+
have : function.surjective ((•) c : E → E) :=
61+
function.right_inverse.surjective (smul_inv_smul₀ hc),
62+
transitivity ⨅ y (H : y ∈ s), ‖c‖₊ • edist x y,
63+
{ refine (this.infi_congr _ $ λ y, _).symm,
64+
simp_rw [smul_mem_smul_set_iff₀ hc, edist_smul₀] },
65+
{ have : (‖c‖₊ : ennreal) ≠ 0 := by simp [hc],
66+
simp_rw [ennreal.smul_def, smul_eq_mul, ennreal.mul_infi_of_ne this ennreal.coe_ne_top] },
67+
end
68+
69+
lemma inf_dist_smul₀ {c : 𝕜} (hc : c ≠ 0) (s : set E) (x : E) :
70+
metric.inf_dist (c • x) (c • s) = ‖c‖ * metric.inf_dist x s :=
71+
by simp_rw [metric.inf_dist, inf_edist_smul₀ hc, ennreal.to_real_smul, nnreal.smul_def, coe_nnnorm,
72+
smul_eq_mul]
73+
74+
end division_ring
75+
76+
variables [normed_field 𝕜]
2577

2678
section seminormed_add_comm_group
2779
variables [seminormed_add_comm_group E] [normed_space 𝕜 E]

src/data/real/ennreal.lean

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1243,9 +1243,17 @@ begin
12431243
simpa [left_ne_zero_of_mul_eq_one h] using h,
12441244
end
12451245

1246-
lemma mul_le_iff_le_inv {a b r : ℝ≥0∞} (hr₀ : r ≠ 0) (hr₁ : r ≠ ∞) : (r * a ≤ b ↔ a ≤ r⁻¹ * b) :=
1246+
lemma mul_le_iff_le_inv {a b r : ℝ≥0∞} (hr₀ : r ≠ 0) (hr₁ : r ≠ ∞) : r * a ≤ b ↔ a ≤ r⁻¹ * b :=
12471247
by rw [←@ennreal.mul_le_mul_left _ a _ hr₀ hr₁, ←mul_assoc, ennreal.mul_inv_cancel hr₀ hr₁, one_mul]
12481248

1249+
/-- A variant of `le_inv_smul_iff` that holds for `ennreal`. -/
1250+
protected lemma le_inv_smul_iff {a b : ℝ≥0∞} {r : ℝ≥0} (hr₀ : r ≠ 0) : a ≤ r⁻¹ • b ↔ r • a ≤ b :=
1251+
by simpa [hr₀, ennreal.smul_def] using (mul_le_iff_le_inv (coe_ne_zero.mpr hr₀) coe_ne_top).symm
1252+
1253+
/-- A variant of `inv_smul_le_iff` that holds for `ennreal`. -/
1254+
protected lemma inv_smul_le_iff {a b : ℝ≥0∞} {r : ℝ≥0} (hr₀ : r ≠ 0) : r⁻¹ • a ≤ b ↔ a ≤ r • b :=
1255+
by simpa only [inv_inv] using (ennreal.le_inv_smul_iff (inv_ne_zero hr₀)).symm
1256+
12491257
lemma le_of_forall_nnreal_lt {x y : ℝ≥0∞} (h : ∀ r : ℝ≥0, ↑r < x → ↑r ≤ y) : x ≤ y :=
12501258
begin
12511259
refine le_of_forall_ge_of_dense (λ r hr, _),

src/topology/metric_space/hausdorff_distance.lean

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Sébastien Gouëzel
55
-/
66
import analysis.specific_limits.basic
7+
import topology.metric_space.isometric_smul
78
import topology.metric_space.isometry
89
import topology.instances.ennreal
910

@@ -30,7 +31,7 @@ This files introduces:
3031
* `cthickening δ s`, the closed thickening by radius `δ` of a set `s` in a pseudo emetric space.
3132
-/
3233
noncomputable theory
33-
open_locale classical nnreal ennreal topology
34+
open_locale classical nnreal ennreal topology pointwise
3435
universes u v w
3536

3637
open classical set function topological_space filter
@@ -167,6 +168,11 @@ lemma inf_edist_image (hΦ : isometry Φ) :
167168
inf_edist (Φ x) (Φ '' t) = inf_edist x t :=
168169
by simp only [inf_edist, infi_image, hΦ.edist_eq]
169170

171+
@[simp, to_additive] lemma inf_edist_smul {M} [has_smul M α] [has_isometric_smul M α]
172+
(c : M) (x : α) (s : set α) :
173+
inf_edist (c • x) (c • s) = inf_edist x s :=
174+
inf_edist_image (isometry_smul _ _)
175+
170176
lemma _root_.is_open.exists_Union_is_closed {U : set α} (hU : is_open U) :
171177
∃ F : ℕ → set α, (∀ n, is_closed (F n)) ∧ (∀ n, F n ⊆ U) ∧ ((⋃ n, F n) = U) ∧ monotone F :=
172178
begin

src/topology/metric_space/isometric_smul.lean

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ variables [pseudo_emetric_space X] [group G] [mul_action G X] [has_isometric_smu
6767
edist (c • x) (c • y) = edist x y :=
6868
isometry_smul X c x y
6969

70+
@[simp, to_additive] lemma ediam_smul [has_smul M X] [has_isometric_smul M X] (c : M) (s : set X) :
71+
emetric.diam (c • s) = emetric.diam s :=
72+
(isometry_smul _ _).ediam_image s
73+
7074
@[to_additive] lemma isometry_mul_left [has_mul M] [pseudo_emetric_space M]
7175
[has_isometric_smul M M] (a : M) : isometry ((*) a) :=
7276
isometry_smul M a
@@ -223,6 +227,11 @@ lemma nndist_smul [pseudo_metric_space X] [has_smul M X] [has_isometric_smul M X
223227
(c : M) (x y : X) : nndist (c • x) (c • y) = nndist x y :=
224228
(isometry_smul X c).nndist_eq x y
225229

230+
@[simp, to_additive]
231+
lemma diam_smul [pseudo_metric_space X] [has_smul M X] [has_isometric_smul M X]
232+
(c : M) (s : set X) : metric.diam (c • s) = metric.diam s :=
233+
(isometry_smul _ _).diam_image s
234+
226235
@[simp, to_additive]
227236
lemma dist_mul_left [pseudo_metric_space M] [has_mul M] [has_isometric_smul M M]
228237
(a b c : M) : dist (a * b) (a * c) = dist b c :=

0 commit comments

Comments
 (0)