Documentation

Mathlib.Topology.Algebra.UniformConvergence

Algebraic facts about the topology of uniform convergence #

This file contains algebraic compatibility results about the uniform structure of uniform convergence / 𝔖-convergence. They will mostly be useful for defining strong topologies on the space of continuous linear maps between two topological vector spaces.

Main statements #

Implementation notes #

Like in Topology/UniformSpace/UniformConvergenceTopology, we use the type aliases UniformFun (denoted α →ᵤ β) and UniformOnFun (denoted α →ᵤ[𝔖] β) for functions from α to β endowed with the structures of uniform convergence and 𝔖-convergence.

TODO #

References #

Tags #

uniform convergence, strong dual

instance instAddMonoidUniformFun {α : Type u_1} {β : Type u_2} [AddMonoid β] :
Equations
  • instAddMonoidUniformFun = Pi.addMonoid
instance instMonoidUniformFun {α : Type u_1} {β : Type u_2} [Monoid β] :
Equations
  • instMonoidUniformFun = Pi.monoid
instance instAddMonoidUniformOnFun {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} [AddMonoid β] :
AddMonoid (UniformOnFun α β 𝔖)
Equations
  • instAddMonoidUniformOnFun = Pi.addMonoid
instance instMonoidUniformOnFun {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} [Monoid β] :
Monoid (UniformOnFun α β 𝔖)
Equations
  • instMonoidUniformOnFun = Pi.monoid
instance instAddCommMonoidUniformFun {α : Type u_1} {β : Type u_2} [AddCommMonoid β] :
Equations
  • instAddCommMonoidUniformFun = Pi.addCommMonoid
instance instCommMonoidUniformFun {α : Type u_1} {β : Type u_2} [CommMonoid β] :
Equations
  • instCommMonoidUniformFun = Pi.commMonoid
instance instAddCommMonoidUniformOnFun {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} [AddCommMonoid β] :
Equations
  • instAddCommMonoidUniformOnFun = Pi.addCommMonoid
instance instCommMonoidUniformOnFun {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} [CommMonoid β] :
Equations
  • instCommMonoidUniformOnFun = Pi.commMonoid
instance instAddGroupUniformFun {α : Type u_1} {β : Type u_2} [AddGroup β] :
Equations
  • instAddGroupUniformFun = Pi.addGroup
instance instGroupUniformFun {α : Type u_1} {β : Type u_2} [Group β] :
Equations
  • instGroupUniformFun = Pi.group
instance instAddGroupUniformOnFun {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} [AddGroup β] :
AddGroup (UniformOnFun α β 𝔖)
Equations
  • instAddGroupUniformOnFun = Pi.addGroup
instance instGroupUniformOnFun {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} [Group β] :
Group (UniformOnFun α β 𝔖)
Equations
  • instGroupUniformOnFun = Pi.group
instance instAddCommGroupUniformFun {α : Type u_1} {β : Type u_2} [AddCommGroup β] :
Equations
  • instAddCommGroupUniformFun = Pi.addCommGroup
instance instCommGroupUniformFun {α : Type u_1} {β : Type u_2} [CommGroup β] :
Equations
  • instCommGroupUniformFun = Pi.commGroup
instance instAddCommGroupUniformOnFun {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} [AddCommGroup β] :
Equations
  • instAddCommGroupUniformOnFun = Pi.addCommGroup
instance instCommGroupUniformOnFun {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} [CommGroup β] :
CommGroup (UniformOnFun α β 𝔖)
Equations
  • instCommGroupUniformOnFun = Pi.commGroup
instance instModuleUniformFunInstAddCommMonoidUniformFun {α : Type u_1} {β : Type u_2} {R : Type u_4} [Semiring R] [AddCommMonoid β] [Module R β] :
Module R (UniformFun α β)
Equations
  • instModuleUniformFunInstAddCommMonoidUniformFun = Pi.module α (fun a => β) R
