Documentation

Mathlib.Topology.Sheaves.Stalks

Stalks #

For a presheaf F on a topological space X, valued in some category C, the stalk of F at the point x : X is defined as the colimit of the composition of the inclusion of categories (OpenNhds x)ᵒᵖ ⥤ (Opens X)ᵒᵖ and the functor F : (Opens X)ᵒᵖ ⥤ C. For an open neighborhood U of x, we define the map F.germ x : F.obj (op U) ⟶ F.stalk x as the canonical morphism into this colimit.

Taking stalks is functorial: For every point x : X we define a functor stalkFunctor C x, sending presheaves on X to objects of C. Furthermore, for a map f : X ⟶ Y between topological spaces, we define stalkPushforward as the induced map on the stalks (f _* ℱ).stalk (f x) ⟶ ℱ.stalk x.

Some lemmas about stalks and germs only hold for certain classes of concrete categories. A basic property of forgetful functors of categories of algebraic structures (like MonCat, CommRingCat,...) is that they preserve filtered colimits. Since stalks are filtered colimits, this ensures that the stalks of presheaves valued in these categories behave exactly as for Type-valued presheaves. For example, in germ_exist we prove that in such a category, every element of the stalk is the germ of a section.

Furthermore, if we require the forgetful functor to reflect isomorphisms and preserve limits (as is the case for most algebraic structures), we have access to the unique gluing API and can prove further properties. Most notably, in is_iso_iff_stalk_functor_map_iso, we prove that in such a category, a morphism of sheaves is an isomorphism if and only if all of its stalk maps are isomorphisms.

See also the definition of "algebraic structures" in the stacks project: https://stacks.math.columbia.edu/tag/007L

Stalks are functorial with respect to morphisms of presheaves over a fixed X.

