@@ -3,11 +3,11 @@ Copyright (c) 2021 Sébastien Gouëzel. All rights reserved.
3
3
Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Sébastien Gouëzel
5
5
-/
6
- import analysis.normed.group.basic
6
+ import analysis.normed.group.add_torsor
7
7
import topology.metric_space.hausdorff_distance
8
8
9
9
/-!
10
- # Properties of pointwise addition of sets in normed groups.
10
+ # Properties of pointwise addition of sets in normed groups
11
11
12
12
We explore the relationships between pointwise addition of sets in normed groups, and the norm.
13
13
Notably, we show that the sum of bounded sets remain bounded.
@@ -18,16 +18,14 @@ open_locale pointwise topological_space
18
18
19
19
section semi_normed_group
20
20
21
- variables {E : Type *} [semi_normed_group E]
21
+ variables {E : Type *} [semi_normed_group E] {ε δ : ℝ} {s t : set E} {x y : E}
22
22
23
- lemma bounded_iff_exists_norm_le {s : set E} :
24
- bounded s ↔ ∃ R, ∀ x ∈ s, ∥x∥ ≤ R :=
23
+ lemma bounded_iff_exists_norm_le : bounded s ↔ ∃ R, ∀ x ∈ s, ∥x∥ ≤ R :=
25
24
by simp [subset_def, bounded_iff_subset_ball (0 : E)]
26
25
27
26
alias bounded_iff_exists_norm_le ↔ metric.bounded.exists_norm_le _
28
27
29
- lemma metric.bounded.exists_pos_norm_le {s : set E} (hs : metric.bounded s) :
30
- ∃ R > 0 , ∀ x ∈ s, ∥x∥ ≤ R :=
28
+ lemma metric.bounded.exists_pos_norm_le (hs : metric.bounded s) : ∃ R > 0 , ∀ x ∈ s, ∥x∥ ≤ R :=
31
29
begin
32
30
obtain ⟨R₀, hR₀⟩ := hs.exists_norm_le,
33
31
refine ⟨max R₀ 1 , _, _⟩,
36
34
exact (hR₀ x hx).trans (le_max_left _ _),
37
35
end
38
36
39
- lemma metric.bounded.add
40
- {s t : set E} (hs : bounded s) (ht : bounded t) :
41
- bounded (s + t) :=
37
+ lemma metric.bounded.add (hs : bounded s) (ht : bounded t) : bounded (s + t) :=
42
38
begin
43
39
obtain ⟨Rs, hRs⟩ : ∃ (R : ℝ), ∀ x ∈ s, ∥x∥ ≤ R := hs.exists_norm_le,
44
40
obtain ⟨Rt, hRt⟩ : ∃ (R : ℝ), ∀ x ∈ t, ∥x∥ ≤ R := ht.exists_norm_le,
@@ -48,46 +44,130 @@ begin
48
44
... ≤ Rs + Rt : add_le_add (hRs x hx) (hRt y hy)
49
45
end
50
46
51
- @[simp] lemma singleton_add_ball (x y : E) (r : ℝ) :
52
- {x} + ball y r = ball (x + y) r :=
47
+ lemma metric.bounded.neg : bounded s → bounded (-s) :=
48
+ by { simp_rw [bounded_iff_exists_norm_le, ←image_neg, ball_image_iff, norm_neg], exact id }
49
+
50
+ lemma metric.bounded.sub (hs : bounded s) (ht : bounded t) : bounded (s - t) :=
51
+ (sub_eq_add_neg _ _).symm.subst $ hs.add ht.neg
52
+
53
+ section emetric
54
+ open emetric
55
+
56
+ lemma inf_edist_neg (x : E) (s : set E) : inf_edist (-x) s = inf_edist x (-s) :=
57
+ eq_of_forall_le_iff $ λ r, by simp_rw [le_inf_edist, ←image_neg, ball_image_iff, edist_neg]
58
+
59
+ @[simp] lemma inf_edist_neg_neg (x : E) (s : set E) : inf_edist (-x) (-s) = inf_edist x s :=
60
+ by rw [inf_edist_neg, neg_neg]
61
+
62
+ end emetric
63
+
64
+ variables (ε δ s t x y)
65
+
66
+ @[simp] lemma neg_thickening : -thickening δ s = thickening δ (-s) :=
67
+ by { unfold thickening, simp_rw ←inf_edist_neg, refl }
68
+
69
+ @[simp] lemma neg_cthickening : -cthickening δ s = cthickening δ (-s) :=
70
+ by { unfold cthickening, simp_rw ←inf_edist_neg, refl }
71
+
72
+ @[simp] lemma neg_ball : -ball x δ = ball (-x) δ :=
73
+ by { unfold metric.ball, simp_rw ←dist_neg, refl }
74
+
75
+ @[simp] lemma neg_closed_ball : -closed_ball x δ = closed_ball (-x) δ :=
76
+ by { unfold metric.closed_ball, simp_rw ←dist_neg, refl }
77
+
78
+ lemma singleton_add_ball : {x} + ball y δ = ball (x + y) δ :=
53
79
by simp only [preimage_add_ball, image_add_left, singleton_add, sub_neg_eq_add, add_comm y x]
54
80
55
- @[simp] lemma ball_add_singleton (x y : E) (r : ℝ) :
56
- ball x r + {y} = ball (x + y) r :=
57
- by simp [add_comm _ {y}, add_comm y]
81
+ lemma singleton_sub_ball : {x} - ball y δ = ball (x - y) δ :=
82
+ by simp_rw [sub_eq_add_neg, neg_ball, singleton_add_ball]
83
+
84
+ lemma ball_add_singleton : ball x δ + {y} = ball (x + y) δ :=
85
+ by rw [add_comm, singleton_add_ball, add_comm y]
58
86
59
- lemma singleton_add_ball_zero (x : E) (r : ℝ) :
60
- {x} + ball 0 r = ball x r :=
61
- by simp
87
+ lemma ball_sub_singleton : ball x δ - {y} = ball (x - y) δ :=
88
+ by simp_rw [sub_eq_add_neg, neg_singleton, ball_add_singleton]
62
89
63
- lemma ball_zero_add_singleton (x : E) (r : ℝ) :
64
- ball 0 r + {x} = ball x r :=
65
- by simp
90
+ lemma singleton_add_ball_zero : {x} + ball 0 δ = ball x δ := by simp
91
+ lemma singleton_sub_ball_zero : {x} - ball 0 δ = ball x δ := by simp [singleton_sub_ball]
92
+ lemma ball_zero_add_singleton : ball 0 δ + {x} = ball x δ := by simp [ball_add_singleton]
93
+ lemma ball_zero_sub_singleton : ball 0 δ - {x} = ball (-x) δ := by simp [ball_sub_singleton]
94
+ lemma vadd_ball_zero : x +ᵥ ball 0 δ = ball x δ := by simp
66
95
67
- @[simp] lemma singleton_add_closed_ball (x y : E) (r : ℝ) :
68
- {x} + closed_ball y r = closed_ball (x + y) r :=
96
+ @[simp] lemma singleton_add_closed_ball : {x} + closed_ball y δ = closed_ball (x + y) δ :=
69
97
by simp only [add_comm y x, preimage_add_closed_ball, image_add_left, singleton_add, sub_neg_eq_add]
70
98
71
- @[simp] lemma closed_ball_add_singleton (x y : E) (r : ℝ) :
72
- closed_ball x r + {y} = closed_ball (x + y) r :=
99
+ @[simp] lemma singleton_sub_closed_ball : {x} - closed_ball y δ = closed_ball (x - y) δ :=
100
+ by simp_rw [sub_eq_add_neg, neg_closed_ball, singleton_add_closed_ball]
101
+
102
+ @[simp] lemma closed_ball_add_singleton : closed_ball x δ + {y} = closed_ball (x + y) δ :=
73
103
by simp [add_comm _ {y}, add_comm y]
74
104
75
- lemma singleton_add_closed_ball_zero (x : E) (r : ℝ) :
76
- {x} + closed_ball 0 r = closed_ball x r :=
77
- by simp
105
+ @[simp] lemma closed_ball_sub_singleton : closed_ball x δ - {y} = closed_ball (x - y) δ :=
106
+ by simp [sub_eq_add_neg]
78
107
79
- lemma closed_ball_zero_add_singleton (x : E) (r : ℝ) :
80
- closed_ball 0 r + {x} = closed_ball x r :=
81
- by simp
108
+ lemma singleton_add_closed_ball_zero : {x} + closed_ball 0 δ = closed_ball x δ := by simp
109
+ lemma singleton_sub_closed_ball_zero : {x} - closed_ball 0 δ = closed_ball x δ := by simp
110
+ lemma closed_ball_zero_add_singleton : closed_ball 0 δ + {x} = closed_ball x δ := by simp
111
+ lemma closed_ball_zero_sub_singleton : closed_ball 0 δ - {x} = closed_ball (-x) δ := by simp
112
+ @[simp] lemma vadd_closed_ball_zero : x +ᵥ closed_ball 0 δ = closed_ball x δ := by simp
82
113
83
- lemma is_compact.cthickening_eq_add_closed_ball
84
- {s : set E} (hs : is_compact s) {r : ℝ} (hr : 0 ≤ r) :
85
- cthickening r s = s + closed_ball 0 r :=
114
+ lemma add_ball_zero : s + ball 0 δ = thickening δ s :=
86
115
begin
87
- rw hs.cthickening_eq_bUnion_closed_ball hr,
116
+ rw thickening_eq_bUnion_ball,
117
+ convert Union₂_add (λ x (_ : x ∈ s), {x}) (ball (0 : E) δ),
118
+ exact s.bUnion_of_singleton.symm,
119
+ ext x y,
120
+ simp_rw [singleton_add_ball, add_zero],
121
+ end
122
+
123
+ lemma sub_ball_zero : s - ball 0 δ = thickening δ s := by simp [sub_eq_add_neg, add_ball_zero]
124
+ lemma ball_add_zero : ball 0 δ + s = thickening δ s := by rw [add_comm, add_ball_zero]
125
+ lemma ball_sub_zero : ball 0 δ - s = thickening δ (-s) := by simp [sub_eq_add_neg, ball_add_zero]
126
+
127
+ @[simp] lemma add_ball : s + ball x δ = x +ᵥ thickening δ s :=
128
+ by rw [←vadd_ball_zero, add_vadd_comm, add_ball_zero]
129
+
130
+ @[simp] lemma sub_ball : s - ball x δ = -x +ᵥ thickening δ s := by simp [sub_eq_add_neg]
131
+ @[simp] lemma ball_add : ball x δ + s = x +ᵥ thickening δ s := by rw [add_comm, add_ball]
132
+ @[simp] lemma ball_sub : ball x δ - s = x +ᵥ thickening δ (-s) := by simp [sub_eq_add_neg]
133
+
134
+ variables {ε δ s t x y}
135
+
136
+ lemma is_compact.add_closed_ball_zero (hs : is_compact s) (hδ : 0 ≤ δ) :
137
+ s + closed_ball 0 δ = cthickening δ s :=
138
+ begin
139
+ rw hs.cthickening_eq_bUnion_closed_ball hδ,
88
140
ext x,
89
141
simp only [mem_add, dist_eq_norm, exists_prop, mem_Union, mem_closed_ball,
90
142
exists_and_distrib_left, mem_closed_ball_zero_iff, ← eq_sub_iff_add_eq', exists_eq_right],
91
143
end
92
144
145
+ lemma is_compact.sub_closed_ball_zero (hs : is_compact s) (hδ : 0 ≤ δ) :
146
+ s - closed_ball 0 δ = cthickening δ s :=
147
+ by simp [sub_eq_add_neg, hs.add_closed_ball_zero hδ]
148
+
149
+ lemma is_compact.closed_ball_zero_add (hs : is_compact s) (hδ : 0 ≤ δ) :
150
+ closed_ball 0 δ + s = cthickening δ s :=
151
+ by rw [add_comm, hs.add_closed_ball_zero hδ]
152
+
153
+ lemma is_compact.closed_ball_zero_sub (hs : is_compact s) (hδ : 0 ≤ δ) :
154
+ closed_ball 0 δ - s = cthickening δ (-s) :=
155
+ by simp [sub_eq_add_neg, add_comm, hs.neg.add_closed_ball_zero hδ]
156
+
157
+ lemma is_compact.add_closed_ball (hs : is_compact s) (hδ : 0 ≤ δ) (x : E) :
158
+ s + closed_ball x δ = x +ᵥ cthickening δ s :=
159
+ by rw [←vadd_closed_ball_zero, add_vadd_comm, hs.add_closed_ball_zero hδ]
160
+
161
+ lemma is_compact.sub_closed_ball (hs : is_compact s) (hδ : 0 ≤ δ) (x : E) :
162
+ s - closed_ball x δ = -x +ᵥ cthickening δ s :=
163
+ by simp [sub_eq_add_neg, add_comm, hs.add_closed_ball hδ]
164
+
165
+ lemma is_compact.closed_ball_add (hs : is_compact s) (hδ : 0 ≤ δ) (x : E) :
166
+ closed_ball x δ + s = x +ᵥ cthickening δ s :=
167
+ by rw [add_comm, hs.add_closed_ball hδ]
168
+
169
+ lemma is_compact.closed_ball_sub (hs : is_compact s) (hδ : 0 ≤ δ) (x : E) :
170
+ closed_ball x δ + s = x +ᵥ cthickening δ s :=
171
+ by simp [sub_eq_add_neg, add_comm, hs.closed_ball_add hδ]
172
+
93
173
end semi_normed_group
0 commit comments