instance instModuleUniformOnFunInstAddCommMonoidUniformOnFun {α : Type u_1} {β : Type u_2} {R : Type u_4} {𝔖 : Set (Set α)} [Semiring R] [AddCommMonoid β] [Module R β] :
Module R (UniformOnFun α β 𝔖)
Equations
  • instModuleUniformOnFunInstAddCommMonoidUniformOnFun = Pi.module α (fun a => β) R
@[simp]
theorem UniformFun.zero_apply {α : Type u_1} {β : Type u_2} {x : α} [AddMonoid β] :
OfNat.ofNat (UniformFun α β) 0 Zero.toOfNat0 x = 0
@[simp]
theorem UniformFun.one_apply {α : Type u_1} {β : Type u_2} {x : α} [Monoid β] :
OfNat.ofNat (UniformFun α β) 1 One.toOfNat1 x = 1
@[simp]
theorem UniformOnFun.zero_apply {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} {x : α} [AddMonoid β] :
OfNat.ofNat (UniformOnFun α β 𝔖) 0 Zero.toOfNat0 x = 0
@[simp]
theorem UniformOnFun.one_apply {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} {x : α} [Monoid β] :
OfNat.ofNat (UniformOnFun α β 𝔖) 1 One.toOfNat1 x = 1
@[simp]
theorem UniformFun.add_apply {α : Type u_1} {β : Type u_2} {f : UniformFun α β} {g : UniformFun α β} {x : α} [AddMonoid β] :
(UniformFun α β + UniformFun α β) (UniformFun α β) instHAdd f g x = f x + g x
@[simp]
theorem UniformFun.mul_apply {α : Type u_1} {β : Type u_2} {f : UniformFun α β} {g : UniformFun α β} {x : α} [Monoid β] :
(UniformFun α β * UniformFun α β) (UniformFun α β) instHMul f g x = f x * g x
@[simp]
theorem UniformOnFun.add_apply {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} {f : UniformOnFun α β 𝔖} {g : UniformOnFun α β 𝔖} {x : α} [AddMonoid β] :
(UniformOnFun α β 𝔖 + UniformOnFun α β 𝔖) (UniformOnFun α β 𝔖) instHAdd f g x = f x + g x
@[simp]
theorem UniformOnFun.mul_apply {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} {f : UniformOnFun α β 𝔖} {g : UniformOnFun α β 𝔖} {x : α} [Monoid β] :
(UniformOnFun α β 𝔖 * UniformOnFun α β 𝔖) (UniformOnFun α β 𝔖) instHMul f g x = f x * g x
@[simp]
theorem UniformFun.neg_apply {α : Type u_1} {β : Type u_2} {f : UniformFun α β} {x : α} [AddGroup β] :
(-UniformFun α β) NegZeroClass.toNeg f x = -f x
@[simp]
theorem UniformFun.inv_apply {α : Type u_1} {β : Type u_2} {f : UniformFun α β} {x : α} [Group β] :
(UniformFun α β)⁻¹ InvOneClass.toInv f x = (f x)⁻¹
@[simp]
theorem UniformOnFun.neg_apply {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} {f : UniformOnFun α β 𝔖} {x : α} [AddGroup β] :
(-UniformOnFun α β 𝔖) NegZeroClass.toNeg f x = -f x
@[simp]
theorem UniformOnFun.inv_apply {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} {f : UniformOnFun α β 𝔖} {x : α} [Group β] :
(UniformOnFun α β 𝔖)⁻¹ InvOneClass.toInv f x = (f x)⁻¹
@[simp]
theorem UniformFun.sub_apply {α : Type u_1} {β : Type u_2} {f : UniformFun α β} {g : UniformFun α β} {x : α} [AddGroup β] :
(UniformFun α β - UniformFun α β) (UniformFun α β) instHSub f g x = f x - g x
@[simp]
theorem UniformFun.div_apply {α : Type u_1} {β : Type u_2} {f : UniformFun α β} {g : UniformFun α β} {x : α} [Group β] :
(UniformFun α β / UniformFun α β) (UniformFun α β) instHDiv f g x = f x / g x
@[simp]
theorem UniformOnFun.sub_apply {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} {f : UniformOnFun α β 𝔖} {g : UniformOnFun α β 𝔖} {x : α} [AddGroup β] :
(UniformOnFun α β 𝔖 - UniformOnFun α β 𝔖) (UniformOnFun α β 𝔖) instHSub f g x = f x - g x
@[simp]
theorem UniformOnFun.div_apply {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} {f : UniformOnFun α β 𝔖} {g : UniformOnFun α β 𝔖} {x : α} [Group β] :
(UniformOnFun α β 𝔖 / UniformOnFun α β 𝔖) (UniformOnFun α β 𝔖) instHDiv f g x = f x / g x
theorem UniformFun.hasBasis_nhds_zero_of_basis {α : Type u_1} {G : Type u_2} {ι : Type u_3} [AddGroup G] [UniformSpace G] [UniformAddGroup G] {p : ιProp} {b : ιSet G} (h : Filter.HasBasis (nhds 0) p b) :
Filter.HasBasis (nhds 0) p fun i => {f | ∀ (x : α), f x b i}
theorem UniformFun.hasBasis_nhds_one_of_basis {α : Type u_1} {G : Type u_2} {ι : Type u_3} [Group G] [UniformSpace G] [UniformGroup G] {p : ιProp} {b : ιSet G} (h : Filter.HasBasis (nhds 1) p b) :
Filter.HasBasis (nhds 1) p fun i => {f | ∀ (x : α), f x b i}
theorem UniformFun.hasBasis_nhds_zero {α : Type u_1} {G : Type u_2} [AddGroup G] [UniformSpace G] [UniformAddGroup G] :
Filter.HasBasis (nhds 0) (fun V => V nhds 0) fun V => {f | ∀ (x : α), f x V}
theorem UniformFun.hasBasis_nhds_one {α : Type u_1} {G : Type u_2} [Group G] [UniformSpace G] [UniformGroup G] :
Filter.HasBasis (nhds 1) (fun V => V nhds 1) fun V => {f | ∀ (x : α), f x V}

