Topology and uniform structure of uniform convergence #

This files endows α → β with the topologies / uniform structures of

• uniform convergence on α
• uniform convergence on a specified family 𝔖 of sets of α, also called 𝔖-convergence

Since α → β is already endowed with the topologies and uniform structures of pointwise convergence, we introduce type aliases UniformFun α β (denoted α →ᵤ β) and UniformOnFun α β 𝔖 (denoted α →ᵤ[𝔖] β) and we actually endow these with the structures of uniform and 𝔖-convergence respectively.

Usual examples of the second construction include :

• the topology of compact convergence, when 𝔖 is the set of compacts of α
• the strong topology on the dual of a topological vector space (TVS) E, when 𝔖 is the set of Von Neumann bounded subsets of E
• the weak-* topology on the dual of a TVS E, when 𝔖 is the set of singletons of E.

This file contains a lot of technical facts, so it is heavily commented, proofs included!

Main definitions #

• UniformFun.gen: basis sets for the uniformity of uniform convergence. These are sets of the form S(V) := {(f, g) | ∀ x : α, (f x, g x) ∈ V} for some V : Set (β × β)
• UniformFun.uniformSpace: uniform structure of uniform convergence. This is the UniformSpace on α →ᵤ β whose uniformity is generated by the sets S(V) for V ∈ 𝓤 β. We will denote this uniform space as 𝒰(α, β, uβ), both in the comments and as a local notation in the Lean code, where uβ is the uniform space structure on β. This is declared as an instance on α →ᵤ β.
• UniformOnFun.uniformSpace: uniform structure of 𝔖-convergence, where 𝔖 : Set (Set α). This is the infimum, for S ∈ 𝔖, of the pullback of 𝒰 S β by the map of restriction to S. We will denote it 𝒱(α, β, 𝔖, uβ), where uβ is the uniform space structure on β. This is declared as an instance on α →ᵤ[𝔖] β.

Main statements #

Basic properties #

• UniformFun.uniformContinuous_eval: evaluation is uniformly continuous on α →ᵤ β.
• UniformFun.t2Space: the topology of uniform convergence on α →ᵤ β is T₂ if β is T₂.
• UniformFun.tendsto_iff_tendstoUniformly: 𝒰(α, β, uβ) is indeed the uniform structure of uniform convergence
• UniformOnFun.uniformContinuous_eval_of_mem: evaluation at a point contained in a set of 𝔖 is uniformly continuous on α →ᵤ[𝔖] β
• UniformOnFun.t2Space_of_covering: the topology of 𝔖-convergence on α →ᵤ[𝔖] β is T₂ if β is T₂ and 𝔖 covers α
• UniformOnFun.tendsto_iff_tendstoUniformlyOn: 𝒱(α, β, 𝔖 uβ) is indeed the uniform structure of 𝔖-convergence

Functoriality and compatibility with product of uniform spaces #

In order to avoid the need for filter bases as much as possible when using these definitions, we develop an extensive API for manipulating these structures abstractly. As usual in the topology section of mathlib, we first state results about the complete lattices of UniformSpaces on fixed types, and then we use these to deduce categorical-like results about maps between two uniform spaces.

We only describe these in the harder case of 𝔖-convergence, as the names of the corresponding results for uniform convergence can easily be guessed.

Order statements #

• UniformOnFun.mono: let u₁, u₂ be two uniform structures on γ and 𝔖₁ 𝔖₂ : Set (Set α). If u₁ ≤ u₂ and 𝔖₂ ⊆ 𝔖₁ then 𝒱(α, γ, 𝔖₁, u₁) ≤ 𝒱(α, γ, 𝔖₂, u₂).
• UniformOnFun.iInf_eq: if u is a family of uniform structures on γ, then 𝒱(α, γ, 𝔖, (⨅ i, u i)) = ⨅ i, 𝒱(α, γ, 𝔖, u i).
• UniformOnFun.comap_eq: if u is a uniform structures on β and f : γ → β, then 𝒱(α, γ, 𝔖, comap f u) = comap (fun g ↦ f ∘ g) 𝒱(α, γ, 𝔖, u₁).

An interesting note about these statements is that they are proved without ever unfolding the basis definition of the uniform structure of uniform convergence! Instead, we build a (not very interesting) Galois connection UniformFun.gc and then rely on the Galois connection API to do most of the work.

Morphism statements (unbundled) #

• UniformOnFun.postcomp_uniformContinuous: if f : γ → β is uniformly continuous, then (fun g ↦ f ∘ g) : (α →ᵤ[𝔖] γ) → (α →ᵤ[𝔖] β) is uniformly continuous.
• UniformOnFun.postcomp_uniformInducing: if f : γ → β is a uniform inducing, then (fun g ↦ f ∘ g) : (α →ᵤ[𝔖] γ) → (α →ᵤ[𝔖] β) is a uniform inducing.
• UniformOnFun.precomp_uniformContinuous: let f : γ → α, 𝔖 : Set (Set α), 𝔗 : Set (Set γ), and assume that ∀ T ∈ 𝔗, f '' T ∈ 𝔖. Then, the function (fun g ↦ g ∘ f) : (α →ᵤ[𝔖] β) → (γ →ᵤ[𝔗] β) is uniformly continuous.

Isomorphism statements (bundled) #

• UniformOnFun.congrRight: turn a uniform isomorphism γ ≃ᵤ β into a uniform isomorphism (α →ᵤ[𝔖] γ) ≃ᵤ (α →ᵤ[𝔖] β) by post-composing.
• UniformOnFun.congrLeft: turn a bijection e : γ ≃ α such that we have both ∀ T ∈ 𝔗, e '' T ∈ 𝔖 and ∀ S ∈ 𝔖, e ⁻¹' S ∈ 𝔗 into a uniform isomorphism (γ →ᵤ[𝔗] β) ≃ᵤ (α →ᵤ[𝔖] β) by pre-composing.
• UniformOnFun.uniformEquivPiComm: the natural bijection between α → Π i, δ i and Π i, α → δ i, upgraded to a uniform isomorphism between α →ᵤ[𝔖] (Π i, δ i) and Π i, α →ᵤ[𝔖] δ i.

