Skip to content

Commit 2bf9d21

Browse files
CBirkbeckloefflerd
andcommitted
feat: TendstoUniformlyOn for tprod's (#13349)
Give conditions for prods to converge uniformly to a tprod. Co-authored-by: David Loeffler <d.loeffler.01@cantab.net>
1 parent 89b1cc4 commit 2bf9d21

File tree

8 files changed

+257
-30
lines changed

8 files changed

+257
-30
lines changed

Mathlib.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1723,6 +1723,7 @@ import Mathlib.Analysis.NormedSpace.Int
17231723
import Mathlib.Analysis.NormedSpace.MStructure
17241724
import Mathlib.Analysis.NormedSpace.Multilinear.Basic
17251725
import Mathlib.Analysis.NormedSpace.Multilinear.Curry
1726+
import Mathlib.Analysis.NormedSpace.MultipliableUniformlyOn
17261727
import Mathlib.Analysis.NormedSpace.OperatorNorm.Asymptotics
17271728
import Mathlib.Analysis.NormedSpace.OperatorNorm.Basic
17281729
import Mathlib.Analysis.NormedSpace.OperatorNorm.Bilinear
@@ -5916,6 +5917,7 @@ import Mathlib.Topology.Algebra.IntermediateField
59165917
import Mathlib.Topology.Algebra.IsOpenUnits
59175918
import Mathlib.Topology.Algebra.IsUniformGroup.Basic
59185919
import Mathlib.Topology.Algebra.IsUniformGroup.Defs
5920+
import Mathlib.Topology.Algebra.IsUniformGroup.Order
59195921
import Mathlib.Topology.Algebra.LinearTopology
59205922
import Mathlib.Topology.Algebra.Localization
59215923
import Mathlib.Topology.Algebra.Module.Alternating.Basic

Mathlib/Analysis/NormedSpace/FunctionSeries.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ We show that series of functions are continuous when each individual function in
1313
additionally suitable uniform summable bounds are satisfied, in `continuous_tsum`.
1414
1515
For smoothness of series of functions, see the file `Analysis.Calculus.SmoothSeries`.
16+
17+
TODO: update this to use `SummableUniformlyOn`.
18+
1619
-/
1720