Let 𝔖 : Set (Set α). If G is a uniform additive group, then α →ᵤ[𝔖] G is a uniform additive group as well.

Equations

Let 𝔖 : Set (Set α). If G is a uniform group, then α →ᵤ[𝔖] G is a uniform group as well.

Equations
theorem UniformOnFun.hasBasis_nhds_zero_of_basis {α : Type u_1} {G : Type u_2} {ι : Type u_3} [AddGroup G] [UniformSpace G] [UniformAddGroup G] (𝔖 : Set (Set α)) (h𝔖₁ : Set.Nonempty 𝔖) (h𝔖₂ : DirectedOn (fun x x_1 => x x_1) 𝔖) {p : ιProp} {b : ιSet G} (h : Filter.HasBasis (nhds 0) p b) :
Filter.HasBasis (nhds 0) (fun Si => Si.fst 𝔖 p Si.snd) fun Si => {f | ∀ (x : α), x Si.fstf x b Si.snd}
theorem UniformOnFun.hasBasis_nhds_one_of_basis {α : Type u_1} {G : Type u_2} {ι : Type u_3} [Group G] [UniformSpace G] [UniformGroup G] (𝔖 : Set (Set α)) (h𝔖₁ : Set.Nonempty 𝔖) (h𝔖₂ : DirectedOn (fun x x_1 => x x_1) 𝔖) {p : ιProp} {b : ιSet G} (h : Filter.HasBasis (nhds 1) p b) :
Filter.HasBasis (nhds 1) (fun Si => Si.fst 𝔖 p Si.snd) fun Si => {f | ∀ (x : α), x Si.fstf x b Si.snd}
theorem UniformOnFun.hasBasis_nhds_zero {α : Type u_1} {G : Type u_2} [AddGroup G] [UniformSpace G] [UniformAddGroup G] (𝔖 : Set (Set α)) (h𝔖₁ : Set.Nonempty 𝔖) (h𝔖₂ : DirectedOn (fun x x_1 => x x_1) 𝔖) :
Filter.HasBasis (nhds 0) (fun SV => SV.fst 𝔖 SV.snd nhds 0) fun SV => {f | ∀ (x : α), x SV.fstf x SV.snd}
theorem UniformOnFun.hasBasis_nhds_one {α : Type u_1} {G : Type u_2} [Group G] [UniformSpace G] [UniformGroup G] (𝔖 : Set (Set α)) (h𝔖₁ : Set.Nonempty 𝔖) (h𝔖₂ : DirectedOn (fun x x_1 => x x_1) 𝔖) :
Filter.HasBasis (nhds 1) (fun SV => SV.fst 𝔖 SV.snd nhds 1) fun SV => {f | ∀ (x : α), x SV.fstf x SV.snd}
theorem UniformOnFun.continuousSMul_induced_of_image_bounded (𝕜 : Type u_1) (α : Type u_2) (E : Type u_3) (H : Type u_4) {hom : Type u_5} [NormedField 𝕜] [AddCommGroup H] [Module 𝕜 H] [AddCommGroup E] [Module 𝕜 E] [TopologicalSpace H] [UniformSpace E] [UniformAddGroup E] [ContinuousSMul 𝕜 E] {𝔖 : Set (Set α)} [LinearMapClass hom 𝕜 H (UniformOnFun α E 𝔖)] (h𝔖₁ : Set.Nonempty 𝔖) (h𝔖₂ : DirectedOn (fun x x_1 => x x_1) 𝔖) (φ : hom) (hφ : Inducing φ) (h : ∀ (u : H) (s : Set α), s 𝔖Bornology.IsVonNBounded 𝕜 (φ u '' s)) :