Important use cases #

• If G is a uniform group, then α →ᵤ[𝔖] G is a uniform group: since (/) : G × G → G is uniformly continuous, UniformOnFun.postcomp_uniformContinuous tells us that ((/) ∘ —) : (α →ᵤ[𝔖] G × G) → (α →ᵤ[𝔖] G) is uniformly continuous. By precomposing with UniformOnFun.uniformEquivProdArrow, this gives that (/) : (α →ᵤ[𝔖] G) × (α →ᵤ[𝔖] G) → (α →ᵤ[𝔖] G) is also uniformly continuous
• The transpose of a continuous linear map is continuous for the strong topologies: since continuous linear maps are uniformly continuous and map bounded sets to bounded sets, this is just a special case of UniformOnFun.precomp_uniformContinuous.

TODO #

• Show that the uniform structure of 𝔖-convergence is exactly the structure of 𝔖'-convergence, where 𝔖' is the noncovering bornology (i.e not what Bornology currently refers to in mathlib) generated by 𝔖.

References #

• [N. Bourbaki, General Topology, Chapter X][bourbaki1966]

Tags #

uniform convergence

def UniformFun (α : Type u_1) (β : Type u_2) :
Type (max u_1 u_2)

The type of functions from α to β equipped with the uniform structure and topology of uniform convergence. We denote it α →ᵤ β.

Equations
• = (αβ)
Instances For
def UniformOnFun (α : Type u_1) (β : Type u_2) :
Set (Set α)Type (max u_1 u_2)

The type of functions from α to β equipped with the uniform structure and topology of uniform convergence on some family 𝔖 of subsets of α. We denote it α →ᵤ[𝔖] β.

Equations
Instances For

The type of functions from α to β equipped with the uniform structure and topology of uniform convergence. We denote it α →ᵤ β.

Equations
• One or more equations did not get rendered due to their size.
Instances For

The type of functions from α to β equipped with the uniform structure and topology of uniform convergence on some family 𝔖 of subsets of α. We denote it α →ᵤ[𝔖] β.

Equations
• One or more equations did not get rendered due to their size.
Instances For
instance instNonemptyUniformFun {α : Type u_1} {β : Type u_2} [] :
Equations
• =
instance instNonemptyUniformOnFun {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} [] :
Nonempty (UniformOnFun α β 𝔖)
Equations
• =
instance instSubsingletonUniformFun {α : Type u_1} {β : Type u_2} [] :
Equations
• =
instance instSubsingletonUniformOnFun {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} [] :
Equations
• =
def UniformFun.ofFun {α : Type u_1} {β : Type u_2} :
(αβ)

Reinterpret f : α → β as an element of α →ᵤ β.

Equations
• UniformFun.ofFun = { toFun := fun (x : αβ) => x, invFun := fun (x : ) => x, left_inv := , right_inv := }
Instances For
def UniformOnFun.ofFun {α : Type u_1} {β : Type u_2} (𝔖 : Set (Set α)) :
(αβ) UniformOnFun α β 𝔖

Reinterpret f : α → β as an element of α →ᵤ[𝔖] β.

Equations
• = { toFun := fun (x : αβ) => x, invFun := fun (x : UniformOnFun α β 𝔖) => x, left_inv := , right_inv := }
Instances For
def UniformFun.toFun {α : Type u_1} {β : Type u_2} :
(αβ)

Reinterpret f : α →ᵤ β as an element of α → β.

Equations
• UniformFun.toFun = UniformFun.ofFun.symm
Instances For
def UniformOnFun.toFun {α : Type u_1} {β : Type u_2} (𝔖 : Set (Set α)) :
UniformOnFun α β 𝔖 (αβ)

Reinterpret f : α →ᵤ[𝔖] β as an element of α → β.

Equations
• = .symm
Instances For
@[simp]
theorem UniformFun.toFun_ofFun {α : Type u_1} {β : Type u_2} (f : αβ) :
UniformFun.toFun (UniformFun.ofFun f) = f
@[simp]
theorem UniformFun.ofFun_toFun {α : Type u_1} {β : Type u_2} (f : ) :
UniformFun.ofFun (UniformFun.toFun f) = f
@[simp]
theorem UniformOnFun.toFun_ofFun {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} (f : αβ) :
( f) = f
@[simp]
theorem UniformOnFun.ofFun_toFun {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} (f : UniformOnFun α β 𝔖) :
( f) = f
def UniformFun.gen (α : Type u_1) (β : Type u_2) (V : Set (β × β)) :
Set ( × )

Basis sets for the uniformity of uniform convergence: gen α β V is the set of pairs (f, g) of functions α →ᵤ β such that ∀ x, (f x, g x) ∈ V.

Equations
• = {uv : × | ∀ (x : α), (UniformFun.toFun uv.1 x, UniformFun.toFun uv.2 x) V}
Instances For
theorem UniformFun.isBasis_gen (α : Type u_1) (β : Type u_2) (𝓑 : Filter (β × β)) :
Filter.IsBasis (fun (V : Set (β × β)) => V 𝓑) ()

If 𝓕 is a filter on β × β, then the set of all UniformFun.gen α β V for V ∈ 𝓕 is a filter basis on (α →ᵤ β) × (α →ᵤ β). This will only be applied to 𝓕 = 𝓤 β when β is equipped with a UniformSpace structure, but it is useful to define it for any filter in order to be able to state that it has a lower adjoint (see UniformFun.gc).

def UniformFun.basis (α : Type u_1) (β : Type u_2) (𝓕 : Filter (β × β)) :

For 𝓕 : Filter (β × β), this is the set of all UniformFun.gen α β V for V ∈ 𝓕 as a bundled FilterBasis over (α →ᵤ β) × (α →ᵤ β). This will only be applied to 𝓕 = 𝓤 β when β is equipped with a UniformSpace structure, but it is useful to define it for any filter in order to be able to state that it has a lower adjoint (see UniformFun.gc).

