Stalks #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
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
(nhds 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 stalk_functor C x
,
sending presheaves on X
to objects of C
. Furthermore, for a map f : X ⟶ Y
between
topological spaces, we define stalk_pushforward
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 Mon
, CommRing
,...)
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 Top.presheaf.stalk_functor
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
- ℱ.stalk x = (Top.presheaf.stalk_functor C x).obj ℱ
Instances for ↥Top.presheaf.stalk
- Top.presheaf.stalk.algebra
- algebraic_geometry.LocallyRingedSpace.local_ring
- algebraic_geometry.LocallyRingedSpace.stalk.local_ring
- algebraic_geometry.structure_sheaf.stalk_algebra
- algebraic_geometry.structure_sheaf.is_localization.to_stalk
- algebraic_geometry.structure_sheaf.stalk.algebra
- algebraic_geometry.stalk_is_reduced_of_reduced
- algebraic_geometry.Scheme.function_field.algebra
- algebraic_geometry.Scheme.function_field.field
- algebraic_geometry.stalk_function_field_algebra
- algebraic_geometry.function_field_is_scalar_tower
- algebraic_geometry.function_field.algebra
- algebraic_geometry.function_field_is_fraction_ring_of_affine
- algebraic_geometry.Scheme.function_field.is_fraction_ring
The germ of a section of a presheaf over an open at a point of that open.
Equations
- F.germ x = category_theory.limits.colimit.ι ((topological_space.open_nhds.inclusion x.val).op ⋙ F) (opposite.op {obj := U, property := _})
A morphism from the stalk of F
at x
to some object Y
is completely determined by its
composition with the germ
morphisms.
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
- Top.presheaf.stalk_pushforward C f F x = category_theory.limits.colim.map (category_theory.whisker_right (category_theory.nat_trans.op (topological_space.open_nhds.inclusion_map_iso f x).inv) F) ≫ category_theory.limits.colimit.pre (((category_theory.whiskering_left (topological_space.open_nhds x)ᵒᵖ (topological_space.opens ↥X)ᵒᵖ C).obj (topological_space.open_nhds.inclusion x).op).obj F) (topological_space.open_nhds.map f x).op
The morphism ℱ_{f x} ⟶ (f⁻¹ℱ)ₓ
that factors through (f_*f⁻¹ℱ)_{f x}
.
Equations
- Top.presheaf.stalk_pullback_hom C f F x = (Top.presheaf.stalk_functor C (⇑f x)).map ((Top.presheaf.pushforward_pullback_adjunction C f).unit.app F) ≫ Top.presheaf.stalk_pushforward C f ((Top.presheaf.pullback C f).obj F) x
The morphism (f⁻¹ℱ)(U) ⟶ ℱ_{f(x)}
for some U ∋ x
.
Equations
- Top.presheaf.germ_to_pullback_stalk C f F U x = category_theory.limits.colimit.desc (category_theory.Lan.diagram (topological_space.opens.map f).op F (opposite.op U)) {X := F.stalk (⇑f ↑x), ι := {app := λ (V : category_theory.costructured_arrow (topological_space.opens.map f).op (opposite.op U)), F.germ ⟨⇑f ↑x, _⟩, naturality' := _}}
The morphism (f⁻¹ℱ)ₓ ⟶ ℱ_{f(x)}
.
Equations
- Top.presheaf.stalk_pullback_inv C f F x = category_theory.limits.colimit.desc ((topological_space.open_nhds.inclusion x).op ⋙ Top.presheaf.pullback_obj f F) {X := F.stalk (⇑f x), ι := {app := λ (U : (topological_space.open_nhds x)ᵒᵖ), Top.presheaf.germ_to_pullback_stalk C f F (opposite.unop U).obj ⟨x, _⟩, naturality' := _}}
The isomorphism ℱ_{f(x)} ≅ (f⁻¹ℱ)ₓ
.
Equations
- Top.presheaf.stalk_pullback_iso C f F x = {hom := Top.presheaf.stalk_pullback_hom C f F x, inv := Top.presheaf.stalk_pullback_inv C f F x, hom_inv_id' := _, inv_hom_id' := _}
If x
specializes to y
, then there is a natural map F.stalk y ⟶ F.stalk x
.
Equations
- F.stalk_specializes h = category_theory.limits.colimit.desc (((category_theory.whiskering_left (topological_space.open_nhds y)ᵒᵖ (topological_space.opens ↥X)ᵒᵖ C).obj (topological_space.open_nhds.inclusion y).op).obj F) {X := (λ (X_1 : Top.presheaf C X), category_theory.limits.colim.obj (((category_theory.whiskering_left (topological_space.open_nhds x)ᵒᵖ (topological_space.opens ↥X)ᵒᵖ C).obj (topological_space.open_nhds.inclusion x).op).obj X_1)) F, ι := {app := λ (U : (topological_space.open_nhds y)ᵒᵖ), category_theory.limits.colimit.ι ((topological_space.open_nhds.inclusion x).op ⋙ F) (opposite.op {obj := (opposite.unop U).obj, property := _}), naturality' := _}}
The stalks are isomorphic on inseparable points
Equations
- F.stalk_congr e = {hom := F.stalk_specializes _, inv := F.stalk_specializes _, hom_inv_id' := _, inv_hom_id' := _}
For presheaves valued in a concrete category whose forgetful functor preserves filtered colimits, every element of the stalk is the germ of a section.
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.
Equations
- Top.presheaf.stalk.algebra F x = ring_hom.to_algebra (F.germ x)