Documentation

Mathlib.Topology.Category.CompHausLike.Basic

Categories of Compact Hausdorff Spaces #

We construct the category of compact Hausdorff spaces satisfying an additional property P.

Implementation #

We define a structure CompHausLike which takes as an argument a predicate P on topological spaces. It consists of the data of a topological space, satisfying the additional properties of being compact and Hausdorff, and satisfying P. We give a category structure to CompHausLike P induced by the forgetful functor to topological spaces.

It used to be the case (before #12930 was merged) that several different categories of compact Hausdorff spaces, possibly satisfying some extra property, were defined from scratch in this way. For example, one would define a structure CompHaus as follows:

structure CompHaus where
  toTop : TopCat
  [is_compact : CompactSpace toTop]
  [is_hausdorff : T2Space toTop]

and give it the category structure induced from topological spaces. Then the category of profinite spaces was defined as follows:

structure Profinite where
  toCompHaus : CompHaus
  [isTotallyDisconnected : TotallyDisconnectedSpace toCompHaus]

The categories Stonean consisting of extremally disconnected compact Hausdorff spaces and LightProfinite consisting of totally disconnected, second countable compact Hausdorff spaces were defined in a similar way. This resulted in code duplication, and reducing this duplication was part of the motivation for introducing CompHausLike.

Using CompHausLike, we can now define CompHaus := CompHausLike (fun _ ↦ True) Profinite := CompHausLike (fun X ↦ TotallyDisconnectedSpace X). Stonean := CompHausLike (fun X ↦ ExtremallyDisconnected X). LightProfinite := CompHausLike (fun X ↦ TotallyDisconnectedSpace X ∧ SecondCountableTopology X).

These four categories are important building blocks of condensed objects (see the files Condensed.Basic and Condensed.Light.Basic). These categories share many properties and often, one wants to argue about several of them simultaneously. This is the other part of the motivation for introducing CompHausLike. On paper, one would say "let C be on of the categories CompHaus or Profinite, then the following holds: ...". This was not possible in Lean using the old definitions. Using the new definitions, this becomes a matter of identifying what common property of CompHaus and Profinite is used in the proof in question, and then proving the theorem for CompHausLike P satisfying that property, and it will automatically apply to both CompHaus and Profinite.

structure CompHausLike (P : TopCatProp) :
Type (u + 1)

The type of Compact Hausdorff topological spaces satisfying an additional property P.

  • toTop : TopCat

    The underlying topological space of an object of CompHausLike P.

  • is_compact : CompactSpace self.toTop

    The underlying topological space is compact.

  • is_hausdorff : T2Space self.toTop

    The underlying topological space is T2.

  • prop : P self.toTop

    The underlying topological space satisfies P.

Instances For
    theorem CompHausLike.is_compact {P : TopCatProp} (self : CompHausLike P) :
    CompactSpace self.toTop

    The underlying topological space is compact.

    theorem CompHausLike.is_hausdorff {P : TopCatProp} (self : CompHausLike P) :
    T2Space self.toTop

    The underlying topological space is T2.

    theorem CompHausLike.prop {P : TopCatProp} (self : CompHausLike P) :
    P self.toTop

    The underlying topological space satisfies P.

    Equations

    This wraps the predicate P : TopCat → Prop in a typeclass.

    Instances
      theorem CompHausLike.HasProp.hasProp {P : TopCatProp} {X : Type u} :
      ∀ {inst : TopologicalSpace X} [self : CompHausLike.HasProp P X], P (TopCat.of X)

      A constructor for objects of the category CompHausLike P, taking a type, and bundling the compact Hausdorff topology found by typeclass inference.

      Equations
      Instances For
        @[simp]
        theorem CompHausLike.coe_of (P : TopCatProp) (X : Type u) [TopologicalSpace X] [CompactSpace X] [T2Space X] [CompHausLike.HasProp P X] :
        (CompHausLike.of P X).toTop = X
        @[simp]
        def CompHausLike.toCompHausLike {P : TopCatProp} {P' : TopCatProp} (h : ∀ (X : CompHausLike P), P X.toTopP' X.toTop) :

        If P imples P', then there is a functor from CompHausLike P to CompHausLike P'.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          @[simp]
          theorem CompHausLike.toCompHausLike_map {P : TopCatProp} {P' : TopCatProp} (h : ∀ (X : CompHausLike P), P X.toTopP' X.toTop) :
          ∀ {X Y : CompHausLike P} (f : X Y), (CompHausLike.toCompHausLike h).map f = f
          @[simp]
          theorem CompHausLike.toCompHausLike_obj {P : TopCatProp} {P' : TopCatProp} (h : ∀ (X : CompHausLike P), P X.toTopP' X.toTop) (X : CompHausLike P) :
          (CompHausLike.toCompHausLike h).obj X = let_fun this := ; CompHausLike.of P' X.toTop
          def CompHausLike.fullyFaithfulToCompHausLike {P : TopCatProp} {P' : TopCatProp} (h : ∀ (X : CompHausLike P), P X.toTopP' X.toTop) :
          (CompHausLike.toCompHausLike h).FullyFaithful

          If P imples P', then the functor from CompHausLike P to CompHausLike P' is fully faithful.

          Equations
          Instances For
            instance CompHausLike.instFullToCompHausLike {P : TopCatProp} {P' : TopCatProp} (h : ∀ (X : CompHausLike P), P X.toTopP' X.toTop) :
            Equations
            • =
            instance CompHausLike.instFaithfulToCompHausLike {P : TopCatProp} {P' : TopCatProp} (h : ∀ (X : CompHausLike P), P X.toTopP' X.toTop) :
            Equations
            • =
            @[simp]
            theorem CompHausLike.compHausLikeToTop_map (P : TopCatProp) :
            ∀ {X Y : CategoryTheory.InducedCategory TopCat CompHausLike.toTop} (f : X Y), (CompHausLike.compHausLikeToTop P).map f = f
            @[simp]
            theorem CompHausLike.compHausLikeToTop_obj (P : TopCatProp) (self : CompHausLike P) :
            (CompHausLike.compHausLikeToTop P).obj self = self.toTop
            theorem CompHausLike.isClosedMap {P : TopCatProp} {X : CompHausLike P} {Y : CompHausLike P} (f : X Y) :

            Any continuous function on compact Hausdorff spaces is a closed map.

            Any continuous bijection of compact Hausdorff spaces is an isomorphism.

            Equations
            • =
            noncomputable def CompHausLike.isoOfBijective {P : TopCatProp} {X : CompHausLike P} {Y : CompHausLike P} (f : X Y) (bij : Function.Bijective f) :
            X Y

            Any continuous bijection of compact Hausdorff spaces induces an isomorphism.

            Equations
            Instances For
              def CompHausLike.isoOfHomeo {P : TopCatProp} {X : CompHausLike P} {Y : CompHausLike P} (f : X.toTop ≃ₜ Y.toTop) :
              X Y

              Construct an isomorphism from a homeomorphism.

              Equations
              Instances For
                @[simp]
                theorem CompHausLike.isoOfHomeo_inv_apply {P : TopCatProp} {X : CompHausLike P} {Y : CompHausLike P} (f : X.toTop ≃ₜ Y.toTop) (a : ((CompHausLike.compHausLikeToTop P).obj Y)) :
                (CompHausLike.isoOfHomeo f).inv a = f.symm a
                @[simp]
                theorem CompHausLike.isoOfHomeo_hom_apply {P : TopCatProp} {X : CompHausLike P} {Y : CompHausLike P} (f : X.toTop ≃ₜ Y.toTop) (a : ((CompHausLike.compHausLikeToTop P).obj X)) :
                def CompHausLike.homeoOfIso {P : TopCatProp} {X : CompHausLike P} {Y : CompHausLike P} (f : X Y) :
                X.toTop ≃ₜ Y.toTop

                Construct a homeomorphism from an isomorphism.

                Equations
                Instances For
                  @[simp]
                  theorem CompHausLike.homeoOfIso_apply {P : TopCatProp} {X : CompHausLike P} {Y : CompHausLike P} (f : X Y) (a : X.toTop) :
                  @[simp]
                  theorem CompHausLike.homeoOfIso_symm_apply {P : TopCatProp} {X : CompHausLike P} {Y : CompHausLike P} (f : X Y) (a : Y.toTop) :
                  (CompHausLike.homeoOfIso f).symm a = f.inv a
                  def CompHausLike.isoEquivHomeo {P : TopCatProp} {X : CompHausLike P} {Y : CompHausLike P} :
                  (X Y) (X.toTop ≃ₜ Y.toTop)

                  The equivalence between isomorphisms in CompHaus and homeomorphisms of topological spaces.

                  Equations
                  • CompHausLike.isoEquivHomeo = { toFun := CompHausLike.homeoOfIso, invFun := CompHausLike.isoOfHomeo, left_inv := , right_inv := }
                  Instances For
                    @[simp]
                    theorem CompHausLike.isoEquivHomeo_apply {P : TopCatProp} {X : CompHausLike P} {Y : CompHausLike P} (f : X Y) :
                    CompHausLike.isoEquivHomeo f = CompHausLike.homeoOfIso f
                    @[simp]
                    theorem CompHausLike.isoEquivHomeo_symm_apply {P : TopCatProp} {X : CompHausLike P} {Y : CompHausLike P} (f : X.toTop ≃ₜ Y.toTop) :
                    CompHausLike.isoEquivHomeo.symm f = CompHausLike.isoOfHomeo f
                    def CompHausLike.const {P : TopCatProp} (T : CompHausLike P) {S : CompHausLike P} (s : S.toTop) :
                    T S

                    A constant map as a morphism in CompHausLike

                    Equations
                    Instances For
                      theorem CompHausLike.const_comp {P : TopCatProp} {S : CompHausLike P} {T : CompHausLike P} {U : CompHausLike P} (s : S.toTop) (g : S U) :
                      CategoryTheory.CategoryStruct.comp (T.const s) g = T.const (g s)