Equations
• = .filterBasis
Instances For
def UniformFun.filter (α : Type u_1) (β : Type u_2) (𝓕 : Filter (β × β)) :

For 𝓕 : Filter (β × β), this is the filter generated by the filter basis UniformFun.basis α β 𝓕. For 𝓕 = 𝓤 β, this will be the uniformity of uniform convergence on α.

Equations
• = ().filter
Instances For
def UniformFun.phi (α : Type u_5) (β : Type u_6) (uvx : ( × ) × α) :
β × β
Equations
Instances For
theorem UniformFun.gc (α : Type u_1) (β : Type u_2) :
GaloisConnection (fun (𝓐 : Filter ( × )) => Filter.map () (𝓐 ×ˢ )) fun (𝓕 : Filter (β × β)) =>

The function UniformFun.filter α β : Filter (β × β) → Filter ((α →ᵤ β) × (α →ᵤ β)) has a lower adjoint l (in the sense of GaloisConnection). The exact definition of l is not interesting; we will only use that it exists (in UniformFun.mono and UniformFun.iInf_eq) and that l (Filter.map (Prod.map f f) 𝓕) = Filter.map (Prod.map ((∘) f) ((∘) f)) (l 𝓕) for each 𝓕 : Filter (γ × γ) and f : γ → α (in UniformFun.comap_eq).

def UniformFun.uniformCore (α : Type u_1) (β : Type u_2) [] :

Core of the uniform structure of uniform convergence.

Equations
Instances For
instance UniformFun.uniformSpace (α : Type u_1) (β : Type u_2) [] :

Uniform structure of uniform convergence, declared as an instance on α →ᵤ β. We will denote it 𝒰(α, β, uβ) in the rest of this file.

Equations
instance UniformFun.topologicalSpace (α : Type u_1) (β : Type u_2) [] :

Topology of uniform convergence, declared as an instance on α →ᵤ β.

Equations
• = inferInstance
theorem UniformFun.hasBasis_uniformity (α : Type u_1) (β : Type u_2) [] :
(uniformity ()).HasBasis (fun (x : Set (β × β)) => x ) ()

By definition, the uniformity of α →ᵤ β admits the family {(f, g) | ∀ x, (f x, g x) ∈ V} for V ∈ 𝓤 β as a filter basis.

theorem UniformFun.hasBasis_uniformity_of_basis (α : Type u_1) (β : Type u_2) [] {ι : Sort u_5} {p : ιProp} {s : ιSet (β × β)} (h : ().HasBasis p s) :
(uniformity ()).HasBasis p ( s)

The uniformity of α →ᵤ β admits the family {(f, g) | ∀ x, (f x, g x) ∈ V} for V ∈ 𝓑 as a filter basis, for any basis 𝓑 of 𝓤 β (in the case 𝓑 = (𝓤 β).as_basis this is true by definition).

theorem UniformFun.hasBasis_nhds_of_basis (α : Type u_1) (β : Type u_2) {ι : Type u_4} [] (f : ) {p : ιProp} {s : ιSet (β × β)} (h : ().HasBasis p s) :
(nhds f).HasBasis p fun (i : ι) => {g : | (f, g) UniformFun.gen α β (s i)}

For f : α →ᵤ β, 𝓝 f admits the family {g | ∀ x, (f x, g x) ∈ V} for V ∈ 𝓑 as a filter basis, for any basis 𝓑 of 𝓤 β.

theorem UniformFun.hasBasis_nhds (α : Type u_1) (β : Type u_2) [] (f : ) :
(nhds f).HasBasis (fun (V : Set (β × β)) => V ) fun (V : Set (β × β)) => {g : | (f, g) }

For f : α →ᵤ β, 𝓝 f admits the family {g | ∀ x, (f x, g x) ∈ V} for V ∈ 𝓤 β as a filter basis.

theorem UniformFun.uniformContinuous_eval {α : Type u_1} (β : Type u_2) [] (x : α) :
UniformContinuous ( UniformFun.toFun)

Evaluation at a fixed point is uniformly continuous on α →ᵤ β.

@[simp]
theorem UniformFun.mem_gen {α : Type u_1} {β : Type u_2} {f : } {g : } {V : Set (β × β)} :
(f, g) ∀ (x : α), (UniformFun.toFun f x, UniformFun.toFun g x) V
theorem UniformFun.mono {α : Type u_1} {γ : Type u_3} :

If u₁ and u₂ are two uniform structures on γ and u₁ ≤ u₂, then 𝒰(α, γ, u₁) ≤ 𝒰(α, γ, u₂).

theorem UniformFun.iInf_eq {α : Type u_1} {γ : Type u_3} {ι : Type u_4} {u : ι} :
= ⨅ (i : ι),

If u is a family of uniform structures on γ, then 𝒰(α, γ, (⨅ i, u i)) = ⨅ i, 𝒰(α, γ, u i).

theorem UniformFun.inf_eq {α : Type u_1} {γ : Type u_3} {u₁ : } {u₂ : } :

If u₁ and u₂ are two uniform structures on γ, then 𝒰(α, γ, u₁ ⊓ u₂) = 𝒰(α, γ, u₁) ⊓ 𝒰(α, γ, u₂).

theorem UniformFun.postcomp_uniformInducing {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : γβ} (hf : ) :
UniformInducing (UniformFun.ofFun (fun (x : αγ) => f x) UniformFun.toFun)

Post-composition by a uniform inducing function is a uniform inducing function for the uniform structures of uniform convergence.

More precisely, if f : γ → β is uniform inducing, then (f ∘ ·) : (α →ᵤ γ) → (α →ᵤ β) is uniform inducing.

theorem UniformFun.postcomp_uniformEmbedding {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : γβ} (hf : ) :
UniformEmbedding (UniformFun.ofFun (fun (x : αγ) => f x) UniformFun.toFun)

Post-composition by a uniform embedding is a uniform embedding for the uniform structures of uniform convergence.