1821
open Set Metric TopologicalSpace Function Filter
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
/-
2+
Copyright (c) 2025 Chris Birkbeck. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Chris Birkbeck
5+
-/
6+
import Mathlib.Analysis.NormedSpace.FunctionSeries
7+
import Mathlib.Analysis.SpecialFunctions.Log.Summable
8+
import Mathlib.Topology.Algebra.InfiniteSum.UniformOn
9+
import Mathlib.Topology.Algebra.IsUniformGroup.Order
10+
11+
/-!
12+
# Uniform convergence of products of functions
13+
14+
We gather some results about the uniform convergence of infinite products, in particular those of
15+
the form `∏' i, (1 + f i x)` for a sequence `f` of complex valued functions.
16+
-/
17+
18+
open Filter Function Complex Finset Topology
19+
20+
variable {α ι : Type*} {𝔖 : Set (Set α)} {K : Set α} {u : ι → ℝ}
21+
22+
section Complex
23+
24+
variable {f : ι → α → ℂ}
25+
26+
lemma TendstoUniformlyOn.comp_cexp {p : Filter ι} {g : α → ℂ}
27+
(hf : TendstoUniformlyOn f g p K) (hg : BddAbove <| (fun x ↦ (g x).re) '' K) :
28+
TendstoUniformlyOn (cexp ∘ f ·) (cexp ∘ g) p K := by
29+
obtain ⟨v, hv⟩ : ∃ v, ∀ x ∈ K, (g x).re ≤ v := hg.imp <| by simp [mem_upperBounds]
30+
have : ∀ᶠ i in p, ∀ x ∈ K, (f i x).re ≤ v + 1 := hf.re.eventually_forall_le (lt_add_one v) hv
31+
refine (UniformContinuousOn.cexp _).comp_tendstoUniformlyOn_eventually (by simpa) ?_ hf
32+
exact fun x hx ↦ (hv x hx).trans (lt_add_one v).le
33+
34+
lemma Summable.hasSumUniformlyOn_log_one_add (hu : Summable u)
35+
(h : ∀ᶠ i in cofinite, ∀ x ∈ K, ‖f i x‖ ≤ u i) :
36+
HasSumUniformlyOn (fun i x ↦ log (1 + f i x)) (fun x ↦ ∑' i, log (1 + f i x)) {K} := by
37+
simp only [hasSumUniformlyOn_iff_tendstoUniformlyOn, Set.mem_singleton_iff, forall_eq]
38+
apply tendstoUniformlyOn_tsum_of_cofinite_eventually <| hu.mul_left (3 / 2)
39+
filter_upwards [h, hu.tendsto_cofinite_zero.eventually_le_const one_half_pos] with i hi hi' x hx
40+
using (norm_log_one_add_half_le_self <| (hi x hx).trans hi').trans (by simpa using hi x hx)
41+
42+
lemma Summable.tendstoUniformlyOn_tsum_nat_log_one_add {f : ℕ → α → ℂ} {u : ℕ → ℝ}
43+
(hu : Summable u) (h : ∀ᶠ n in atTop, ∀ x ∈ K, ‖f n x‖ ≤ u n) :
44+
TendstoUniformlyOn (fun n x ↦ ∑ m ∈ Finset.range n, log (1 + f m x))
45+
(fun x ↦ ∑' n, log (1 + f n x)) atTop K := by
46+
rw [← Nat.cofinite_eq_atTop] at h
47+
exact (hu.hasSumUniformlyOn_log_one_add h).tendstoUniformlyOn_finset_range rfl
48+
49+
/-- If `x ↦ ∑' i, log (f i x)` is uniformly convergent on `𝔖`, its sum has bounded-above real part
50+
on each set in `𝔖`, and the functions `f i x` have no zeroes, then `∏' i, f i x` is uniformly
51+
convergent on `𝔖`.
52+
53+
Note that the non-vanishing assumption is really needed here: if this assumption is dropped then
54+
one obtains a counterexample if `ι = α = ℕ` and `f i x` is `0` if `i = x` and `1` otherwise. -/
55+
lemma hasProdUniformlyOn_of_clog (hf : SummableUniformlyOn (fun i x ↦ log (f i x)) 𝔖)
56+
(hfn : ∀ K ∈ 𝔖, ∀ x ∈ K, ∀ i, f i x ≠ 0)
57+
(hg : ∀ K ∈ 𝔖, BddAbove <| (fun x ↦ (∑' i, log (f i x)).re) '' K) :
58+
HasProdUniformlyOn f (fun x ↦ ∏' i, f i x) 𝔖 := by
59+
simp only [hasProdUniformlyOn_iff_tendstoUniformlyOn]
60+
obtain ⟨r, hr⟩ := hf.exists
61+
intro K hK
62+
suffices H : TendstoUniformlyOn (fun s x ↦ ∏ i ∈ s, f i x) (cexp ∘ r) atTop K by
63+
refine H.congr_right ((hr.tsum_eqOn hK).comp_left.symm.trans ?_)
64+
exact fun x hx ↦ (cexp_tsum_eq_tprod (hfn K hK x hx) (hf.summable hK hx))
65+
have h1 := hr.tsum_eqOn hK
66+
simp only [hasSumUniformlyOn_iff_tendstoUniformlyOn] at hr
67+
refine ((hr K hK).comp_cexp ?_).congr ?_
68+
· simp +contextual [← h1 _]
69+
exact hg K hK
70+
· filter_upwards with s i hi using by simp [exp_sum, fun y ↦ exp_log (hfn K hK i hi y)]
71+
72+
lemma multipliableUniformlyOn_of_clog (hf : SummableUniformlyOn (fun i x ↦ log (f i x)) 𝔖)
73+
(hfn : ∀ K ∈ 𝔖, ∀ x ∈ K, ∀ i, f i x ≠ 0)
74+
(hg : ∀ K ∈ 𝔖, BddAbove <| (fun x ↦ (∑' i, log (f i x)).re) '' K) :
75+
MultipliableUniformlyOn f 𝔖 :=
76+
⟨_, hasProdUniformlyOn_of_clog hf hfn hg⟩
77+
78+
end Complex
79+
80+
namespace Summable
81+
82+
variable {R : Type*} [NormedCommRing R] [NormOneClass R] [CompleteSpace R] [TopologicalSpace α]
83+
{f : ι → α → R}
84+
85+
/-- If a sequence of continuous functions `f i x` on an open compact `K` have norms eventually
86+
bounded by a summable function, then `∏' i, (1 + f i x)` is uniformly convergent on `K`. -/
87+
lemma hasProdUniformlyOn_one_add (hK : IsCompact K) (hu : Summable u)
88+
(h : ∀ᶠ i in cofinite, ∀ x ∈ K, ‖f i x‖ ≤ u i) (hcts : ∀ i, ContinuousOn (f i) K) :
89+
HasProdUniformlyOn (fun i x ↦ 1 + f i x) (fun x ↦ ∏' i, (1 + f i x)) {K} := by
90+
simp only [hasProdUniformlyOn_iff_tendstoUniformlyOn, Set.mem_singleton_iff,
91+
tendstoUniformlyOn_iff_tendstoUniformly_comp_coe, forall_eq]
92+
by_cases hKe : K = ∅
93+
· simp [TendstoUniformly, hKe]
94+
· haveI hCK : CompactSpace K := isCompact_iff_compactSpace.mp hK
95+
haveI hne : Nonempty K := by rwa [Set.nonempty_coe_sort, Set.nonempty_iff_ne_empty]
96+
let f' i : C(K, R) := ⟨_, continuousOn_iff_continuous_restrict.mp (hcts i)⟩
97+
have hf'_bd : ∀ᶠ i in cofinite, ‖f' i‖ ≤ u i := by
98+
simp only [ContinuousMap.norm_le_of_nonempty]
99+
filter_upwards [h] with i hi using fun x ↦ hi x x.2
100+
have hM : Multipliable fun i ↦ 1 + f' i := by
101+
refine multipliable_one_add_of_summable (hu.of_norm_bounded_eventually _ ?_)
102+
simpa using hf'_bd
103+
convert ContinuousMap.tendsto_iff_tendstoUniformly.mp hM.hasProd
104+
· simp [f']
105+
· exact funext fun k ↦ ContinuousMap.tprod_apply hM k
106+
107+
lemma multipliableUniformlyOn_one_add (hK : IsCompact K) (hu : Summable u)
108+
(h : ∀ᶠ i in cofinite, ∀ x ∈ K, ‖f i x‖ ≤ u i) (hcts : ∀ i, ContinuousOn (f i) K) :
109+
MultipliableUniformlyOn (fun i x ↦ 1 + f i x) {K} :=
110+
⟨_, hasProdUniformlyOn_one_add hK hu h hcts⟩
111+
112+
/-- This is a version of `hasProdUniformlyOn_one_add` for sequences indexed by `ℕ`. -/
113+
lemma hasProdUniformlyOn_nat_one_add {f : ℕ → α → R} (hK : IsCompact K) {u : ℕ → ℝ}
114+
(hu : Summable u) (h : ∀ᶠ n in atTop, ∀ x ∈ K, ‖f n x‖ ≤ u n)
115+
(hcts : ∀ n, ContinuousOn (f n) K) :
116+
HasProdUniformlyOn (fun n x ↦ 1 + f n x) (fun x ↦ ∏' i, (1 + f i x)) {K} :=
117+
hasProdUniformlyOn_one_add hK hu (Nat.cofinite_eq_atTop ▸ h) hcts
118+
119+
lemma multipliableUniformlyOn_nat_one_add {f : ℕ → α → R} (hK : IsCompact K)
120+
{u : ℕ → ℝ} (hu : Summable u) (h : ∀ᶠ n in atTop, ∀ x ∈ K, ‖f n x‖ ≤ u n)
121+
(hcts : ∀ n, ContinuousOn (f n) K) :
122+
MultipliableUniformlyOn (fun n x ↦ 1 + f n x) {K} :=
123+
⟨_, hasProdUniformlyOn_nat_one_add hK hu h hcts⟩
124+
125+
section LocallyCompactSpace
126+
127+
variable [LocallyCompactSpace α]
128+
129+
/-- If a sequence of continuous functions `f i x` on an open subset `K` have norms eventually
130+
bounded by a summable function, then `∏' i, (1 + f i x)` is locally uniformly convergent on `K`. -/
131+
lemma hasProdLocallyUniformlyOn_one_add (hK : IsOpen K) (hu : Summable u)
132+
(h : ∀ᶠ i in cofinite, ∀ x ∈ K, ‖f i x‖ ≤ u i) (hcts : ∀ i, ContinuousOn (f i) K) :
133+
HasProdLocallyUniformlyOn (fun i x ↦ 1 + f i x) (fun x ↦ ∏' i, (1 + f i x)) K := by
134+
apply hasProdLocallyUniformlyOn_of_forall_compact hK
135+
refine fun S hS hC ↦ hasProdUniformlyOn_one_add hC hu ?_ fun i ↦ (hcts i).mono hS
136+
filter_upwards [h] with i hi a ha using hi a (hS ha)
137+
138+
lemma multipliableLocallyUniformlyOn_one_add (hK : IsOpen K) (hu : Summable u)
139+
(h : ∀ᶠ i in cofinite, ∀ x ∈ K, ‖f i x‖ ≤ u i) (hcts : ∀ i, ContinuousOn (f i) K) :
140+
MultipliableLocallyUniformlyOn (fun i x ↦ 1 + f i x) K :=
141+
⟨_, hasProdLocallyUniformlyOn_one_add hK hu h hcts⟩
142+
143+
/-- This is a version of `hasProdLocallyUniformlyOn_one_add` for sequences indexed by `ℕ`. -/
144+
lemma hasProdLocallyUniformlyOn_nat_one_add {f : ℕ → α → R} (hK : IsOpen K) {u : ℕ → ℝ}
145+
(hu : Summable u) (h : ∀ᶠ n in atTop, ∀ x ∈ K, ‖f n x‖ ≤ u n)
146+
(hcts : ∀ n, ContinuousOn (f n) K) :
147+
HasProdLocallyUniformlyOn (fun n x ↦ 1 + f n x) (fun x ↦ ∏' i, (1 + f i x)) K :=
148+
hasProdLocallyUniformlyOn_one_add hK hu (Nat.cofinite_eq_atTop ▸ h) hcts
149+
150+
lemma multipliableLocallyUniformlyOn_nat_one_add {f : ℕ → α → R} (hK : IsOpen K) {u : ℕ → ℝ}
151+
(hu : Summable u) (h : ∀ᶠ n in atTop, ∀ x ∈ K, ‖f n x‖ ≤ u n)
152+
(hcts : ∀ n, ContinuousOn (f n) K) :
153+
MultipliableLocallyUniformlyOn (fun n x ↦ 1 + f n x) K :=
154+
⟨_, hasProdLocallyUniformlyOn_nat_one_add hK hu h hcts⟩
155+
156+
end LocallyCompactSpace
157+
158+
end Summable

Mathlib/Analysis/SpecialFunctions/Log/Summable.lean

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ Authors: Chris Birkbeck
55
-/
66

77
import Mathlib.Analysis.SpecialFunctions.Complex.LogBounds
8-
import Mathlib.Analysis.NormedSpace.FunctionSeries
98

109
/-!
1110
# Summability of logarithms
@@ -43,7 +42,8 @@ lemma summable_log_one_add_of_summable {f : ι → ℂ} (hf : Summable f) :
4342
filter_upwards [hf.norm.tendsto_cofinite_zero.eventually_le_const one_half_pos] with i hi
4443
using norm_log_one_add_half_le_self hi
4544

46-
lemma multipliable_one_add_of_summable (hf : Summable f) : Multipliable (fun i ↦ 1 + f i) :=
45+
protected lemma multipliable_one_add_of_summable (hf : Summable f) :
46+
Multipliable (fun i ↦ 1 + f i) :=
4747
multipliable_of_summable_log (summable_log_one_add_of_summable hf)
4848

4949
end Complex
@@ -94,21 +94,6 @@ lemma multipliable_one_add_of_summable (hf : Summable f) : Multipliable (fun i
9494

9595
end Real
9696

97-
lemma Complex.tendstoUniformlyOn_tsum_nat_log_one_add {α : Type*} {f : ℕ → α → ℂ} (K : Set α)
98-
{u : ℕ → ℝ} (hu : Summable u) (h : ∀ᶠ n in atTop, ∀ x ∈ K, ‖f n x‖ ≤ u n) :
99-
TendstoUniformlyOn (fun (n : ℕ) (a : α) => ∑ i ∈ Finset.range n,
100-
(Complex.log (1 + f i a))) (fun a => ∑' i : ℕ, Complex.log (1 + f i a)) atTop K := by
101-
apply tendstoUniformlyOn_tsum_nat_eventually (hu.mul_left (3/2))
102-
obtain ⟨N, hN⟩ := Metric.tendsto_atTop.mp (Summable.tendsto_atTop_zero hu) (1/2) (one_half_pos)
103-
simp only [eventually_atTop, ge_iff_le] at *
104-
obtain ⟨N2, hN2⟩ := h
105-
refine ⟨max N N2, fun n hn x hx => ?_⟩
106-
apply le_trans (Complex.norm_log_one_add_half_le_self (z := (f n x)) ?_)
107-
· simp only [Nat.ofNat_pos, div_pos_iff_of_pos_left, mul_le_mul_left]
108-
exact hN2 n (le_of_max_le_right hn) x hx
109-
· apply le_trans (le_trans (hN2 n (le_of_max_le_right hn) x hx)
110-
(by simpa using Real.le_norm_self (u n))) (hN n (le_of_max_le_left hn)).le
111-
11297
section NormedRing
11398

11499
lemma Multipliable.eventually_bounded_finset_prod {v : ι → ℝ} (hv : Multipliable v) :

Mathlib/Topology/Algebra/InfiniteSum/UniformOn.lean

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Chris Birkbeck, David Loeffler
55
-/
66
import Mathlib.Topology.Algebra.InfiniteSum.Defs
77
import Mathlib.Topology.Algebra.UniformConvergence
8+
import Mathlib.Order.Filter.AtTopBot.Finset
89

910
/-!
1011
# Infinite sum and products that converge uniformly on a set
@@ -63,6 +64,13 @@ lemma hasProdUniformlyOn_iff_tendstoUniformlyOn : HasProdUniformlyOn f g 𝔖
6364
simpa [HasProdUniformlyOn, HasProd, ← UniformOnFun.ofFun_prod, Finset.prod_fn] using
6465
UniformOnFun.tendsto_iff_tendstoUniformlyOn
6566

67+
@[to_additive]
68+
lemma HasProdUniformlyOn.tendstoUniformlyOn_finset_range
69+
{f : ℕ → β → α} (h : HasProdUniformlyOn f g 𝔖) (hs : s ∈ 𝔖) :
70+
TendstoUniformlyOn (fun N b ↦ ∏ i ∈ Finset.range N, f i b) g atTop s := by
71+
rw [hasProdUniformlyOn_iff_tendstoUniformlyOn] at h
72+
exact fun v hv => Filter.tendsto_finset_range.eventually (h s hs v hv)
73+
6674
@[to_additive]
6775
theorem HasProdUniformlyOn.hasProd (h : HasProdUniformlyOn f g 𝔖) (hs : s ∈ 𝔖) (hx : x ∈ s) :
6876
HasProd (f · x) (g x) :=
@@ -142,6 +150,18 @@ lemma hasProdLocallyUniformlyOn_of_of_forall_exists_nhds
142150
@[deprecated (since := "2025-05-22")] alias hasSumLocallyUniformlyOn_of_of_forall_exists_nhd :=
143151
hasSumLocallyUniformlyOn_of_of_forall_exists_nhds
144152

153+
@[to_additive]
154+
lemma HasProdUniformlyOn.hasProdLocallyUniformlyOn (h : HasProdUniformlyOn f g {s}) :
155+
HasProdLocallyUniformlyOn f g s := by
156+
simp [HasProdLocallyUniformlyOn, hasProdUniformlyOn_iff_tendstoUniformlyOn] at *
157+
exact TendstoUniformlyOn.tendstoLocallyUniformlyOn h
158+
159+
@[to_additive]
160+
lemma hasProdLocallyUniformlyOn_of_forall_compact (hs : IsOpen s) [LocallyCompactSpace β]
161+
(h : ∀ K ⊆ s, IsCompact K → HasProdUniformlyOn f g {K}) : HasProdLocallyUniformlyOn f g s := by
162+
rw [HasProdLocallyUniformlyOn, tendstoLocallyUniformlyOn_iff_forall_isCompact hs]
163+
simpa [hasProdUniformlyOn_iff_tendstoUniformlyOn] using h
164+
145165
@[to_additive]
146166
theorem HasProdLocallyUniformlyOn.multipliableLocallyUniformlyOn
147167
(h : HasProdLocallyUniformlyOn f g s) : MultipliableLocallyUniformlyOn f s :=
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/-
2+
Copyright (c) 2025 Chris Birkbeck. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Chris Birkbeck
5+
-/
6+
import Mathlib.Topology.Algebra.IsUniformGroup.Defs
7+
import Mathlib.Topology.Order.Basic
8+
import Mathlib.Topology.UniformSpace.UniformConvergence
9+
10+
/-!
11+
# TendstoUniformlyOn on ordered spaces
12+
13+
We gather some results about `TendstoUniformlyOn f g K` on ordered spaces,
14+
in particular bounding the values of `f` in terms of bounds on the limit `g`.
15+
16+
-/
17+
18+
open Filter Function Finset Topology
19+
20+
variable {α ι : Type*}
21+
22+
section order
23+
24+
variable {β : Type*} [UniformSpace β] [AddGroup β] [IsUniformAddGroup β] [PartialOrder β]
25+
[OrderTopology β] [AddLeftMono β] [AddRightMono β]
26+
27+
variable {f : ι → α → β} {g : α → β} {K : Set α} {p : Filter ι}
28+
29+
/-- If a sequence of functions converges uniformly on a set to a function `g` which is bounded above
30+
by a value `u`, then the sequence is strictly bounded by any `v` such that `u < v`. -/
31+
lemma TendstoUniformlyOn.eventually_forall_lt {u v : β} (huv : u < v)
32+
(hf : TendstoUniformlyOn f g p K) (hg : ∀ x ∈ K, g x ≤ u) :
33+
∀ᶠ i in p, ∀ x ∈ K, f i x < v := by
34+
simp only [tendstoUniformlyOn_iff_tendsto, uniformity_eq_comap_neg_add_nhds_zero,
35+
tendsto_iff_eventually, eventually_comap, Prod.forall] at *
36+
conv at hf => enter [2]; rw [eventually_iff_exists_mem]
37+
have hf2 := hf (fun x ↦ -x.1 + x.2 < -u + v) ⟨_, (isOpen_gt' (-u + v)).mem_nhds (by simp [huv]),
38+
fun y hy a b hab ↦ (hab.symm ▸ hy :)⟩
39+
filter_upwards [eventually_prod_principal_iff.mp hf2] with i hi x hx
40+
simpa using add_lt_add_of_le_of_lt (hg x hx) (hi x hx)
41+
42+
lemma TendstoUniformlyOn.eventually_forall_le {u v : β} (huv : u < v)
43+
(hf : TendstoUniformlyOn f g p K) (hg : ∀ x ∈ K, g x ≤ u) :
44+
∀ᶠ i in p, ∀ x ∈ K, f i x ≤ v := by
45+
filter_upwards [hf.eventually_forall_lt huv hg] with i hi x hx using (hi x hx).le
46+
47+
end order

Mathlib/Topology/UniformSpace/UniformConvergence.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ theorem tendstoUniformlyOn_iff_tendstoUniformly_comp_coe :
123123
TendstoUniformlyOn F f p s ↔ TendstoUniformly (fun i (x : s) => F i x) (f ∘ (↑)) p :=
124124
forall₂_congr fun u _ => by simp
125125

126+
lemma tendstoUniformlyOn_iff_restrict {K : Set α} : TendstoUniformlyOn F f p K ↔
127+
TendstoUniformly (fun n : ι => K.restrict (F n)) (K.restrict f) p :=
128+
tendstoUniformlyOn_iff_tendstoUniformly_comp_coe
129+
126130
/-- A sequence of functions `Fₙ` converges uniformly to a limiting function `f` w.r.t.
127131
filter `p` iff the function `(n, x) ↦ (f x, Fₙ x)` converges along `p ×ˢ ⊤` to the uniformity.
128132
In other words: one knows nothing about the behavior of `x` in this limit.

Mathlib/Topology/UniformSpace/UniformConvergenceTopology.lean

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,38 +1117,46 @@ end UniformFun
11171117

11181118
section UniformComposition
11191119

1120-
variable {α β γ ι : Type*} [UniformSpace β] [UniformSpace γ] {p : Filter ι}
1120+
variable {α β γ ι : Type*} [UniformSpace β] [UniformSpace γ] {p : Filter ι} {s : Set β}
1121+
{F : ι → α → β} {f : α → β} {g : β → γ}
11211122

11221123
/-- Composing on the left by a uniformly continuous function preserves uniform convergence -/
1123-
theorem UniformContinuousOn.comp_tendstoUniformly (s : Set β) (F : ι → α → β) (f : α → β)
1124-
(hF : ∀ i x, F i x ∈ s) (hf : ∀ x, f x ∈ s)
1125-
{g : β → γ} (hg : UniformContinuousOn g s) (h : TendstoUniformly F f p) :
1124+
theorem UniformContinuousOn.comp_tendstoUniformly
1125+
(hF : ∀ i x, F i x ∈ s) (hf : ∀ x, f x ∈ s) (hg : UniformContinuousOn g s)
1126+
(h : TendstoUniformly F f p) :
11261127
TendstoUniformly (fun i x => g (F i x)) (fun x => g (f x)) p := by
11271128
rw [uniformContinuousOn_iff_restrict] at hg
11281129
lift F to ι → α → s using hF with F' hF'
11291130
lift f to α → s using hf with f' hf'
11301131
rw [tendstoUniformly_iff_tendsto] at h
1131-
have : Tendsto (fun q : ι × α ↦ (f' q.2, (F' q.1 q.2))) (p ×ˢ ⊤) (𝓤 s) :=
1132+
have : Tendsto (fun q ↦ (f' q.2, F' q.1 q.2)) (p ×ˢ ⊤) (𝓤 s) :=
11321133
h.of_tendsto_comp isUniformEmbedding_subtype_val.comap_uniformity.le
11331134
apply UniformContinuous.comp_tendstoUniformly hg ?_
11341135
rwa [← tendstoUniformly_iff_tendsto] at this
11351136

1136-
theorem UniformContinuousOn.comp_tendstoUniformly_eventually (s : Set β) (F : ι → α → β) (f : α → β)
1137-
(hF : ∀ᶠ i in p, ∀ x, F i x ∈ s) (hf : ∀ x, f x ∈ s)
1138-
{g : β → γ} (hg : UniformContinuousOn g s) (h : TendstoUniformly F f p) :
1139-
TendstoUniformly (fun i => fun x => g (F i x)) (fun x => g (f x)) p := by
1137+
theorem UniformContinuousOn.comp_tendstoUniformly_eventually
1138+
(hF : ∀ᶠ i in p, ∀ x, F i x ∈ s) (hf : ∀ x, f x ∈ s) (hg : UniformContinuousOn g s)
1139+
(h : TendstoUniformly F f p) :
1140+
TendstoUniformly (fun i x ↦ g (F i x)) (fun x g (f x)) p := by
11401141
classical
1141-
rw [eventually_iff_exists_mem] at hF
1142-
obtain ⟨s', hs', hs⟩ := hF
1143-
let F' : ι → α → β := fun (i : ι) x => if i ∈ s' then F i x else f x
1142+
obtain ⟨s', hs', hs⟩ := eventually_iff_exists_mem.mp hF
1143+
let F' : ι → α → β := fun i x => if i ∈ s' then F i x else f x
11441144
have hF : F =ᶠ[p] F' := by
11451145
rw [eventuallyEq_iff_exists_mem]
11461146
refine ⟨s', hs', fun y hy => by aesop⟩
11471147
have h' : TendstoUniformly F' f p := by
11481148
rwa [tendstoUniformly_congr hF] at h
11491149
apply (tendstoUniformly_congr _).mpr
1150-
(UniformContinuousOn.comp_tendstoUniformly s F' f (by aesop) hf hg h')
1150+
(UniformContinuousOn.comp_tendstoUniformly (by aesop) hf hg h')
11511151
rw [eventuallyEq_iff_exists_mem]
11521152
refine ⟨s', hs', fun i hi => by aesop⟩
11531153

1154+
theorem UniformContinuousOn.comp_tendstoUniformlyOn_eventually {t : Set α}
1155+
(hF : ∀ᶠ i in p, ∀ x ∈ t, F i x ∈ s) (hf : ∀ x ∈ t, f x ∈ s)
1156+
{g : β → γ} (hg : UniformContinuousOn g s) (h : TendstoUniformlyOn F f p t) :
1157+
TendstoUniformlyOn (fun i x ↦ g (F i x)) (fun x => g (f x)) p t := by
1158+
rw [tendstoUniformlyOn_iff_restrict]
1159+
apply UniformContinuousOn.comp_tendstoUniformly_eventually (by simpa using hF )
1160+
(by simpa using hf) hg (tendstoUniformlyOn_iff_restrict.mp h)
1161+
11541162
end UniformComposition

0 commit comments

Comments
 (0)