Documentation

Mathlib.Topology.Maps.Proper.Basic

Proper maps between topological spaces #

This file develops the basic theory of proper maps between topological spaces. A map f : X → Y between two topological spaces is said to be proper if it is continuous and satisfies the following equivalent conditions:

  1. f is closed and has compact fibers.
  2. f is universally closed, in the sense that for any topological space Z, the map Prod.map f id : X × Z → Y × Z is closed.
  3. For any ℱ : Filter X, all cluster points of map f ℱ are images by f of some cluster point of .

We take 3 as the definition in IsProperMap, and we show the equivalence with 1, 2, and some other variations.

Main statements #

Implementation notes #

In algebraic geometry, it is common to also ask that proper maps are separated, in the sense of Stacks: definition OCY1. We don't follow this convention because it is unclear whether it would give the right notion in all cases, and in particular for the theory of proper group actions. That means that our terminology does NOT align with that of Stacks: Characterizing proper maps, instead our definition of IsProperMap coincides with what they call "Bourbaki-proper".

Regarding the proofs, we don't really follow Bourbaki and go for more filter-heavy proofs, as usual. In particular, their arguments rely heavily on restriction of closed maps (see IsClosedMap.restrictPreimage), which makes them somehow annoying to formalize in type theory. In contrast, the filter-based proofs work really well thanks to the existing API.

In fact, the filter proofs work so well that I thought this would be a great pedagogical resource about how we use filters. For that reason, all interesting proofs in this file are commented, so don't hesitate to have a look!

TODO #

References #

structure IsProperMap {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] (f : XY) extends Continuous f :