More precisely, if f : γ → β is a uniform embedding, then (f ∘ ·) : (α →ᵤ γ) → (α →ᵤ β) is a uniform embedding.

theorem UniformFun.comap_eq {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] {f : γβ} :
= UniformSpace.comap (fun (x : αγ) => f x) ()

If u is a uniform structures on β and f : γ → β, then 𝒰(α, γ, comap f u) = comap (fun g ↦ f ∘ g) 𝒰(α, γ, u₁).

theorem UniformFun.postcomp_uniformContinuous {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] {f : γβ} (hf : ) :
UniformContinuous (UniformFun.ofFun (fun (x : αγ) => f x) UniformFun.toFun)

Post-composition by a uniformly continuous function is uniformly continuous on α →ᵤ β.

More precisely, if f : γ → β is uniformly continuous, then (fun g ↦ f ∘ g) : (α →ᵤ γ) → (α →ᵤ β) is uniformly continuous.

def UniformFun.congrRight {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] (e : γ ≃ᵤ β) :

Turn a uniform isomorphism γ ≃ᵤ β into a uniform isomorphism (α →ᵤ γ) ≃ᵤ (α →ᵤ β) by post-composing.

Equations
• = let __src := Equiv.piCongrRight fun (x : α) => e.toEquiv; { toEquiv := __src, uniformContinuous_toFun := , uniformContinuous_invFun := }
Instances For
theorem UniformFun.precomp_uniformContinuous {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] {f : γα} :
UniformContinuous fun (g : ) => UniformFun.ofFun (UniformFun.toFun g f)

Pre-composition by any function is uniformly continuous for the uniform structures of uniform convergence.

More precisely, for any f : γ → α, the function (· ∘ f) : (α →ᵤ β) → (γ →ᵤ β) is uniformly continuous.

def UniformFun.congrLeft {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] (e : γ α) :

Turn a bijection γ ≃ α into a uniform isomorphism (γ →ᵤ β) ≃ᵤ (α →ᵤ β) by pre-composing.

Equations
• = { toEquiv := e.arrowCongr (), uniformContinuous_toFun := , uniformContinuous_invFun := }
Instances For
theorem UniformFun.uniformContinuous_toFun {α : Type u_1} {β : Type u_2} [] :
UniformContinuous UniformFun.toFun

The natural map UniformFun.toFun from α →ᵤ β to α → β is uniformly continuous.

In other words, the uniform structure of uniform convergence is finer than that of pointwise convergence, aka the product uniform structure.

instance UniformFun.instT2Space {α : Type u_1} {β : Type u_2} [] [] :

The topology of uniform convergence is T₂.

Equations
• =
theorem UniformFun.tendsto_iff_tendstoUniformly {α : Type u_1} {β : Type u_2} {ι : Type u_4} {p : } [] {F : ι} {f : } :
Filter.Tendsto F p (nhds f) TendstoUniformly (UniformFun.toFun F) (UniformFun.toFun f) p

The topology of uniform convergence indeed gives the same notion of convergence as TendstoUniformly.

def UniformFun.uniformEquivProdArrow {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] :
UniformFun α (β × γ) ≃ᵤ ×

The natural bijection between α → β × γ and (α → β) × (α → γ), upgraded to a uniform isomorphism between α →ᵤ β × γ and (α →ᵤ β) × (α →ᵤ γ).

Equations
• UniformFun.uniformEquivProdArrow = ().toUniformEquivOfUniformInducing
Instances For
def UniformFun.uniformEquivPiComm (α : Type u_1) {ι : Type u_4} (δ : ιType u_5) [(i : ι) → UniformSpace (δ i)] :
UniformFun α ((i : ι) → δ i) ≃ᵤ ((i : ι) → UniformFun α (δ i))

The natural bijection between α → Π i, δ i and Π i, α → δ i, upgraded to a uniform isomorphism between α →ᵤ (Π i, δ i) and Π i, α →ᵤ δ i.

Equations
• = (Equiv.piComm fun (a : α) (i : ι) => δ i).toUniformEquivOfUniformInducing
Instances For
theorem UniformFun.isClosed_setOf_continuous (α : Type u_1) {β : Type u_2} [] [] :
IsClosed {f : | Continuous (UniformFun.toFun f)}

The set of continuous functions is closed in the uniform convergence topology. This is a simple wrapper over TendstoUniformly.continuous.

def UniformOnFun.gen {α : Type u_1} {β : Type u_2} (𝔖 : Set (Set α)) (S : Set α) (V : Set (β × β)) :
Set (UniformOnFun α β 𝔖 × UniformOnFun α β 𝔖)

Basis sets for the uniformity of 𝔖-convergence: for S : Set α and V : Set (β × β), gen 𝔖 S V is the set of pairs (f, g) of functions α →ᵤ[𝔖] β such that ∀ x ∈ S, (f x, g x) ∈ V. Note that the family 𝔖 : Set (Set α) is only used to specify which type alias of α → β to use here.

Equations
Instances For
theorem UniformOnFun.gen_eq_preimage_restrict {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} (S : Set α) (V : Set (β × β)) :
= Prod.map (S.restrict UniformFun.toFun) (S.restrict UniformFun.toFun) ⁻¹' UniformFun.gen (S) β V

For S : Set α and V : Set (β × β), we have UniformOnFun.gen 𝔖 S V = (S.restrict × S.restrict) ⁻¹' (UniformFun.gen S β V). This is the crucial fact for proving that the family UniformOnFun.gen S V for S ∈ 𝔖 and V ∈ 𝓤 β is indeed a basis for the uniformity α →ᵤ[𝔖] β endowed with 𝒱(α, β, 𝔖, uβ) the uniform structure of 𝔖-convergence, as defined in UniformOnFun.uniformSpace.

theorem UniformOnFun.gen_mono {α : Type u_1} {β : Type u_2} {𝔖 : Set (Set α)} {S : Set α} {S' : Set α} {V : Set (β × β)} {V' : Set (β × β)} (hS : S' S) (hV : V V') :
UniformOnFun.gen 𝔖 S' V'

