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

Commit 5f62d3b

Browse files
feat(topology/bounded_continuous_functions): more general uniform convergence (#2165)
* feat(topology/buonded_continuous_functions): more general uniform convergence * yury's comments Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent 739e831 commit 5f62d3b

File tree

4 files changed

+114
-15
lines changed

4 files changed

+114
-15
lines changed

src/topology/bounded_continuous_function.lean

Lines changed: 63 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,33 +18,83 @@ open set lattice filter metric
1818
universes u v w
1919
variables {α : Type u} {β : Type v} {γ : Type w}
2020

21-
/-- A locally uniform limit of continuous functions is continuous -/
22-
lemma continuous_of_locally_uniform_limit_of_continuous [topological_space α] [metric_space β]
23-
{F : ℕ → α → β} {f : α → β}
24-
(L : ∀x:α, ∃s ∈ 𝓝 x, ∀ε>(0:ℝ), ∃n, ∀y∈s, dist (F n y) (f y) ≤ ε)
25-
(C : ∀ n, continuous (F n)) : continuous f :=
26-
continuous_iff'.2 $ λ x ε ε0, begin
27-
rcases L x with ⟨r, rx, hr⟩,
28-
rcases hr (ε/2/2) (half_pos $ half_pos ε0) with ⟨n, hn⟩,
29-
filter_upwards [rx, continuous_iff'.1 (C n) x (ε/2) (half_pos ε0)],
21+
section uniform_limit
22+
/-!
23+
### Continuity of uniform limits
24+
25+
In this section, we discuss variations around the continuity of a uniform limit of continuous
26+
functions when the target space is a metric space. Specifically, we provide statements giving the
27+
continuity within a set at a point, the continuity at a point, the continuity on a set, and the
28+
continuity, assuming either locally uniform convergence or globally uniform convergence when this
29+
makes sense.
30+
-/
31+
32+
variables {ι : Type*} [topological_space α] [metric_space β]
33+
{F : ι → α → β} {f : α → β} {s : set α} {x : α}
34+
35+
/-- A locally uniform limit of continuous functions within a set at a point is continuous
36+
within this set at this point -/
37+
lemma continuous_within_at_of_locally_uniform_limit_of_continuous_within_at
38+
(hx : x ∈ s) (L : ∃t ∈ nhds_within x s, ∀ε>(0:ℝ), ∃n, ∀y∈t, dist (F n y) (f y) ≤ ε)
39+
(C : ∀ n, continuous_within_at (F n) s x) : continuous_within_at f s x :=
40+
begin
41+
apply metric.continuous_within_at_iff'.2 (λ ε εpos, _),
42+
rcases L with ⟨r, rx, hr⟩,
43+
rcases hr (ε/2/2) (half_pos $ half_pos εpos) with ⟨n, hn⟩,
44+
filter_upwards [rx, metric.continuous_within_at_iff'.1 (C n) (ε/2) (half_pos εpos)],
3045
simp only [mem_set_of_eq],
3146
rintro y yr ys,
3247
calc dist (f y) (f x)
3348
≤ dist (F n y) (F n x) + (dist (F n y) (f y) + dist (F n x) (f x)) : dist_triangle4_left _ _ _ _
3449
... < ε/2 + (ε/2/2 + ε/2/2) :
35-
add_lt_add_of_lt_of_le ys (add_le_add (hn _ yr) (hn _ (mem_of_nhds rx)))
50+
add_lt_add_of_lt_of_le ys (add_le_add (hn _ yr) (hn _ (mem_of_mem_nhds_within hx rx)))
3651
... = ε : by rw [add_halves, add_halves]
3752
end
3853

54+
/-- A locally uniform limit of continuous functions at a point is continuous at this point -/
55+
lemma continuous_at_of_locally_uniform_limit_of_continuous_at
56+
(L : ∃t ∈ 𝓝 x, ∀ε>(0:ℝ), ∃n, ∀y∈t, dist (F n y) (f y) ≤ ε) (C : ∀ n, continuous_at (F n) x) :
57+
continuous_at f x :=
58+
begin
59+
simp only [← continuous_within_at_univ] at C ⊢,
60+
apply continuous_within_at_of_locally_uniform_limit_of_continuous_within_at (mem_univ _) _ C,
61+
simpa [nhds_within_univ] using L
62+
end
63+
64+
/-- A locally uniform limit of continuous functions on a set is continuous on this set -/
65+
lemma continuous_on_of_locally_uniform_limit_of_continuous_on
66+
(L : ∀ (x ∈ s), ∃t ∈ nhds_within x s, ∀ε>(0:ℝ), ∃n, ∀y∈t, dist (F n y) (f y) ≤ ε)
67+
(C : ∀ n, continuous_on (F n) s) : continuous_on f s :=
68+
λ x hx, continuous_within_at_of_locally_uniform_limit_of_continuous_within_at hx
69+
(L x hx) (λ n, C n x hx)
70+
71+
/-- A uniform limit of continuous functions on a set is continuous on this set -/
72+
lemma continuous_on_of_uniform_limit_of_continuous_on
73+
(L : ∀ε>(0:ℝ), ∃N, ∀y ∈ s, dist (F N y) (f y) ≤ ε) :
74+
(∀ n, continuous_on (F n) s) → continuous_on f s :=
75+
continuous_on_of_locally_uniform_limit_of_continuous_on (λ x hx, ⟨s, self_mem_nhds_within, L⟩)
76+
77+
/-- A locally uniform limit of continuous functions is continuous -/
78+
lemma continuous_of_locally_uniform_limit_of_continuous
79+
(L : ∀x:α, ∃s ∈ 𝓝 x, ∀ε>(0:ℝ), ∃n, ∀y∈s, dist (F n y) (f y) ≤ ε)
80+
(C : ∀ n, continuous (F n)) : continuous f :=
81+
begin
82+
simp only [continuous_iff_continuous_on_univ] at ⊢ C,
83+
apply continuous_on_of_locally_uniform_limit_of_continuous_on _ C,
84+
simpa [nhds_within_univ] using L
85+
end
86+
3987
/-- A uniform limit of continuous functions is continuous -/
40-
lemma continuous_of_uniform_limit_of_continuous [topological_space α] {β : Type v} [metric_space β]
41-
{F : ℕ → α → β} {f : α → β} (L : ∀ε>(0:ℝ), ∃N, ∀y, dist (F N y) (f y) ≤ ε) :
88+
lemma continuous_of_uniform_limit_of_continuous (L : ∀ε>(0:ℝ), ∃N, ∀y, dist (F N y) (f y) ≤ ε) :
4289
(∀ n, continuous (F n)) → continuous f :=
4390
continuous_of_locally_uniform_limit_of_continuous $ λx,
4491
⟨univ, by simpa [filter.univ_mem_sets] using L⟩
4592

93+
end uniform_limit
94+
4695
/-- The type of bounded continuous functions from a topological space to a metric space -/
47-
def bounded_continuous_function (α : Type u) (β : Type v) [topological_space α] [metric_space β] : Type (max u v) :=
96+
def bounded_continuous_function (α : Type u) (β : Type v) [topological_space α] [metric_space β] :
97+
Type (max u v) :=
4898
{f : α → β // continuous f ∧ ∃C, ∀x y:α, dist (f x) (f y) ≤ C}
4999

50100
local infixr ` →ᵇ `:25 := bounded_continuous_function

src/topology/continuous_on.lean

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,10 @@ lemma continuous_within_at.tendsto {f : α → β} {s : set α} {x : α} (h : co
219219
when it's continuous at every point of `s` within `s`. -/
220220
def continuous_on (f : α → β) (s : set α) : Prop := ∀ x ∈ s, continuous_within_at f s x
221221

222+
lemma continuous_on.continuous_within_at {f : α → β} {s : set α} {x : α} (hf : continuous_on f s)
223+
(hx : x ∈ s) : continuous_within_at f s x :=
224+
hf x hx
225+
222226
theorem continuous_within_at_univ (f : α → β) (x : α) :
223227
continuous_within_at f set.univ x ↔ continuous_at f x :=
224228
by rw [continuous_at, continuous_within_at, nhds_within_univ]
@@ -260,7 +264,7 @@ have ∀ t, is_open (function.restrict f s ⁻¹' t) ↔ ∃ (u : set α), is_op
260264
end,
261265
by rw [continuous_on_iff_continuous_restrict, continuous]; simp only [this]
262266

263-
theorem continuous_on_iff_is_closed {f : α → β} {s : set α} :
267+
theorem continuous_on_iff_is_closed {f : α → β} {s : set α} :
264268
continuous_on f s ↔ ∀ t : set β, is_closed t → ∃ u, is_closed u ∧ f ⁻¹' t ∩ s = u ∩ s :=
265269
have ∀ t, is_closed (function.restrict f s ⁻¹' t) ↔ ∃ (u : set α), is_closed u ∧ f ⁻¹' t ∩ s = u ∩ s,
266270
begin
@@ -270,6 +274,9 @@ have ∀ t, is_closed (function.restrict f s ⁻¹' t) ↔ ∃ (u : set α), is_
270274
end,
271275
by rw [continuous_on_iff_continuous_restrict, continuous_iff_is_closed]; simp only [this]
272276

277+
lemma continuous_on_empty (f : α → β) : continuous_on f ∅ :=
278+
λ x, false.elim
279+
273280
theorem nhds_within_le_comap {x : α} {s : set α} {f : α → β} (ctsf : continuous_within_at f s x) :
274281
nhds_within x s ≤ comap f (nhds_within (f x) (f '' s)) :=
275282
map_le_iff_le_comap.1 ctsf.tendsto_nhds_within_image
@@ -374,6 +381,10 @@ begin
374381
rwa [this, continuous_within_at_inter hs, continuous_within_at_univ] at h
375382
end
376383

384+
lemma continuous_on.continuous_at {f : α → β} {s : set α} {x : α}
385+
(h : continuous_on f s) (hx : s ∈ 𝓝 x) : continuous_at f x :=
386+
(h x (mem_of_nhds hx)).continuous_at hx
387+
377388
lemma continuous_within_at.comp {g : β → γ} {f : α → β} {s : set α} {t : set β} {x : α}
378389
(hg : continuous_within_at g t (f x)) (hf : continuous_within_at f s x) (h : s ⊆ f ⁻¹' t) :
379390
continuous_within_at (g ∘ f) s x :=

src/topology/metric_space/basic.lean

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,9 @@ theorem ball_eq_empty_iff_nonpos : ε ≤ 0 ↔ ball x ε = ∅ :=
298298
⟨λ h, le_of_not_gt $ λ ε0, h _ $ mem_ball_self ε0,
299299
λ ε0 y h, not_lt_of_le ε0 $ pos_of_mem_ball h⟩).symm
300300

301+
@[simp] lemma ball_zero : ball x 0 = ∅ :=
302+
by rw [← metric.ball_eq_empty_iff_nonpos]
303+
301304
theorem uniformity_basis_dist :
302305
(𝓤 α).has_basis (λ ε : ℝ, 0 < ε) (λ ε, {p:α×α | dist p.1 p.2 < ε}) :=
303306
(metric_space.uniformity_dist α).symm ▸ has_basis_binfi_principal
@@ -496,15 +499,47 @@ theorem continuous_at_iff [metric_space β] {f : α → β} {a : α} :
496499
∀ ε > 0, ∃ δ > 0, ∀{x:α}, dist x a < δ → dist (f x) (f a) < ε :=
497500
by rw [continuous_at, tendsto_nhds_nhds]
498501

502+
@[nolint ge_or_gt] -- see Note [nolint_ge]
503+
theorem continuous_within_at_iff [metric_space β] {f : α → β} {a : α} {s : set α} :
504+
continuous_within_at f s a ↔
505+
∀ ε > 0, ∃ δ > 0, ∀{x:α}, x ∈ s → dist x a < δ → dist (f x) (f a) < ε :=
506+
by rw [continuous_within_at, tendsto_nhds_within_nhds]
507+
508+
@[nolint ge_or_gt] -- see Note [nolint_ge]
509+
theorem continuous_on_iff [metric_space β] {f : α → β} {s : set α} :
510+
continuous_on f s ↔
511+
∀ (b ∈ s) (ε > 0), ∃ δ > 0, ∀a ∈ s, dist a b < δ → dist (f a) (f b) < ε :=
512+
by simp [continuous_on, continuous_within_at_iff]
513+
514+
@[nolint ge_or_gt] -- see Note [nolint_ge]
499515
theorem continuous_iff [metric_space β] {f : α → β} :
500516
continuous f ↔
501-
∀b (ε > 0), ∃ δ > 0, ∀a, dist a b < δ → dist (f a) (f b) < ε :=
517+
∀b (ε > 0), ∃ δ > 0, ∀a, dist a b < δ → dist (f a) (f b) < ε :=
502518
continuous_iff_continuous_at.trans $ forall_congr $ λ b, tendsto_nhds_nhds
503519

504520
theorem tendsto_nhds {f : filter β} {u : β → α} {a : α} :
505521
tendsto u f (𝓝 a) ↔ ∀ ε > 0, ∀ᶠ x in f, dist (u x) a < ε :=
506522
nhds_basis_ball.tendsto_right_iff
507523

524+
@[nolint ge_or_gt] -- see Note [nolint_ge]
525+
theorem continuous_at_iff' [topological_space β] {f : β → α} {b : β} :
526+
continuous_at f b ↔
527+
∀ ε > 0, ∀ᶠ x in 𝓝 b, dist (f x) (f b) < ε :=
528+
by rw [continuous_at, tendsto_nhds]
529+
530+
@[nolint ge_or_gt] -- see Note [nolint_ge]
531+
theorem continuous_within_at_iff' [topological_space β] {f : β → α} {b : β} {s : set β} :
532+
continuous_within_at f s b ↔
533+
∀ ε > 0, ∀ᶠ x in nhds_within b s, dist (f x) (f b) < ε :=
534+
by rw [continuous_within_at, tendsto_nhds]
535+
536+
@[nolint ge_or_gt] -- see Note [nolint_ge]
537+
theorem continuous_on_iff' [topological_space β] {f : β → α} {s : set β} :
538+
continuous_on f s ↔
539+
∀ (b ∈ s) (ε > 0), ∀ᶠ x in nhds_within b s, dist (f x) (f b) < ε :=
540+
by simp [continuous_on, continuous_within_at_iff']
541+
542+
@[nolint ge_or_gt] -- see Note [nolint_ge]
508543
theorem continuous_iff' [topological_space β] {f : β → α} :
509544
continuous f ↔ ∀a (ε > 0), ∀ᶠ x in 𝓝 a, dist (f x) (f a) < ε :=
510545
continuous_iff_continuous_at.trans $ forall_congr $ λ b, tendsto_nhds

src/topology/metric_space/emetric_space.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,9 @@ eq_empty_iff_forall_not_mem.trans
518518
⟨λh, le_bot_iff.1 (le_of_not_gt (λ ε0, h _ (mem_ball_self ε0))),
519519
λε0 y h, not_lt_of_le (le_of_eq ε0) (pos_of_mem_ball h)⟩
520520

521+
@[simp] lemma ball_zero : ball x 0 = ∅ :=
522+
by rw [emetric.ball_eq_empty_iff]
523+
521524
theorem nhds_basis_eball : (𝓝 x).has_basis (λ ε:ennreal, 0 < ε) (ball x) :=
522525
nhds_basis_uniformity uniformity_basis_edist
523526

0 commit comments

Comments
 (0)