A map f : X → Y between two topological spaces is said to be proper if it is continuous and, for all ℱ : Filter X, any cluster point of map f ℱ is the image by f of a cluster point of .

  • isOpen_preimage (s : Set Y) : IsOpen sIsOpen (f ⁻¹' s)
  • clusterPt_of_mapClusterPt ⦃ℱ : Filter X ⦃y : Y : MapClusterPt y f∃ (x : X), f x = y ClusterPt x

    By definition, if f is a proper map and is any filter on X, then any cluster point of map f ℱ is the image by f of some cluster point of .

Instances For
    theorem isProperMap_iff_clusterPt {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] (f : XY) :
    IsProperMap f Continuous f ∀ ⦃ : Filter X⦄ ⦃y : Y⦄, MapClusterPt y f∃ (x : X), f x = y ClusterPt x

    Definition of proper maps. See also isClosedMap_iff_clusterPt for a related criterion for closed maps.

    theorem IsProperMap.continuous {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (h : IsProperMap f) :

    By definition, a proper map is continuous.

    theorem IsProperMap.isClosedMap {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (h : IsProperMap f) :

    A proper map is closed.

    theorem isProperMap_iff_ultrafilter {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} :
    IsProperMap f Continuous f ∀ ⦃𝒰 : Ultrafilter X⦄ ⦃y : Y⦄, Filter.Tendsto f (↑𝒰) (nhds y)∃ (x : X), f x = y 𝒰 nhds x

    Characterization of proper maps by ultrafilters.

    theorem isProperMap_iff_ultrafilter_of_t2 {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} [T2Space Y] :
    IsProperMap f Continuous f ∀ ⦃𝒰 : Ultrafilter X⦄ ⦃y : Y⦄, Filter.Tendsto f (↑𝒰) (nhds y)∃ (x : X), 𝒰 nhds x
    theorem IsProperMap.ultrafilter_le_nhds_of_tendsto {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (h : IsProperMap f) ⦃𝒰 : Ultrafilter X ⦃y : Y (hy : Filter.Tendsto f (↑𝒰) (nhds y)) :
    ∃ (x : X), f x = y 𝒰 nhds x

    If f is proper and converges to y along some ultrafilter 𝒰, then 𝒰 converges to some x such that f x = y.

    theorem IsProperMap.comp {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z] {f : XY} {g : YZ} (hf : IsProperMap f) (hg : IsProperMap g) :

    The composition of two proper maps is proper.

    theorem isProperMap_of_comp_of_surj {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z] {f : XY} {g : YZ} (hf : Continuous f) (hg : Continuous g) (hgf : IsProperMap (g f)) (f_surj : Function.Surjective f) :

    If the composition of two continuous functions g ∘ f is proper and f is surjective, then g is proper.

    theorem isProperMap_of_comp_of_inj {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z] {f : XY} {g : YZ} (hf : Continuous f) (hg : Continuous g) (hgf : IsProperMap (g f)) (g_inj : Function.Injective g) :

    If the composition of two continuous functions g ∘ f is proper and g is injective, then f is proper.

    theorem isProperMap_of_comp_of_t2 {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z] {f : XY} {g : YZ} [T2Space Y] (hf : Continuous f) (hg : Continuous g) (hgf : IsProperMap (g f)) :

    If the composition of two continuous functions f : X → Y and g : Y → Z is proper and Y is T2, then f is proper.

    theorem IsProperMap.prodMap {X : Type u_1} {Y : Type u_2} {Z : Type u_3} {W : Type u_4} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z] [TopologicalSpace W] {f : XY} {g : ZW} (hf : IsProperMap f) (hg : IsProperMap g) :

    A binary product of proper maps is proper.

    @[deprecated IsProperMap.prodMap (since := "2024-10-06")]
    theorem IsProperMap.prod_map {X : Type u_1} {Y : Type u_2} {Z : Type u_3} {W : Type u_4} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z] [TopologicalSpace W] {f : XY} {g : ZW} (hf : IsProperMap f) (hg : IsProperMap g) :

    Alias of IsProperMap.prodMap.


    A binary product of proper maps is proper.

    theorem IsProperMap.pi_map {ι : Type u_5} {X : ιType u_6} {Y : ιType u_7} [(i : ι) → TopologicalSpace (X i)] [(i : ι) → TopologicalSpace (Y i)] {f : (i : ι) → X iY i} (h : ∀ (i : ι), IsProperMap (f i)) :
    IsProperMap fun (x : (i : ι) → X i) (i : ι) => f i (x i)

    Any product of proper maps is proper.

    theorem IsProperMap.isCompact_preimage {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (h : IsProperMap f) {K : Set Y} (hK : IsCompact K) :

    The preimage of a compact set by a proper map is again compact. See also isProperMap_iff_isCompact_preimage which proves that this property completely characterizes proper map when the codomain is compactly generated and Hausdorff.

    A map is proper if and only if it is closed and its fibers are compact.

    theorem isProperMap_iff_isClosedMap_of_inj {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (f_cont : Continuous f) (f_inj : Function.Injective f) :

    An injective and continuous function is proper if and only if it is closed.

    theorem isProperMap_of_isClosedMap_of_inj {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (f_cont : Continuous f) (f_inj : Function.Injective f) (f_closed : IsClosedMap f) :

    A injective continuous and closed map is proper.

    @[simp]
    theorem Homeomorph.isProperMap {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] (e : X ≃ₜ Y) :

    A homeomorphism is proper.

    theorem IsHomeomorph.isProperMap {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (hf : IsHomeomorph f) :
    @[simp]

    The identity is proper.

    A closed embedding is proper.

    @[deprecated Topology.IsClosedEmbedding.isProperMap (since := "2024-10-20")]

    Alias of Topology.IsClosedEmbedding.isProperMap.


    A closed embedding is proper.

    theorem IsClosed.isProperMap_subtypeVal {X : Type u_1} [TopologicalSpace X] {C : Set X} (hC : IsClosed C) :
    IsProperMap Subtype.val

    The coercion from a closed subset is proper.

    @[deprecated IsClosed.isProperMap_subtypeVal (since := "2024-10-20")]
    theorem isProperMap_subtype_val_of_closed {X : Type u_1} [TopologicalSpace X] {C : Set X} (hC : IsClosed C) :
    IsProperMap Subtype.val

    Alias of IsClosed.isProperMap_subtypeVal.


    The coercion from a closed subset is proper.

    theorem IsProperMap.restrict {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} {C : Set X} (hf : IsProperMap f) (hC : IsClosed C) :
    IsProperMap fun (x : C) => f x

    The restriction of a proper map to a closed subset is proper.

    @[deprecated IsProperMap.restrict (since := "2024-10-20")]
    theorem isProperMap_restr_of_proper_of_closed {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} {C : Set X} (hf : IsProperMap f) (hC : IsClosed C) :
    IsProperMap fun (x : C) => f x

    Alias of IsProperMap.restrict.


    The restriction of a proper map to a closed subset is proper.

    theorem IsProperMap.isClosed_range {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (hf : IsProperMap f) :

    The range of a proper map is closed.

    @[deprecated IsProperMap.isClosed_range (since := "2024-05-08")]
    theorem IsProperMap.closed_range {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (hf : IsProperMap f) :

    Alias of IsProperMap.isClosed_range.


    The range of a proper map is closed.

    Version of isProperMap_iff_isClosedMap_and_compact_fibers in terms of cofinite and cocompact. Only works when the codomain is T1.

    theorem Continuous.isProperMap {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} [CompactSpace X] [T2Space Y] (hf : Continuous f) :

    A continuous map from a compact space to a T₂ space is a proper map.

    theorem IsProperMap.universally_closed {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (Z : Type u_6) [TopologicalSpace Z] (h : IsProperMap f) :

    A proper map f : X → Y is universally closed: for any topological space Z, the map Prod.map f id : X × Z → Y × Z is closed. We will prove in isProperMap_iff_universally_closed that proper maps are exactly continuous maps which have this property, but this result should be easier to use because it allows Z to live in any universe.

    A map f : X → Y is proper if and only if it is continuous and the map (Prod.map f id : X × Filter X → Y × Filter X) is closed. This is stronger than isProperMap_iff_universally_closed since it shows that there's only one space to check to get properness, but in most cases it doesn't matter.