Skyscraper (pre)sheaves #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
A skyscraper (pre)sheaf 𝓕 : (pre)sheaf C X is the (pre)sheaf with value A at point p₀ that is
supported only at open sets contain p₀, i.e. 𝓕(U) = A if p₀ ∈ U and 𝓕(U) = * if p₀ ∉ U
where * is a terminal object of C. In terms of stalks, 𝓕 is supported at all specializations
of p₀, i.e. if p₀ ⤳ x then 𝓕ₓ ≅ A and if ¬ p₀ ⤳ x then 𝓕ₓ ≅ *.
Main definitions #
skyscraper_presheaf:skyscraper_presheaf p₀ Ais the skyscraper presheaf at pointp₀with valueA.skyscraper_sheaf: the skyscraper presheaf satisfies the sheaf condition.
Main statements #
skyscraper_presheaf_stalk_of_specializes: ify ∈ closure {p₀}then the stalk ofskyscraper_presheaf p₀ AatyisA.skyscraper_presheaf_stalk_of_not_specializes: ify ∉ closure {p₀}then the stalk ofskyscraper_presheaf p₀ Aatyis*the terminal object.
TODO: generalize universe level when calculating stalks, after generalizing universe level of stalk.
A skyscraper presheaf is a presheaf supported at a single point: if p₀ ∈ X is a specified
point, then the skyscraper presheaf 𝓕 with value A is defined by U ↦ A if p₀ ∈ U and
U ↦ * if p₀ ∉ A where * is some terminal object.
Equations
- skyscraper_presheaf p₀ A = {obj := λ (U : (topological_space.opens ↥X)ᵒᵖ), ite (p₀ ∈ opposite.unop U) A (⊤_ C), map := λ (U V : (topological_space.opens ↥X)ᵒᵖ) (i : U ⟶ V), dite (p₀ ∈ opposite.unop V) (λ (h : p₀ ∈ opposite.unop V), category_theory.eq_to_hom _) (λ (h : p₀ ∉ opposite.unop V), (eq.rec category_theory.limits.terminal_is_terminal _).from (ite (p₀ ∈ opposite.unop U) A (⊤_ C))), map_id' := _, map_comp' := _}
Taking skyscraper presheaf at a point is functorial: c ↦ skyscraper p₀ c defines a functor by
sending every f : a ⟶ b to the natural transformation α defined as: α(U) = f : a ⟶ b if
p₀ ∈ U and the unique morphism to a terminal object in C if p₀ ∉ U.
Equations
- skyscraper_presheaf_functor.map' p₀ f = {app := λ (U : (topological_space.opens ↥X)ᵒᵖ), dite (p₀ ∈ opposite.unop U) (λ (h : p₀ ∈ opposite.unop U), category_theory.eq_to_hom _ ≫ f ≫ category_theory.eq_to_hom _) (λ (h : p₀ ∉ opposite.unop U), (eq.rec category_theory.limits.terminal_is_terminal _).from ((skyscraper_presheaf p₀ a).obj U)), naturality' := _}
Taking skyscraper presheaf at a point is functorial: c ↦ skyscraper p₀ c defines a functor by
sending every f : a ⟶ b to the natural transformation α defined as: α(U) = f : a ⟶ b if
p₀ ∈ U and the unique morphism to a terminal object in C if p₀ ∉ U.
Equations
- skyscraper_presheaf_functor p₀ = {obj := skyscraper_presheaf p₀ _inst_3, map := λ (_x _x_1 : C), skyscraper_presheaf_functor.map' p₀, map_id' := _, map_comp' := _}
Instances for skyscraper_presheaf_functor
The cocone at A for the stalk functor of skyscraper_presheaf p₀ A when y ∈ closure {p₀}
Equations
- skyscraper_presheaf_cocone_of_specializes p₀ A h = {X := A, ι := {app := λ (U : (topological_space.open_nhds y)ᵒᵖ), category_theory.eq_to_hom _, naturality' := _}}
The cocone at A for the stalk functor of skyscraper_presheaf p₀ A when y ∈ closure {p₀} is a
colimit
Equations
- skyscraper_presheaf_cocone_is_colimit_of_specializes p₀ A h = {desc := λ (c : category_theory.limits.cocone ((topological_space.open_nhds.inclusion y).op ⋙ skyscraper_presheaf p₀ A)), category_theory.eq_to_hom _ ≫ c.ι.app (opposite.op ⊤), fac' := _, uniq' := _}
If y ∈ closure {p₀}, then the stalk of skyscraper_presheaf p₀ A at y is A.
The cocone at * for the stalk functor of skyscraper_presheaf p₀ A when y ∉ closure {p₀}
Equations
- skyscraper_presheaf_cocone p₀ A y = {X := ⊤_ C, ι := {app := λ (U : (topological_space.open_nhds y)ᵒᵖ), category_theory.limits.terminal.from (((topological_space.open_nhds.inclusion y).op ⋙ skyscraper_presheaf p₀ A).obj U), naturality' := _}}
The cocone at * for the stalk functor of skyscraper_presheaf p₀ A when y ∉ closure {p₀} is a
colimit
Equations
- skyscraper_presheaf_cocone_is_colimit_of_not_specializes p₀ A h = let h1 : ∃ (U : topological_space.open_nhds y), p₀ ∉ U.obj := _ in {desc := λ (c : category_theory.limits.cocone ((topological_space.open_nhds.inclusion y).op ⋙ skyscraper_presheaf p₀ A)), category_theory.eq_to_hom _ ≫ c.ι.app (opposite.op h1.some), fac' := _, uniq' := _}
If y ∉ closure {p₀}, then the stalk of skyscraper_presheaf p₀ A at y is isomorphic to a
terminal object.
If y ∉ closure {p₀}, then the stalk of skyscraper_presheaf p₀ A at y is a terminal object
The skyscraper presheaf supported at p₀ with value A is the sheaf that assigns A to all opens
U that contain p₀ and assigns * otherwise.
Equations
- skyscraper_sheaf p₀ A = {val := skyscraper_presheaf p₀ A, cond := _}
Taking skyscraper sheaf at a point is functorial: c ↦ skyscraper p₀ c defines a functor by
sending every f : a ⟶ b to the natural transformation α defined as: α(U) = f : a ⟶ b if
p₀ ∈ U and the unique morphism to a terminal object in C if p₀ ∉ U.
Equations
- skyscraper_sheaf_functor p₀ = {obj := λ (c : C), skyscraper_sheaf p₀ c, map := λ (a b : C) (f : a ⟶ b), {val := (skyscraper_presheaf_functor p₀).map f}, map_id' := _, map_comp' := _}
Instances for skyscraper_sheaf_functor
If f : 𝓕.stalk p₀ ⟶ c, then a natural transformation 𝓕 ⟶ skyscraper_presheaf p₀ c can be
defined by: 𝓕.germ p₀ ≫ f : 𝓕(U) ⟶ c if p₀ ∈ U and the unique morphism to a terminal object
if p₀ ∉ U.
Equations
- stalk_skyscraper_presheaf_adjunction_auxs.to_skyscraper_presheaf p₀ f = {app := λ (U : (topological_space.opens ↥X)ᵒᵖ), dite (p₀ ∈ opposite.unop U) (λ (h : p₀ ∈ opposite.unop U), 𝓕.germ ⟨p₀, h⟩ ≫ f ≫ category_theory.eq_to_hom _) (λ (h : p₀ ∉ opposite.unop U), (eq.rec category_theory.limits.terminal_is_terminal _).from (𝓕.obj U)), naturality' := _}
If f : 𝓕 ⟶ skyscraper_presheaf p₀ c is a natural transformation, then there is a morphism
𝓕.stalk p₀ ⟶ c defined as the morphism from colimit to cocone at c.
Equations
- stalk_skyscraper_presheaf_adjunction_auxs.from_stalk p₀ f = let χ : category_theory.limits.cocone ((topological_space.open_nhds.inclusion p₀).op ⋙ 𝓕) := {X := c, ι := {app := λ (U : (topological_space.open_nhds p₀)ᵒᵖ), f.app (opposite.op (opposite.unop U).obj) ≫ category_theory.eq_to_hom _, naturality' := _}} in category_theory.limits.colimit.desc ((topological_space.open_nhds.inclusion p₀).op ⋙ 𝓕) χ
The unit in presheaf.stalk ⊣ skyscraper_presheaf_functor
Equations
- stalk_skyscraper_presheaf_adjunction_auxs.unit p₀ = {app := λ (𝓕 : Top.presheaf C X), stalk_skyscraper_presheaf_adjunction_auxs.to_skyscraper_presheaf p₀ (𝟙 (((𝟭 (Top.presheaf C X)).obj 𝓕).stalk p₀)), naturality' := _}
The counit in presheaf.stalk ⊣ skyscraper_presheaf_functor
Equations
- stalk_skyscraper_presheaf_adjunction_auxs.counit p₀ = {app := λ (c : C), (skyscraper_presheaf_stalk_of_specializes p₀ c _).hom, naturality' := _}
skyscraper_presheaf_functor is the right adjoint of presheaf.stalk_functor
Equations
- skyscraper_presheaf_stalk_adjunction p₀ = {hom_equiv := λ (c : Top.presheaf C X) (𝓕 : C), {to_fun := stalk_skyscraper_presheaf_adjunction_auxs.to_skyscraper_presheaf p₀ 𝓕, inv_fun := stalk_skyscraper_presheaf_adjunction_auxs.from_stalk p₀ 𝓕, left_inv := _, right_inv := _}, unit := stalk_skyscraper_presheaf_adjunction_auxs.unit p₀ _inst_4, counit := stalk_skyscraper_presheaf_adjunction_auxs.counit p₀ _inst_4, hom_equiv_unit' := _, hom_equiv_counit' := _}
Equations
Equations
- Top.presheaf.stalk_functor.category_theory.is_left_adjoint p₀ = {right := skyscraper_presheaf_functor p₀ _inst_3, adj := skyscraper_presheaf_stalk_adjunction p₀ _inst_4}
Taking stalks of a sheaf is the left adjoint functor to skyscraper_sheaf_functor
Equations
- stalk_skyscraper_sheaf_adjunction p₀ = {hom_equiv := λ (𝓕 : Top.sheaf C X) (c : C), {to_fun := λ (f : (Top.sheaf.forget C X ⋙ Top.presheaf.stalk_functor C p₀).obj 𝓕 ⟶ c), {val := stalk_skyscraper_presheaf_adjunction_auxs.to_skyscraper_presheaf p₀ f}, inv_fun := λ (g : 𝓕 ⟶ (skyscraper_sheaf_functor p₀).obj c), stalk_skyscraper_presheaf_adjunction_auxs.from_stalk p₀ g.val, left_inv := _, right_inv := _}, unit := {app := λ (𝓕 : Top.sheaf C X), {val := (stalk_skyscraper_presheaf_adjunction_auxs.unit p₀).app 𝓕.val}, naturality' := _}, counit := stalk_skyscraper_presheaf_adjunction_auxs.counit p₀ _inst_4, hom_equiv_unit' := _, hom_equiv_counit' := _}
Equations
- skyscraper_sheaf_functor.category_theory.is_right_adjoint p₀ = {left := Top.sheaf.forget C X ⋙ Top.presheaf.stalk_functor C p₀, adj := stalk_skyscraper_sheaf_adjunction p₀ _inst_4}