UniformOnFun.gen is antitone in the first argument and monotone in the second.

theorem UniformOnFun.isBasis_gen {α : Type u_1} {β : Type u_2} (𝔖 : Set (Set α)) (h : 𝔖.Nonempty) (h' : DirectedOn (fun (x x_1 : Set α) => x x_1) 𝔖) (𝓑 : FilterBasis (β × β)) :
Filter.IsBasis (fun (SV : Set α × Set (β × β)) => SV.1 𝔖 SV.2 𝓑) fun (SV : Set α × Set (β × β)) => UniformOnFun.gen 𝔖 SV.1 SV.2

If 𝔖 : Set (Set α) is nonempty and directed and 𝓑 is a filter basis on β × β, then the family UniformOnFun.gen 𝔖 S V for S ∈ 𝔖 and V ∈ 𝓑 is a filter basis on (α →ᵤ[𝔖] β) × (α →ᵤ[𝔖] β). We will show in has_basis_uniformity_of_basis that, if 𝓑 is a basis for 𝓤 β, then the corresponding filter is the uniformity of α →ᵤ[𝔖] β.

instance UniformOnFun.uniformSpace (α : Type u_1) (β : Type u_2) [] (𝔖 : Set (Set α)) :

Uniform structure of 𝔖-convergence, i.e uniform convergence on the elements of 𝔖, declared as an instance on α →ᵤ[𝔖] β. It is defined as the infimum, for S ∈ 𝔖, of the pullback by S.restrict, the map of restriction to S, of the uniform structure 𝒰(s, β, uβ) on ↥S →ᵤ β. We will denote it 𝒱(α, β, 𝔖, uβ), where uβ is the uniform structure on β.

Equations
instance UniformOnFun.topologicalSpace (α : Type u_1) (β : Type u_2) [] (𝔖 : Set (Set α)) :

Topology of 𝔖-convergence, i.e uniform convergence on the elements of 𝔖, declared as an instance on α →ᵤ[𝔖] β.

Equations
• = UniformSpace.toTopologicalSpace
theorem UniformOnFun.topologicalSpace_eq (α : Type u_1) (β : Type u_2) [] (𝔖 : Set (Set α)) :
= s𝔖, TopologicalSpace.induced (UniformFun.ofFun s.restrict ) ()

The topology of 𝔖-convergence is the infimum, for S ∈ 𝔖, of topology induced by the map of S.restrict : (α →ᵤ[𝔖] β) → (↥S →ᵤ β) of restriction to S, where ↥S →ᵤ β is endowed with the topology of uniform convergence.

theorem UniformOnFun.hasBasis_uniformity_of_basis_aux₁ (α : Type u_1) (β : Type u_2) {ι : Type u_4} [] (𝔖 : Set (Set α)) {p : ιProp} {s : ιSet (β × β)} (hb : ().HasBasis p s) (S : Set α) :
(uniformity (UniformOnFun α β 𝔖)).HasBasis p fun (i : ι) => UniformOnFun.gen 𝔖 S (s i)
theorem UniformOnFun.hasBasis_uniformity_of_basis_aux₂ (α : Type u_1) (β : Type u_2) {ι : Type u_4} [] (𝔖 : Set (Set α)) (h : DirectedOn (fun (x x_1 : Set α) => x x_1) 𝔖) {p : ιProp} {s : ιSet (β × β)} (hb : ().HasBasis p s) :
DirectedOn ((fun (s : Set α) => UniformSpace.comap s.restrict ()) ⁻¹'o GE.ge) 𝔖
theorem UniformOnFun.hasBasis_uniformity_of_basis (α : Type u_1) (β : Type u_2) {ι : Type u_4} [] (𝔖 : Set (Set α)) (h : 𝔖.Nonempty) (h' : DirectedOn (fun (x x_1 : Set α) => x x_1) 𝔖) {p : ιProp} {s : ιSet (β × β)} (hb : ().HasBasis p s) :
(uniformity (UniformOnFun α β 𝔖)).HasBasis (fun (Si : Set α × ι) => Si.1 𝔖 p Si.2) fun (Si : Set α × ι) => UniformOnFun.gen 𝔖 Si.1 (s Si.2)

If 𝔖 : Set (Set α) is nonempty and directed and 𝓑 is a filter basis of 𝓤 β, then the uniformity of α →ᵤ[𝔖] β admits the family {(f, g) | ∀ x ∈ S, (f x, g x) ∈ V} for S ∈ 𝔖 and V ∈ 𝓑 as a filter basis.

theorem UniformOnFun.hasBasis_uniformity (α : Type u_1) (β : Type u_2) [] (𝔖 : Set (Set α)) (h : 𝔖.Nonempty) (h' : DirectedOn (fun (x x_1 : Set α) => x x_1) 𝔖) :
(uniformity (UniformOnFun α β 𝔖)).HasBasis (fun (SV : Set α × Set (β × β)) => SV.1 𝔖 SV.2 ) fun (SV : Set α × Set (β × β)) => UniformOnFun.gen 𝔖 SV.1 SV.2

If 𝔖 : Set (Set α) is nonempty and directed, then the uniformity of α →ᵤ[𝔖] β admits the family {(f, g) | ∀ x ∈ S, (f x, g x) ∈ V} for S ∈ 𝔖 and V ∈ 𝓤 β as a filter basis.

theorem UniformOnFun.hasBasis_uniformity_of_covering_of_basis {α : Type u_1} {β : Type u_2} [] (𝔖 : Set (Set α)) {ι : Type u_5} {ι' : Type u_6} [] {t : ιSet α} {p : ι'Prop} {V : ι'Set (β × β)} (ht : ∀ (i : ι), t i 𝔖) (hdir : Directed (fun (x x_1 : Set α) => x x_1) t) (hex : s𝔖, ∃ (i : ι), s t i) (hb : ().HasBasis p V) :
(uniformity (UniformOnFun α β 𝔖)).HasBasis (fun (i : ι × ι') => p i.2) fun (i : ι × ι') => UniformOnFun.gen 𝔖 (t i.1) (V i.2)

Let t i be a nonempty directed subfamily of 𝔖 such that every s ∈ 𝔖 is included in some t i. Let V bounded by p be a basis of entourages of β.

Then UniformOnFun.gen 𝔖 (t i) (V j) bounded by p j is a basis of entourages of α →ᵤ[𝔖] β.

theorem UniformOnFun.hasAntitoneBasis_uniformity {α : Type u_1} {β : Type u_2} [] (𝔖 : Set (Set α)) {ι : Type u_5} [] [IsDirected ι fun (x x_1 : ι) => x x_1] {t : ιSet α} {V : ιSet (β × β)} (ht : ∀ (n : ι), t n 𝔖) (hmono : ) (hex : s𝔖, ∃ (n : ι), s t n) (hb : ().HasAntitoneBasis V) :
(uniformity (UniformOnFun α β 𝔖)).HasAntitoneBasis fun (n : ι) => UniformOnFun.gen 𝔖 (t n) (V n)

If t n is a monotone sequence of sets in 𝔖 such that each s ∈ 𝔖 is included in some t n and V n is an antitone basis of entourages of β, then UniformOnFun.gen 𝔖 (t n) (V n) is an antitone basis of entourages of α →ᵤ[𝔖] β.

theorem UniformOnFun.isCountablyGenerated_uniformity {α : Type u_1} {β : Type u_2} [] (𝔖 : Set (Set α)) [().IsCountablyGenerated] {t : Set α} (ht : ∀ (n : ), t n 𝔖) (hmono : ) (hex : s𝔖, ∃ (n : ), s t n) :
(uniformity (UniformOnFun α β 𝔖)).IsCountablyGenerated
theorem UniformOnFun.hasBasis_nhds_of_basis (α : Type u_1) (β : Type u_2) {ι : Type u_4} [] (𝔖 : Set (Set α)) (f : UniformOnFun α β 𝔖) (h : 𝔖.Nonempty) (h' : DirectedOn (fun (x x_1 : Set α) => x x_1) 𝔖) {p : ιProp} {s : ιSet (β × β)} (hb : ().HasBasis p s) :
(nhds f).HasBasis (fun (Si : Set α × ι) => Si.1 𝔖 p Si.2) fun (Si : Set α × ι) => {g : UniformOnFun α β 𝔖 | (g, f) UniformOnFun.gen 𝔖 Si.1 (s Si.2)}

For f : α →ᵤ[𝔖] β, where 𝔖 : Set (Set α) is nonempty and directed, 𝓝 f admits the family {g | ∀ x ∈ S, (f x, g x) ∈ V} for S ∈ 𝔖 and V ∈ 𝓑 as a filter basis, for any basis 𝓑 of 𝓤 β.

theorem UniformOnFun.hasBasis_nhds (α : Type u_1) (β : Type u_2) [] (𝔖 : Set (Set α)) (f : UniformOnFun α β 𝔖) (h : 𝔖.Nonempty) (h' : DirectedOn (fun (x x_1 : Set α) => x x_1) 𝔖) :
(nhds f).HasBasis (fun (SV : Set α × Set (β × β)) => SV.1 𝔖 SV.2 ) fun (SV : Set α × Set (β × β)) => {g : UniformOnFun α β 𝔖 | (g, f) UniformOnFun.gen 𝔖 SV.1 SV.2}

For f : α →ᵤ[𝔖] β, where 𝔖 : Set (Set α) is nonempty and directed, 𝓝 f admits the family {g | ∀ x ∈ S, (f x, g x) ∈ V} for S ∈ 𝔖 and V ∈ 𝓤 β as a filter basis.

theorem UniformOnFun.uniformContinuous_restrict (α : Type u_1) (β : Type u_2) {s : Set α} [] (𝔖 : Set (Set α)) (h : s 𝔖) :
UniformContinuous (UniformFun.ofFun s.restrict )

If S ∈ 𝔖, then the restriction to S is a uniformly continuous map from α →ᵤ[𝔖] β to ↥S →ᵤ β.

theorem UniformOnFun.uniformity_eq_of_basis {α : Type u_1} (β : Type u_2) [] (𝔖 : Set (Set α)) {ι : Sort u_5} {p : ιProp} {V : ιSet (β × β)} (h : ().HasBasis p V) :
uniformity (UniformOnFun α β 𝔖) = s𝔖, ⨅ (i : ι), ⨅ (_ : p i), Filter.principal (UniformOnFun.gen 𝔖 s (V i))

A version of UniformOnFun.hasBasis_uniformity_of_basis with weaker conclusion and weaker assumptions.

We make no assumptions about the set 𝔖 but conclude only that the uniformity is equal to some indexed infimum.

theorem UniformOnFun.uniformity_eq {α : Type u_1} (β : Type u_2) [] (𝔖 : Set (Set α)) :
uniformity (UniformOnFun α β 𝔖) = s𝔖, V, Filter.principal ()
theorem UniformOnFun.gen_mem_uniformity {α : Type u_1} (β : Type u_2) {s : Set α} [] (𝔖 : Set (Set α)) (hs : s 𝔖) {V : Set (β × β)} (hV : V ) :
theorem UniformOnFun.nhds_eq_of_basis {α : Type u_1} (β : Type u_2) [] (𝔖 : Set (Set α)) {ι : Sort u_5} {p : ιProp} {V : ιSet (β × β)} (h : ().HasBasis p V) (f : UniformOnFun α β 𝔖) :
nhds f = s𝔖, ⨅ (i : ι), ⨅ (_ : p i), Filter.principal {g : UniformOnFun α β 𝔖 | xs, ( f x, g x) V i}

A version of UniformOnFun.hasBasis_nhds_of_basis with weaker conclusion and weaker assumptions.

We make no assumptions about the set 𝔖 but conclude only that the neighbourhoods filter is equal to some indexed infimum.

theorem UniformOnFun.nhds_eq {α : Type u_1} (β : Type u_2) [] (𝔖 : Set (Set α)) (f : UniformOnFun α β 𝔖) :
nhds f = s𝔖, V, Filter.principal {g : UniformOnFun α β 𝔖 | xs, ( f x, g x) V}
theorem UniformOnFun.gen_mem_nhds {α : Type u_1} (β : Type u_2) {s : Set α} [] (𝔖 : Set (Set α)) (f : UniformOnFun α β 𝔖) (hs : s 𝔖) {V : Set (β × β)} (hV : V ) :
{g : UniformOnFun α β 𝔖 | xs, ( f x, g x) V} nhds f
theorem UniformOnFun.uniformContinuous_ofUniformFun {α : Type u_1} (β : Type u_2) [] (𝔖 : Set (Set α)) :
UniformContinuous fun (f : ) => (UniformFun.toFun f)
def UniformOnFun.uniformEquivUniformFun {α : Type u_1} (β : Type u_2) [] (𝔖 : Set (Set α)) (h : Set.univ 𝔖) :
UniformOnFun α β 𝔖 ≃ᵤ

The uniformity on α →ᵤ[𝔖] β is the same as the uniformity on α →ᵤ β, provided that Set.univ ∈ 𝔖.

Here we formulate it as a UniformEquiv.

Equations
• One or more equations did not get rendered due to their size.
Instances For
theorem UniformOnFun.mono {α : Type u_1} {γ : Type u_3} ⦃u₁ : ⦃u₂ : (hu : u₁ u₂) ⦃𝔖₁ : Set (Set α) ⦃𝔖₂ : Set (Set α) (h𝔖 : 𝔖₂ 𝔖₁) :

Let u₁, u₂ be two uniform structures on γ and 𝔖₁ 𝔖₂ : Set (Set α). If u₁ ≤ u₂ and 𝔖₂ ⊆ 𝔖₁ then 𝒱(α, γ, 𝔖₁, u₁) ≤ 𝒱(α, γ, 𝔖₂, u₂).

theorem UniformOnFun.uniformContinuous_eval_of_mem {α : Type u_1} (β : Type u_2) {s : Set α} [] (𝔖 : Set (Set α)) {x : α} (hxs : x s) (hs : s 𝔖) :

If x : α is in some S ∈ 𝔖, then evaluation at x is uniformly continuous on α →ᵤ[𝔖] β.

theorem UniformOnFun.uniformContinuous_eval_of_mem_sUnion {α : Type u_1} (β : Type u_2) [] (𝔖 : Set (Set α)) {x : α} (hx : x 𝔖.sUnion) :
theorem UniformOnFun.iInf_eq {α : Type u_1} {γ : Type u_3} {ι : Type u_4} {𝔖 : Set (Set α)} {u : ι} :
= ⨅ (i : ι),

If u is a family of uniform structures on γ, then 𝒱(α, γ, 𝔖, (⨅ i, u i)) = ⨅ i, 𝒱(α, γ, 𝔖, u i).

theorem UniformOnFun.inf_eq {α : Type u_1} {γ : Type u_3} {𝔖 : Set (Set α)} {u₁ : } {u₂ : } :
=

If u₁ and u₂ are two uniform structures on γ, then 𝒱(α, γ, 𝔖, u₁ ⊓ u₂) = 𝒱(α, γ, 𝔖, u₁) ⊓ 𝒱(α, γ, 𝔖, u₂).

theorem UniformOnFun.comap_eq {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] {𝔖 : Set (Set α)} {f : γβ} :
= UniformSpace.comap (fun (x : αγ) => f x) ()

If u is a uniform structure on β and f : γ → β, then 𝒱(α, γ, 𝔖, comap f u) = comap (fun g ↦ f ∘ g) 𝒱(α, γ, 𝔖, u₁).

theorem UniformOnFun.postcomp_uniformContinuous {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] {𝔖 : Set (Set α)} [] {f : γβ} (hf : ) :
UniformContinuous ( (fun (x : αγ) => f x) )

Post-composition by a uniformly continuous function is uniformly continuous for the uniform structures of 𝔖-convergence.

More precisely, if f : γ → β is uniformly continuous, then (fun g ↦ f ∘ g) : (α →ᵤ[𝔖] γ) → (α →ᵤ[𝔖] β) is uniformly continuous.

theorem UniformOnFun.postcomp_uniformInducing {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] {𝔖 : Set (Set α)} [] {f : γβ} (hf : ) :
UniformInducing ( (fun (x : αγ) => f x) )

Post-composition by a uniform inducing is a uniform inducing for the uniform structures of 𝔖-convergence.

More precisely, if f : γ → β is a uniform inducing, then (fun g ↦ f ∘ g) : (α →ᵤ[𝔖] γ) → (α →ᵤ[𝔖] β) is a uniform inducing.

theorem UniformOnFun.postcomp_uniformEmbedding {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] {𝔖 : Set (Set α)} [] {f : γβ} (hf : ) :
UniformEmbedding ( (fun (x : αγ) => f x) )

Post-composition by a uniform embedding is a uniform embedding for the uniform structures of 𝔖-convergence.

More precisely, if f : γ → β is a uniform embedding, then (fun g ↦ f ∘ g) : (α →ᵤ[𝔖] γ) → (α →ᵤ[𝔖] β) is a uniform embedding.

def UniformOnFun.congrRight {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] {𝔖 : Set (Set α)} [] (e : γ ≃ᵤ β) :
UniformOnFun α γ 𝔖 ≃ᵤ UniformOnFun α β 𝔖

Turn a uniform isomorphism γ ≃ᵤ β into a uniform isomorphism (α →ᵤ[𝔖] γ) ≃ᵤ (α →ᵤ[𝔖] β) by post-composing.

Equations
• = let __src := Equiv.piCongrRight fun (_a : α) => e.toEquiv; { toEquiv := __src, uniformContinuous_toFun := , uniformContinuous_invFun := }
Instances For
theorem UniformOnFun.precomp_uniformContinuous {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] {𝔖 : Set (Set α)} {𝔗 : Set (Set γ)} {f : γα} (hf : Set.MapsTo (fun (x : Set γ) => f '' x) 𝔗 𝔖) :
UniformContinuous fun (g : UniformOnFun α β 𝔖) => ( g f)

Let f : γ → α, 𝔖 : Set (Set α), 𝔗 : Set (Set γ), and assume that ∀ T ∈ 𝔗, f '' T ∈ 𝔖. Then, the function (fun g ↦ g ∘ f) : (α →ᵤ[𝔖] β) → (γ →ᵤ[𝔗] β) is uniformly continuous.

Note that one can easily see that assuming ∀ T ∈ 𝔗, ∃ S ∈ 𝔖, f '' T ⊆ S would work too, but we will get this for free when we prove that 𝒱(α, β, 𝔖, uβ) = 𝒱(α, β, 𝔖', uβ) where 𝔖' is the noncovering bornology generated by 𝔖.

def UniformOnFun.congrLeft {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] {𝔖 : Set (Set α)} {𝔗 : Set (Set γ)} (e : γ α) (he : 𝔗 ⁻¹' 𝔖) (he' : 𝔖 ⁻¹' 𝔗) :
UniformOnFun γ β 𝔗 ≃ᵤ UniformOnFun α β 𝔖

Turn a bijection e : γ ≃ α such that we have both ∀ T ∈ 𝔗, e '' T ∈ 𝔖 and ∀ S ∈ 𝔖, e ⁻¹' S ∈ 𝔗 into a uniform isomorphism (γ →ᵤ[𝔗] β) ≃ᵤ (α →ᵤ[𝔖] β) by pre-composing.

Equations
• UniformOnFun.congrLeft e he he' = let __src := e.arrowCongr (); { toEquiv := __src, uniformContinuous_toFun := , uniformContinuous_invFun := }
Instances For
theorem UniformOnFun.t2Space_of_covering {α : Type u_1} {β : Type u_2} [] {𝔖 : Set (Set α)} [] (h : 𝔖.sUnion = Set.univ) :
T2Space (UniformOnFun α β 𝔖)

If 𝔖 covers α, then the topology of 𝔖-convergence is T₂.

theorem UniformOnFun.uniformContinuous_restrict_toFun {α : Type u_1} {β : Type u_2} [] {𝔖 : Set (Set α)} :
UniformContinuous (𝔖.sUnion.restrict )

The restriction map from α →ᵤ[𝔖] β to ⋃₀ 𝔖 → β is uniformly continuous.

theorem UniformOnFun.uniformContinuous_toFun {α : Type u_1} {β : Type u_2} [] {𝔖 : Set (Set α)} (h : 𝔖.sUnion = Set.univ) :

If 𝔖 covers α, the natural map UniformOnFun.toFun from α →ᵤ[𝔖] β to α → β is uniformly continuous.

In other words, if 𝔖 covers α, then the uniform structure of 𝔖-convergence is finer than that of pointwise convergence.

theorem UniformOnFun.tendsto_iff_tendstoUniformlyOn {α : Type u_1} {β : Type u_2} {ι : Type u_4} {p : } [] {𝔖 : Set (Set α)} {F : ιUniformOnFun α β 𝔖} {f : UniformOnFun α β 𝔖} :
Filter.Tendsto F p (nhds f) s𝔖, TendstoUniformlyOn ( F) ( f) p s

Convergence in the topology of 𝔖-convergence means uniform convergence on S (in the sense of TendstoUniformlyOn) for all S ∈ 𝔖.

theorem UniformOnFun.continuous_rng_iff {α : Type u_1} {β : Type u_2} [] {𝔖 : Set (Set α)} {X : Type u_5} [] {f : XUniformOnFun α β 𝔖} :
s𝔖, Continuous (UniformFun.ofFun s.restrict f)
instance UniformOnFun.instCompleteSpace {α : Type u_1} {β : Type u_2} [] {𝔖 : Set (Set α)} [] :
Equations
• =
def UniformOnFun.uniformEquivProdArrow {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] {𝔖 : Set (Set α)} [] :
UniformOnFun α (β × γ) 𝔖 ≃ᵤ UniformOnFun α β 𝔖 × UniformOnFun α γ 𝔖

The natural bijection between α → β × γ and (α → β) × (α → γ), upgraded to a uniform isomorphism between α →ᵤ[𝔖] β × γ and (α →ᵤ[𝔖] β) × (α →ᵤ[𝔖] γ).

Equations
• One or more equations did not get rendered due to their size.
Instances For
def UniformOnFun.uniformEquivPiComm {α : Type u_1} {ι : Type u_4} (𝔖 : Set (Set α)) (δ : ιType u_5) [(i : ι) → UniformSpace (δ i)] :
UniformOnFun α ((i : ι) → δ i) 𝔖 ≃ᵤ ((i : ι) → UniformOnFun α (δ i) 𝔖)

The natural bijection between α → Π i, δ i and Π i, α → δ i, upgraded to a uniform isomorphism between α →ᵤ[𝔖] (Π i, δ i) and Π i, α →ᵤ[𝔖] δ i.

Equations
• = (Equiv.piComm fun (a : α) (i : ι) => δ i).toUniformEquivOfUniformInducing
Instances For
theorem UniformOnFun.isClosed_setOf_continuous_of_le {α : Type u_1} {β : Type u_2} [] (𝔖 : Set (Set α)) [t : ] (h : t s𝔖, TopologicalSpace.coinduced Subtype.val inferInstance) :
IsClosed {f : UniformOnFun α β 𝔖 | Continuous ( f)}

Suppose that the topology on α is defined by its restrictions to the sets of 𝔖.

Then the set of continuous functions is closed in the topology of uniform convergence on the sets of 𝔖.

instance UniformFun.instCompleteSpace {α : Type u_1} {β : Type u_2} [] [] :
Equations
• =