Equations
    Instances For

      The stalk of a presheaf F at a point x is calculated as the colimit of the functor nbhds x ⥤ opens F.X ⥤ C

      Equations
        Instances For

          The germ of a section of a presheaf over an open at a point of that open.

          Equations
            Instances For

              The germ of a global section of a presheaf at a point.

              Equations
                Instances For
                  theorem TopCat.Presheaf.germ_res {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} (F : Presheaf C X) {U V : TopologicalSpace.Opens X} (i : U V) (x : X) (hx : x U) :
                  CategoryTheory.CategoryStruct.comp (F.map i.op) (F.germ U x hx) = F.germ V x
                  @[simp]

                  A variant of germ_res with op V ⟶ op U so that the LHS is more general and simp fires more easier.

                  theorem TopCat.Presheaf.germ_res_apply {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} {FC : CCType u_1} {CC : CType u_2} [(X Y : C) → FunLike (FC X Y) (CC X) (CC Y)] (F : Presheaf C X) {U V : TopologicalSpace.Opens X} (i : U V) (x : X) (hx : x U) [CategoryTheory.ConcreteCategory C FC] (s : CC (F.obj (Opposite.op V))) :
                  theorem TopCat.Presheaf.germ_res_apply' {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} {FC : CCType u_1} {CC : CType u_2} [(X Y : C) → FunLike (FC X Y) (CC X) (CC Y)] (F : Presheaf C X) {U V : TopologicalSpace.Opens X} (i : Opposite.op V Opposite.op U) (x : X) (hx : x U) [CategoryTheory.ConcreteCategory C FC] (s : CC (F.obj (Opposite.op V))) :
                  theorem TopCat.Presheaf.Γgerm_res_apply {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} {FC : CCType u_1} {CC : CType u_2} [(X Y : C) → FunLike (FC X Y) (CC X) (CC Y)] (F : Presheaf C X) {U : TopologicalSpace.Opens X} {i : U } (x : X) (hx : x U) [CategoryTheory.ConcreteCategory C FC] (s : CC (F.obj (Opposite.op ))) :
                  theorem TopCat.Presheaf.stalk_hom_ext {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} (F : Presheaf C X) {x : X} {Y : C} {f₁ f₂ : F.stalk x Y} (ih : ∀ (U : TopologicalSpace.Opens X) (hxU : x U), CategoryTheory.CategoryStruct.comp (F.germ U x hxU) f₁ = CategoryTheory.CategoryStruct.comp (F.germ U x hxU) f₂) :
                  f₁ = f₂

                  A morphism from the stalk of F at x to some object Y is completely determined by its composition with the germ morphisms.

                  theorem TopCat.Presheaf.stalk_hom_ext_iff {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} {F : Presheaf C X} {x : X} {Y : C} {f₁ f₂ : F.stalk x Y} :
                  f₁ = f₂ ∀ (U : TopologicalSpace.Opens X) (hxU : x U), CategoryTheory.CategoryStruct.comp (F.germ U x hxU) f₁ = CategoryTheory.CategoryStruct.comp (F.germ U x hxU) f₂
                  theorem TopCat.Presheaf.stalkFunctor_map_germ_apply {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} {FC : CCType u_1} {CC : CType u_2} [(X Y : C) → FunLike (FC X Y) (CC X) (CC Y)] [CategoryTheory.ConcreteCategory C FC] {F G : Presheaf C X} (U : TopologicalSpace.Opens X) (x : X) (hx : x U) (f : F G) (s : CC (F.obj (Opposite.op U))) :
                  @[simp]
                  theorem TopCat.Presheaf.stalkFunctor_map_germ_apply' {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} {FC : CCType u_1} {CC : CType u_2} [(X Y : C) → FunLike (FC X Y) (CC X) (CC Y)] [CategoryTheory.ConcreteCategory C FC] {F G : Presheaf C X} (U : TopologicalSpace.Opens X) (x : X) (hx : x U) (f : F G) (s : CC (F.obj (Opposite.op U))) :

                  For a presheaf F on a space X, a continuous map f : X ⟶ Y induces a morphisms between the stalk of f _ * F at f x and the stalk of F at x.

                  Equations
                    Instances For
                      @[simp]
                      theorem TopCat.Presheaf.stalkPushforward_germ_apply (C : Type u) [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X Y : TopCat} (f : X Y) (F : Presheaf C X) (U : TopologicalSpace.Opens Y) (x : X) (hx : (CategoryTheory.ConcreteCategory.hom f) x U) {F✝ : CCType uF} {carrier : CType w} {instFunLike : (X Y : C) → FunLike (F✝ X Y) (carrier X) (carrier Y)} [inst : CategoryTheory.ConcreteCategory C F✝] (x✝ : CategoryTheory.ToType (((pushforward C f).obj F).obj (Opposite.op U))) :

                      The morphism ℱ_{f x} ⟶ (f⁻¹ℱ)ₓ that factors through (f_*f⁻¹ℱ)_{f x}.

                      Equations
                        Instances For

                          The morphism (f⁻¹ℱ)(U) ⟶ ℱ_{f(x)} for some U ∋ x.

                          Equations
                            Instances For

                              The morphism (f⁻¹ℱ)ₓ ⟶ ℱ_{f(x)}.

                              Equations
                                Instances For

                                  The isomorphism ℱ_{f(x)} ≅ (f⁻¹ℱ)ₓ.

                                  Equations
                                    Instances For
                                      noncomputable def TopCat.Presheaf.stalkSpecializes {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} (F : Presheaf C X) {x y : X} (h : x y) :
                                      F.stalk y F.stalk x

                                      If x specializes to y, then there is a natural map F.stalk y ⟶ F.stalk x.

                                      Equations
                                        Instances For
                                          @[simp]
                                          theorem TopCat.Presheaf.germ_stalkSpecializes_apply {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} (F : Presheaf C X) {U : TopologicalSpace.Opens X} {y : X} (hy : y U) {x : X} (h : x y) {F✝ : CCType uF} {carrier : CType w} {instFunLike : (X Y : C) → FunLike (F✝ X Y) (carrier X) (carrier Y)} [inst : CategoryTheory.ConcreteCategory C F✝] (x✝ : CategoryTheory.ToType (F.obj (Opposite.op U))) :
                                          @[simp]
                                          theorem TopCat.Presheaf.stalkSpecializes_comp_apply {C : Type u_3} [CategoryTheory.Category.{u_4, u_3} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} (F : Presheaf C X) {x y z : X} (h : x y) (h' : y z) {F✝ : CCType uF} {carrier : CType w} {instFunLike : (X Y : C) → FunLike (F✝ X Y) (carrier X) (carrier Y)} [inst : CategoryTheory.ConcreteCategory C F✝] (x✝ : CategoryTheory.ToType (F.stalk z)) :
                                          @[simp]
                                          theorem TopCat.Presheaf.stalkSpecializes_stalkFunctor_map_apply {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} {F G : Presheaf C X} (f : F G) {x y : X} (h : x y) {F✝ : CCType uF} {carrier : CType w} {instFunLike : (X Y : C) → FunLike (F✝ X Y) (carrier X) (carrier Y)} [inst : CategoryTheory.ConcreteCategory C F✝] (x✝ : CategoryTheory.ToType (F.stalk y)) :
                                          @[simp]
                                          theorem TopCat.Presheaf.stalkSpecializes_stalkPushforward_apply {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X Y : TopCat} (f : X Y) (F : Presheaf C X) {x y : X} (h : x y) {F✝ : CCType uF} {carrier : CType w} {instFunLike : (X Y : C) → FunLike (F✝ X Y) (carrier X) (carrier Y)} [inst : CategoryTheory.ConcreteCategory C F✝] (x✝ : CategoryTheory.ToType (((pushforward C f).obj F).stalk ((Hom.hom f) y))) :

                                          The stalks are isomorphic on inseparable points

                                          Equations
                                            Instances For
                                              theorem TopCat.Presheaf.germ_ext {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} {FC : CCType u_1} {CC : CType v} [(X Y : C) → FunLike (FC X Y) (CC X) (CC Y)] [instCC : CategoryTheory.ConcreteCategory C FC] (F : Presheaf C X) {U V : TopologicalSpace.Opens X} {x : X} {hxU : x U} {hxV : x V} (W : TopologicalSpace.Opens X) (hxW : x W) (iWU : W U) (iWV : W V) {sU : CategoryTheory.ToType (F.obj (Opposite.op U))} {sV : CategoryTheory.ToType (F.obj (Opposite.op V))} (ih : (CategoryTheory.ConcreteCategory.hom (F.map iWU.op)) sU = (CategoryTheory.ConcreteCategory.hom (F.map iWV.op)) sV) :
                                              theorem TopCat.Presheaf.germ_exist {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} {FC : CCType u_1} {CC : CType v} [(X Y : C) → FunLike (FC X Y) (CC X) (CC Y)] [instCC : CategoryTheory.ConcreteCategory C FC] [CategoryTheory.Limits.PreservesFilteredColimits (CategoryTheory.forget C)] (F : Presheaf C X) (x : X) (t : CategoryTheory.ToType (F.stalk x)) :

                                              For presheaves valued in a concrete category whose forgetful functor preserves filtered colimits, every element of the stalk is the germ of a section.

                                              theorem TopCat.Presheaf.germ_eq {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimits C] {X : TopCat} {FC : CCType u_1} {CC : CType v} [(X Y : C) → FunLike (FC X Y) (CC X) (CC Y)] [instCC : CategoryTheory.ConcreteCategory C FC] [CategoryTheory.Limits.PreservesFilteredColimits (CategoryTheory.forget C)] (F : Presheaf C X) {U V : TopologicalSpace.Opens X} (x : X) (mU : x U) (mV : x V) (s : CategoryTheory.ToType (F.obj (Opposite.op U))) (t : CategoryTheory.ToType (F.obj (Opposite.op V))) (h : (CategoryTheory.ConcreteCategory.hom (F.germ U x mU)) s = (CategoryTheory.ConcreteCategory.hom (F.germ V x mV)) t) :
                                              ∃ (W : TopologicalSpace.Opens X) (_ : x W) (iU : W U) (iV : W V), (CategoryTheory.ConcreteCategory.hom (F.map iU.op)) s = (CategoryTheory.ConcreteCategory.hom (F.map iV.op)) t

                                              Let F be a sheaf valued in a concrete category, whose forgetful functor reflects isomorphisms, preserves limits and filtered colimits. Then two sections who agree on every stalk must be equal.

                                              For surjectivity, we are given an arbitrary section t and need to find a preimage for it. We claim that it suffices to find preimages locally. That is, for each x : U we construct a neighborhood V ≤ U and a section s : F.obj (op V)) such that f.app (op V) s and t agree on V.

                                              Let F and G be sheaves valued in a concrete category, whose forgetful functor reflects isomorphisms, preserves limits and filtered colimits. Then if the stalk maps of a morphism f : F ⟶ G are all isomorphisms, f must be an isomorphism.

                                              Let F and G be sheaves valued in a concrete category, whose forgetful functor reflects isomorphisms, preserves limits and filtered colimits. Then a morphism f : F ⟶ G is an isomorphism if and only if all of its stalk maps are isomorphisms.