# The compact-open topology #

In this file, we define the compact-open topology on the set of continuous maps between two topological spaces.

## Main definitions #

• ContinuousMap.compactOpen is the compact-open topology on C(X, Y). It is declared as an instance.
• ContinuousMap.coev is the coevaluation map Y → C(X, Y × X). It is always continuous.
• ContinuousMap.curry is the currying map C(X × Y, Z) → C(X, C(Y, Z)). This map always exists and it is continuous as long as X × Y is locally compact.
• ContinuousMap.uncurry is the uncurrying map C(X, C(Y, Z)) → C(X × Y, Z). For this map to exist, we need Y to be locally compact. If X is also locally compact, then this map is continuous.
• Homeomorph.curry combines the currying and uncurrying operations into a homeomorphism C(X × Y, Z) ≃ₜ C(X, C(Y, Z)). This homeomorphism exists if X and Y are locally compact.

## Tags #

compact-open, curry, function space

instance ContinuousMap.compactOpen {X : Type u_2} {Y : Type u_3} [] [] :

The compact-open topology on the space of continuous maps C(X, Y).

Equations
• One or more equations did not get rendered due to their size.
theorem ContinuousMap.compactOpen_eq {X : Type u_2} {Y : Type u_3} [] [] :
ContinuousMap.compactOpen = TopologicalSpace.generateFrom (Set.image2 (fun (K : Set X) (U : Set Y) => {f : C(X, Y) | Set.MapsTo (f) K U}) {K : Set X | } {t : Set Y | })

Definition of ContinuousMap.compactOpen.

theorem ContinuousMap.isOpen_setOf_mapsTo {X : Type u_2} {Y : Type u_3} [] [] {K : Set X} {U : Set Y} (hK : ) (hU : ) :
IsOpen {f : C(X, Y) | Set.MapsTo (f) K U}
theorem ContinuousMap.eventually_mapsTo {X : Type u_2} {Y : Type u_3} [] [] {K : Set X} {U : Set Y} {f : C(X, Y)} (hK : ) (hU : ) (h : Set.MapsTo (f) K U) :
∀ᶠ (g : C(X, Y)) in nhds f, Set.MapsTo (g) K U
theorem ContinuousMap.nhds_compactOpen {X : Type u_2} {Y : Type u_3} [] [] (f : C(X, Y)) :
nhds f = ⨅ (K : Set X), ⨅ (_ : ), ⨅ (U : Set Y), ⨅ (_ : ), ⨅ (_ : Set.MapsTo (f) K U), Filter.principal {g : C(X, Y) | Set.MapsTo (g) K U}
theorem ContinuousMap.tendsto_nhds_compactOpen {α : Type u_1} {Y : Type u_3} {Z : Type u_4} [] [] {l : } {f : αC(Y, Z)} {g : C(Y, Z)} :
Filter.Tendsto f l (nhds g) ∀ (K : Set Y), ∀ (U : Set Z), Set.MapsTo (g) K U∀ᶠ (a : α) in l, Set.MapsTo ((f a)) K U
theorem ContinuousMap.continuous_compactOpen {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] {f : XC(Y, Z)} :
∀ (K : Set Y), ∀ (U : Set Z), IsOpen {x : X | Set.MapsTo ((f x)) K U}
theorem ContinuousMap.continuous_comp {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] (g : C(Y, Z)) :
Continuous g.comp

C(X, ·) is a functor.

theorem ContinuousMap.inducing_comp {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] (g : C(Y, Z)) (hg : Inducing g) :
Inducing g.comp

If g : C(Y, Z) is a topology inducing map, then the composition ContinuousMap.comp g : C(X, Y) → C(X, Z) is a topology inducing map too.

theorem ContinuousMap.embedding_comp {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] (g : C(Y, Z)) (hg : ) :
Embedding g.comp

If g : C(Y, Z) is a topological embedding, then the composition ContinuousMap.comp g : C(X, Y) → C(X, Z) is an embedding too.