Let E be a TVS, 𝔖 : Set (Set α) and H a submodule of α →ᵤ[𝔖] E. If the image of any S ∈ 𝔖 by any u ∈ H is bounded (in the sense of Bornology.IsVonNBounded), then H, equipped with the topology of 𝔖-convergence, is a TVS.

For convenience, we don't literally ask for H : Submodule (α →ᵤ[𝔖] E). Instead, we prove the result for any vector space H equipped with a linear inducing to α →ᵤ[𝔖] E, which is often easier to use. We also state the Submodule version as UniformOnFun.continuousSMul_submodule_of_image_bounded.

theorem UniformOnFun.continuousSMul_submodule_of_image_bounded (𝕜 : Type u_1) (α : Type u_2) (E : Type u_3) [NormedField 𝕜] [AddCommGroup E] [Module 𝕜 E] [UniformSpace E] [UniformAddGroup E] [ContinuousSMul 𝕜 E] {𝔖 : Set (Set α)} (h𝔖₁ : Set.Nonempty 𝔖) (h𝔖₂ : DirectedOn (fun x x_1 => x x_1) 𝔖) (H : Submodule 𝕜 (UniformOnFun α E 𝔖)) (h : ∀ (u : UniformOnFun α E 𝔖), u H∀ (s : Set α), s 𝔖Bornology.IsVonNBounded 𝕜 (u '' s)) :
ContinuousSMul 𝕜 { x // x H }

Let E be a TVS, 𝔖 : Set (Set α) and H a submodule of α →ᵤ[𝔖] E. If the image of any S ∈ 𝔖 by any u ∈ H is bounded (in the sense of Bornology.IsVonNBounded), then H, equipped with the topology of 𝔖-convergence, is a TVS.

If you have a hard time using this lemma, try the one above instead.