@@ -23,10 +23,11 @@ are measurable.
23
23
-/
24
24
25
25
open function metric set
26
+ open_locale pointwise
26
27
27
28
variables {α ι : Type *}
28
29
29
- section metric_space
30
+ section normed_ordered_group
30
31
variables [normed_ordered_group α] {s : set α}
31
32
32
33
@[to_additive is_upper_set.thickening]
@@ -49,12 +50,22 @@ protected lemma is_lower_set.cthickening' (hs : is_lower_set s) (ε : ℝ) :
49
50
is_lower_set (cthickening ε s) :=
50
51
by { rw cthickening_eq_Inter_thickening'', exact is_lower_set_Inter₂ (λ δ hδ, hs.thickening' _) }
51
52
52
- end metric_space
53
+ @[to_additive upper_closure_interior_subset]
54
+ lemma upper_closure_interior_subset' (s : set α) :
55
+ (upper_closure (interior s) : set α) ⊆ interior (upper_closure s) :=
56
+ upper_closure_min (interior_mono subset_upper_closure) (upper_closure s).upper.interior
57
+
58
+ @[to_additive lower_closure_interior_subset]
59
+ lemma lower_closure_interior_subset' (s : set α) :
60
+ (upper_closure (interior s) : set α) ⊆ interior (upper_closure s) :=
61
+ upper_closure_min (interior_mono subset_upper_closure) (upper_closure s).upper.interior
62
+
63
+ end normed_ordered_group
53
64
54
65
/-! ### `ℝⁿ` -/
55
66
56
67
section finite
57
- variables [finite ι] {s : set (ι → ℝ)} {x y : ι → ℝ} {δ : ℝ}
68
+ variables [finite ι] {s : set (ι → ℝ)} {x y : ι → ℝ}
58
69
59
70
lemma is_upper_set.mem_interior_of_forall_lt (hs : is_upper_set s) (hx : x ∈ closure s)
60
71
(h : ∀ i, x i < y i) :
99
110
end finite
100
111
101
112
section fintype
102
- variables [fintype ι] {s : set (ι → ℝ)} {x y : ι → ℝ} {δ : ℝ}
113
+ variables [fintype ι] {s t : set (ι → ℝ)} {a₁ a₂ b₁ b₂ x y : ι → ℝ} {δ : ℝ}
114
+
115
+ -- TODO: Generalise those lemmas so that they also apply to `ℝ` and `euclidean_space ι ℝ`
116
+ lemma dist_inf_sup (x y : ι → ℝ) : dist (x ⊓ y) (x ⊔ y) = dist x y :=
117
+ begin
118
+ refine congr_arg coe (finset.sup_congr rfl $ λ i _, _),
119
+ simp only [real.nndist_eq', sup_eq_max, inf_eq_min, max_sub_min_eq_abs, pi.inf_apply,
120
+ pi.sup_apply, real.nnabs_of_nonneg, abs_nonneg, real.to_nnreal_abs],
121
+ end
122
+
123
+ lemma dist_mono_left : monotone_on (λ x, dist x y) (Ici y) :=
124
+ begin
125
+ refine λ y₁ hy₁ y₂ hy₂ hy, nnreal.coe_le_coe.2 (finset.sup_mono_fun $ λ i _, _),
126
+ rw [real.nndist_eq, real.nnabs_of_nonneg (sub_nonneg_of_le (‹y ≤ _› i : y i ≤ y₁ i)),
127
+ real.nndist_eq, real.nnabs_of_nonneg (sub_nonneg_of_le (‹y ≤ _› i : y i ≤ y₂ i))],
128
+ exact real.to_nnreal_mono (sub_le_sub_right (hy _) _),
129
+ end
130
+
131
+ lemma dist_mono_right : monotone_on (dist x) (Ici x) :=
132
+ by simpa only [dist_comm] using dist_mono_left
133
+
134
+ lemma dist_anti_left : antitone_on (λ x, dist x y) (Iic y) :=
135
+ begin
136
+ refine λ y₁ hy₁ y₂ hy₂ hy, nnreal.coe_le_coe.2 (finset.sup_mono_fun $ λ i _, _),
137
+ rw [real.nndist_eq', real.nnabs_of_nonneg (sub_nonneg_of_le (‹_ ≤ y› i : y₂ i ≤ y i)),
138
+ real.nndist_eq', real.nnabs_of_nonneg (sub_nonneg_of_le (‹_ ≤ y› i : y₁ i ≤ y i))],
139
+ exact real.to_nnreal_mono (sub_le_sub_left (hy _) _),
140
+ end
141
+
142
+ lemma dist_anti_right : antitone_on (dist x) (Iic x) :=
143
+ by simpa only [dist_comm] using dist_anti_left
144
+
145
+ lemma dist_le_dist_of_le (ha : a₂ ≤ a₁) (h₁ : a₁ ≤ b₁) (hb : b₁ ≤ b₂) : dist a₁ b₁ ≤ dist a₂ b₂ :=
146
+ (dist_mono_right h₁ (h₁.trans hb) hb).trans $
147
+ dist_anti_left (ha.trans $ h₁.trans hb) (h₁.trans hb) ha
148
+
149
+ protected lemma metric.bounded.bdd_below : bounded s → bdd_below s :=
150
+ begin
151
+ rintro ⟨r, hr⟩,
152
+ obtain rfl | ⟨x, hx⟩ := s.eq_empty_or_nonempty,
153
+ { exact bdd_below_empty },
154
+ { exact ⟨x - const _ r, λ y hy i, sub_le_comm.1
155
+ (abs_sub_le_iff.1 $ (dist_le_pi_dist _ _ _).trans $ hr _ hx _ hy).1 ⟩ }
156
+ end
157
+
158
+ protected lemma metric.bounded.bdd_above : bounded s → bdd_above s :=
159
+ begin
160
+ rintro ⟨r, hr⟩,
161
+ obtain rfl | ⟨x, hx⟩ := s.eq_empty_or_nonempty,
162
+ { exact bdd_above_empty },
163
+ { exact ⟨x + const _ r, λ y hy i, sub_le_iff_le_add'.1 $
164
+ (abs_sub_le_iff.1 $ (dist_le_pi_dist _ _ _).trans $ hr _ hx _ hy).2 ⟩ }
165
+ end
166
+
167
+ protected lemma bdd_below.bounded : bdd_below s → bdd_above s → bounded s :=
168
+ begin
169
+ rintro ⟨a, ha⟩ ⟨b, hb⟩,
170
+ refine ⟨dist a b, λ x hx y hy, _⟩,
171
+ rw ←dist_inf_sup,
172
+ exact dist_le_dist_of_le (le_inf (ha hx) $ ha hy) inf_le_sup (sup_le (hb hx) $ hb hy),
173
+ end
174
+
175
+ protected lemma bdd_above.bounded : bdd_above s → bdd_below s → bounded s := flip bdd_below.bounded
176
+
177
+ lemma bounded_iff_bdd_below_bdd_above : bounded s ↔ bdd_below s ∧ bdd_above s :=
178
+ ⟨λ h, ⟨h.bdd_below, h.bdd_above⟩, λ h, h.1 .bounded h.2 ⟩
179
+
180
+ lemma bdd_below.bounded_inter (hs : bdd_below s) (ht : bdd_above t) : bounded (s ∩ t) :=
181
+ (hs.mono $ inter_subset_left _ _).bounded $ ht.mono $ inter_subset_right _ _
182
+
183
+ lemma bdd_above.bounded_inter (hs : bdd_above s) (ht : bdd_below t) : bounded (s ∩ t) :=
184
+ (hs.mono $ inter_subset_left _ _).bounded $ ht.mono $ inter_subset_right _ _
103
185
104
186
lemma is_upper_set.exists_subset_ball (hs : is_upper_set s) (hx : x ∈ closure s) (hδ : 0 < δ) :
105
187
∃ y, closed_ball y (δ/4 ) ⊆ closed_ball x δ ∧ closed_ball y (δ/4 ) ⊆ interior s :=
@@ -140,3 +222,74 @@ begin
140
222
end
141
223
142
224
end fintype
225
+
226
+ section finite
227
+ variables [finite ι] {s t : set (ι → ℝ)} {a₁ a₂ b₁ b₂ x y : ι → ℝ} {δ : ℝ}
228
+
229
+ lemma is_antichain.interior_eq_empty [nonempty ι] (hs : is_antichain (≤) s) : interior s = ∅ :=
230
+ begin
231
+ casesI nonempty_fintype ι,
232
+ refine eq_empty_of_forall_not_mem (λ x hx, _),
233
+ have hx' := interior_subset hx,
234
+ rw [mem_interior_iff_mem_nhds, metric.mem_nhds_iff] at hx,
235
+ obtain ⟨ε, hε, hx⟩ := hx,
236
+ refine hs.not_lt hx' (hx _) (lt_add_of_pos_right _ (by positivity : 0 < const ι (ε / 2 ))),
237
+ simpa [const, @pi_norm_const ι ℝ _ _ _ (ε / 2 ), abs_of_nonneg hε.lt.le],
238
+ end
239
+
240
+ /-!
241
+ #### Note
242
+
243
+ The closure and frontier of an antichain might not be antichains. Take for example the union
244
+ of the open segments from `(0, 2)` to `(1, 1)` and from `(2, 1)` to `(3, 0)`. `(1, 1)` and `(2, 1)`
245
+ are comparable and both in the closure/frontier.
246
+ -/
247
+
248
+ protected lemma is_closed.upper_closure (hs : is_closed s) (hs' : bdd_below s) :
249
+ is_closed (upper_closure s : set (ι → ℝ)) :=
250
+ begin
251
+ casesI nonempty_fintype ι,
252
+ refine is_seq_closed.is_closed (λ f x hf hx, _),
253
+ choose g hg hgf using hf,
254
+ obtain ⟨a, ha⟩ := hx.bdd_above_range,
255
+ obtain ⟨b, hb, φ, hφ, hbf⟩ := tendsto_subseq_of_bounded (hs'.bounded_inter
256
+ bdd_above_Iic) (λ n, ⟨hg n, (hgf _).trans $ ha $ mem_range_self _⟩),
257
+ exact ⟨b, closure_minimal (inter_subset_left _ _) hs hb,
258
+ le_of_tendsto_of_tendsto' hbf (hx.comp hφ.tendsto_at_top) $ λ _, hgf _⟩,
259
+ end
260
+
261
+ protected lemma is_closed.lower_closure (hs : is_closed s) (hs' : bdd_above s) :
262
+ is_closed (lower_closure s : set (ι → ℝ)) :=
263
+ begin
264
+ casesI nonempty_fintype ι,
265
+ refine is_seq_closed.is_closed (λ f x hf hx, _),
266
+ choose g hg hfg using hf,
267
+ haveI : bounded_ge_nhds_class ℝ := by apply_instance,
268
+ obtain ⟨a, ha⟩ := hx.bdd_below_range,
269
+ obtain ⟨b, hb, φ, hφ, hbf⟩ := tendsto_subseq_of_bounded (hs'.bounded_inter
270
+ bdd_below_Ici) (λ n, ⟨hg n, (ha $ mem_range_self _).trans $ hfg _⟩),
271
+ exact ⟨b, closure_minimal (inter_subset_left _ _) hs hb,
272
+ le_of_tendsto_of_tendsto' (hx.comp hφ.tendsto_at_top) hbf $ λ _, hfg _⟩,
273
+ end
274
+
275
+ protected lemma is_clopen.upper_closure (hs : is_clopen s) (hs' : bdd_below s) :
276
+ is_clopen (upper_closure s : set (ι → ℝ)) :=
277
+ ⟨hs.1 .upper_closure, hs.2 .upper_closure hs'⟩
278
+
279
+ protected lemma is_clopen.lower_closure (hs : is_clopen s) (hs' : bdd_above s) :
280
+ is_clopen (lower_closure s : set (ι → ℝ)) :=
281
+ ⟨hs.1 .lower_closure, hs.2 .lower_closure hs'⟩
282
+
283
+ lemma closure_upper_closure_comm (hs : bdd_below s) :
284
+ closure (upper_closure s : set (ι → ℝ)) = upper_closure (closure s) :=
285
+ (closure_minimal (upper_closure_anti subset_closure) $
286
+ is_closed_closure.upper_closure hs.closure).antisymm $
287
+ upper_closure_min (closure_mono subset_upper_closure) (upper_closure s).upper.closure
288
+
289
+ lemma closure_lower_closure_comm (hs : bdd_above s) :
290
+ closure (lower_closure s : set (ι → ℝ)) = lower_closure (closure s) :=
291
+ (closure_minimal (lower_closure_mono subset_closure) $
292
+ is_closed_closure.lower_closure hs.closure).antisymm $
293
+ lower_closure_min (closure_mono subset_lower_closure) (lower_closure s).lower.closure
294
+
295
+ end finite
0 commit comments