theorem ContinuousMap.continuous_comp_left {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] (f : C(X, Y)) :
Continuous fun (g : C(Y, Z)) => g.comp f

C(·, Z) is a functor.

def Homeomorph.arrowCongr {X : Type u_2} {Y : Type u_3} {Z : Type u_4} {T : Type u_5} [] [] [] [] (φ : X ≃ₜ Z) (ψ : Y ≃ₜ T) :

Any pair of homeomorphisms X ≃ₜ Z and Y ≃ₜ T gives rise to a homeomorphism C(X, Y) ≃ₜ C(Z, T).

Equations
• One or more equations did not get rendered due to their size.
Instances For
theorem ContinuousMap.continuous_comp' {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] [] :
Continuous fun (x : C(X, Y) × C(Y, Z)) => x.2.comp x.1

Composition is a continuous map from C(X, Y) × C(Y, Z) to C(X, Z), provided that Y is locally compact. This is Prop. 9 of Chap. X, §3, №. 4 of Bourbaki's Topologie Générale.

theorem Filter.Tendsto.compCM {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] [] {α : Type u_6} {l : } {g : αC(Y, Z)} {g₀ : C(Y, Z)} {f : αC(X, Y)} {f₀ : C(X, Y)} (hg : Filter.Tendsto g l (nhds g₀)) (hf : Filter.Tendsto f l (nhds f₀)) :
Filter.Tendsto (fun (a : α) => (g a).comp (f a)) l (nhds (g₀.comp f₀))
theorem ContinuousAt.compCM {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] [] {X' : Type u_6} [] {a : X'} {g : X'C(Y, Z)} {f : X'C(X, Y)} (hg : ) (hf : ) :
ContinuousAt (fun (x : X') => (g x).comp (f x)) a
theorem ContinuousWithinAt.compCM {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] [] {X' : Type u_6} [] {a : X'} {g : X'C(Y, Z)} {f : X'C(X, Y)} {s : Set X'} (hg : ) (hf : ) :
ContinuousWithinAt (fun (x : X') => (g x).comp (f x)) s a
theorem ContinuousOn.compCM {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] [] {X' : Type u_6} [] {g : X'C(Y, Z)} {f : X'C(X, Y)} {s : Set X'} (hg : ) (hf : ) :
ContinuousOn (fun (x : X') => (g x).comp (f x)) s
theorem Continuous.compCM {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] [] {X' : Type u_6} [] {g : X'C(Y, Z)} {f : X'C(X, Y)} (hg : ) (hf : ) :
Continuous fun (x : X') => (g x).comp (f x)
@[deprecated Continuous.compCM]
theorem ContinuousMap.continuous.comp' {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] [] {X' : Type u_6} [] {g : X'C(Y, Z)} {f : X'C(X, Y)} (hf : ) (hg : ) :
Continuous fun (x : X') => (g x).comp (f x)
theorem ContinuousMap.continuous_eval {X : Type u_2} {Y : Type u_3} [] [] [] :
Continuous fun (p : C(X, Y) × X) => p.1 p.2

The evaluation map C(X, Y) × X → Y is continuous if X, Y is a locally compact pair of spaces.

@[deprecated ContinuousMap.continuous_eval]
theorem ContinuousMap.continuous_eval' {X : Type u_2} {Y : Type u_3} [] [] [] :
Continuous fun (p : C(X, Y) × X) => p.1 p.2

Alias of ContinuousMap.continuous_eval.

The evaluation map C(X, Y) × X → Y is continuous if X, Y is a locally compact pair of spaces.

theorem ContinuousMap.continuous_eval_const {X : Type u_2} {Y : Type u_3} [] [] (a : X) :
Continuous fun (f : C(X, Y)) => f a

Evaluation of a continuous map f at a point x is continuous in f.

Porting note: merged continuous_eval_const with continuous_eval_const' removing unneeded assumptions.

theorem ContinuousMap.continuous_coe {X : Type u_2} {Y : Type u_3} [] [] :
Continuous DFunLike.coe

Coercion from C(X, Y) with compact-open topology to X → Y with pointwise convergence topology is a continuous map.

Porting note: merged continuous_coe with continuous_coe' removing unneeded assumptions.

theorem ContinuousMap.isClosed_setOf_mapsTo {X : Type u_2} {Y : Type u_3} [] [] {t : Set Y} (ht : ) (s : Set X) :
IsClosed {f : C(X, Y) | Set.MapsTo (f) s t}
theorem ContinuousMap.isClopen_setOf_mapsTo {X : Type u_2} {Y : Type u_3} [] [] {K : Set X} {U : Set Y} (hK : ) (hU : ) :
IsClopen {f : C(X, Y) | Set.MapsTo (f) K U}
theorem ContinuousMap.specializes_coe {X : Type u_2} {Y : Type u_3} [] [] {f : C(X, Y)} {g : C(X, Y)} :
f g f g
theorem ContinuousMap.inseparable_coe {X : Type u_2} {Y : Type u_3} [] [] {f : C(X, Y)} {g : C(X, Y)} :
Inseparable f g
instance ContinuousMap.instT0Space {X : Type u_2} {Y : Type u_3} [] [] [] :
Equations
• =
instance ContinuousMap.instR0Space {X : Type u_2} {Y : Type u_3} [] [] [] :
Equations
• =
instance ContinuousMap.instT1Space {X : Type u_2} {Y : Type u_3} [] [] [] :
Equations
• =
instance ContinuousMap.instR1Space {X : Type u_2} {Y : Type u_3} [] [] [] :
Equations
• =
instance ContinuousMap.instT2Space {X : Type u_2} {Y : Type u_3} [] [] [] :
Equations
• =
instance ContinuousMap.instRegularSpace {X : Type u_2} {Y : Type u_3} [] [] [] :
Equations
• =
instance ContinuousMap.instT3Space {X : Type u_2} {Y : Type u_3} [] [] [] :
Equations
• =
theorem ContinuousMap.continuous_restrict {X : Type u_2} {Y : Type u_3} [] [] (s : Set X) :
Continuous fun (F : C(X, Y)) =>

For any subset s of X, the restriction of continuous functions to s is continuous as a function from C(X, Y) to C(s, Y) with their respective compact-open topologies.

theorem ContinuousMap.compactOpen_le_induced {X : Type u_2} {Y : Type u_3} [] [] (s : Set X) :
ContinuousMap.compactOpen TopologicalSpace.induced ContinuousMap.compactOpen
theorem ContinuousMap.compactOpen_eq_iInf_induced {X : Type u_2} {Y : Type u_3} [] [] :
ContinuousMap.compactOpen = ⨅ (K : Set X), ⨅ (_ : ), TopologicalSpace.induced ContinuousMap.compactOpen

The compact-open topology on C(X, Y) is equal to the infimum of the compact-open topologies on C(s, Y) for s a compact subset of X. The key point of the proof is that for every compact set K, the universal set Set.univ : Set K is a compact set as well.

@[deprecated ContinuousMap.compactOpen_eq_iInf_induced]
theorem ContinuousMap.compactOpen_eq_sInf_induced {X : Type u_2} {Y : Type u_3} [] [] :
ContinuousMap.compactOpen = ⨅ (K : Set X), ⨅ (_ : ), TopologicalSpace.induced ContinuousMap.compactOpen

Alias of ContinuousMap.compactOpen_eq_iInf_induced.

The compact-open topology on C(X, Y) is equal to the infimum of the compact-open topologies on C(s, Y) for s a compact subset of X. The key point of the proof is that for every compact set K, the universal set Set.univ : Set K is a compact set as well.

theorem ContinuousMap.nhds_compactOpen_eq_iInf_nhds_induced {X : Type u_2} {Y : Type u_3} [] [] (f : C(X, Y)) :
nhds f = ⨅ (s : Set X), ⨅ (_ : ),
@[deprecated ContinuousMap.nhds_compactOpen_eq_iInf_nhds_induced]
theorem ContinuousMap.nhds_compactOpen_eq_sInf_nhds_induced {X : Type u_2} {Y : Type u_3} [] [] (f : C(X, Y)) :
nhds f = ⨅ (s : Set X), ⨅ (_ : ),

Alias of ContinuousMap.nhds_compactOpen_eq_iInf_nhds_induced.

theorem ContinuousMap.tendsto_compactOpen_restrict {X : Type u_2} {Y : Type u_3} [] [] {ι : Type u_6} {l : } {F : ιC(X, Y)} {f : C(X, Y)} (hFf : Filter.Tendsto F l (nhds f)) (s : Set X) :
Filter.Tendsto (fun (i : ι) => ContinuousMap.restrict s (F i)) l ()
theorem ContinuousMap.tendsto_compactOpen_iff_forall {X : Type u_2} {Y : Type u_3} [] [] {ι : Type u_6} {l : } (F : ιC(X, Y)) (f : C(X, Y)) :
Filter.Tendsto F l (nhds f) ∀ (K : Set X), Filter.Tendsto (fun (i : ι) => ContinuousMap.restrict K (F i)) l ()
theorem ContinuousMap.exists_tendsto_compactOpen_iff_forall {X : Type u_2} {Y : Type u_3} [] [] [] {ι : Type u_6} {l : } [l.NeBot] (F : ιC(X, Y)) :
(∃ (f : C(X, Y)), Filter.Tendsto F l (nhds f)) ∀ (s : Set X), ∃ (f : C(s, Y)), Filter.Tendsto (fun (i : ι) => ContinuousMap.restrict s (F i)) l (nhds f)

A family F of functions in C(X, Y) converges in the compact-open topology, if and only if it converges in the compact-open topology on each compact subset of X.

@[simp]
theorem ContinuousMap.coev_apply (X : Type u_2) (Y : Type u_3) [] [] (b : Y) :
() =
def ContinuousMap.coev (X : Type u_2) (Y : Type u_3) [] [] (b : Y) :
C(X, Y × X)

The coevaluation map Y → C(X, Y × X) sending a point x : Y to the continuous function on X sending y to (x, y).

Equations
• = { toFun := , continuous_toFun := }
Instances For
theorem ContinuousMap.image_coev {X : Type u_2} {Y : Type u_3} [] [] {y : Y} (s : Set X) :
() '' s = {y} ×ˢ s
theorem ContinuousMap.continuous_coev {X : Type u_2} {Y : Type u_3} [] [] :

The coevaluation map Y → C(X, Y × X) is continuous (always).

def ContinuousMap.curry {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] (f : C(X × Y, Z)) :

The curried form of a continuous map α × β → γ as a continuous map α → C(β, γ). If a × β is locally compact, this is continuous. If α and β are both locally compact, then this is a homeomorphism, see Homeomorph.curry.

Equations
• f.curry = { toFun := fun (a : X) => { toFun := Function.curry (f) a, continuous_toFun := }, continuous_toFun := }
Instances For
@[simp]
theorem ContinuousMap.curry_apply {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] (f : C(X × Y, Z)) (a : X) (b : Y) :
(f.curry a) b = f (a, b)
@[deprecated ContinuousMap.curry]
def ContinuousMap.curry' {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] (f : C(X × Y, Z)) (a : X) :
C(Y, Z)

Auxiliary definition, see ContinuousMap.curry and Homeomorph.curry.

Equations
• f.curry' a = f.curry a
Instances For
@[deprecated ContinuousMap.curry]
theorem ContinuousMap.continuous_curry' {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] (f : C(X × Y, Z)) :
Continuous f.curry'

If a map α × β → γ is continuous, then its curried form α → C(β, γ) is continuous.

theorem ContinuousMap.continuous_of_continuous_uncurry {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] (f : XC(Y, Z)) (h : Continuous (Function.uncurry fun (x : X) (y : Y) => (f x) y)) :

To show continuity of a map α → C(β, γ), it suffices to show that its uncurried form α × β → γ is continuous.

theorem ContinuousMap.continuous_curry {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] [LocallyCompactSpace (X × Y)] :
Continuous ContinuousMap.curry

The currying process is a continuous map between function spaces.

theorem ContinuousMap.continuous_uncurry_of_continuous {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] (f : C(X, C(Y, Z))) :
Continuous (Function.uncurry fun (x : X) (y : Y) => (f x) y)

The uncurried form of a continuous map X → C(Y, Z) is a continuous map X × Y → Z.

@[simp]
theorem ContinuousMap.uncurry_apply {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] (f : C(X, C(Y, Z))) :
∀ (a : X × Y), f.uncurry a = Function.uncurry (fun (x : X) (y : Y) => (f x) y) a
def ContinuousMap.uncurry {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] (f : C(X, C(Y, Z))) :
C(X × Y, Z)

The uncurried form of a continuous map X → C(Y, Z) as a continuous map X × Y → Z (if Y is locally compact). If X is also locally compact, then this is a homeomorphism between the two function spaces, see Homeomorph.curry.

Equations
• f.uncurry = { toFun := Function.uncurry fun (x : X) (y : Y) => (f x) y, continuous_toFun := }
Instances For
theorem ContinuousMap.continuous_uncurry {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] :
Continuous ContinuousMap.uncurry

The uncurrying process is a continuous map between function spaces.

def ContinuousMap.const' {X : Type u_2} {Y : Type u_3} [] [] :

The family of constant maps: Y → C(X, Y) as a continuous map.

Equations
• ContinuousMap.const' = ContinuousMap.fst.curry
Instances For
@[simp]
theorem ContinuousMap.coe_const' {X : Type u_2} {Y : Type u_3} [] [] :
ContinuousMap.const' =
theorem ContinuousMap.continuous_const' {X : Type u_2} {Y : Type u_3} [] [] :
def Homeomorph.curry {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [] [] [] :

Currying as a homeomorphism between the function spaces C(X × Y, Z) and C(X, C(Y, Z)).

Equations
• Homeomorph.curry = { toFun := ContinuousMap.curry, invFun := ContinuousMap.uncurry, left_inv := , right_inv := , continuous_toFun := , continuous_invFun := }
Instances For
def Homeomorph.continuousMapOfUnique {X : Type u_1} {Y : Type u_2} [] [] [] :

If X has a single element, then Y is homeomorphic to C(X, Y).

Equations
• Homeomorph.continuousMapOfUnique = { toFun := , invFun := fun (f : C(X, Y)) => f default, left_inv := , right_inv := , continuous_toFun := , continuous_invFun := }
Instances For
@[simp]
theorem Homeomorph.continuousMapOfUnique_apply {X : Type u_1} {Y : Type u_2} [] [] [] (y : Y) (x : X) :
(Homeomorph.continuousMapOfUnique y) x = y
@[simp]
theorem Homeomorph.continuousMapOfUnique_symm_apply {X : Type u_1} {Y : Type u_2} [] [] [] (f : C(X, Y)) :
Homeomorph.continuousMapOfUnique.symm f = f default
theorem QuotientMap.continuous_lift_prod_left {X₀ : Type u_1} {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] [] {f : X₀X} (hf : ) {g : X × YZ} (hg : Continuous fun (p : X₀ × Y) => g (f p.1, p.2)) :
theorem QuotientMap.continuous_lift_prod_right {X₀ : Type u_1} {X : Type u_2} {Y : Type u_3} {Z : Type u_4} [] [] [] [] {f : X₀X} (hf : ) {g : Y × XZ} (hg : Continuous fun (p : Y × X₀) => g (p.1, f p.2)) :