Sheaves taking values in a category #
If C is a category with a Grothendieck topology, we define the notion of a sheaf taking values in
an arbitrary category A. We follow the definition in https://stacks.math.columbia.edu/tag/00VR,
noting that the presheaf of sets "defined above" can be seen in the comments between tags 00VQ and
00VR on the page https://stacks.math.columbia.edu/tag/00VL. The advantage of this definition is
that we need no assumptions whatsoever on A other than the assumption that the morphisms in C
and A live in the same universe.
- An
A-valued presheafP : Cᵒᵖ ⥤ Ais defined to be a sheaf (for the topologyJ) iff for everyE : A, the type-valued presheaves of sets given by sendingU : CᵒᵖtoHom_{A}(E, P U)are all sheaves of sets, seecategory_theory.presheaf.is_sheaf. - When
A = Type, this recovers the basic definition of sheaves of sets, seecategory_theory.is_sheaf_iff_is_sheaf_of_type. - An alternate definition when
Cis small, has pullbacks andAhas products is given by an equalizer conditioncategory_theory.presheaf.is_sheaf'. This is equivalent to the earlier definition, shown incategory_theory.presheaf.is_sheaf_iff_is_sheaf'. - When
A = Type, this is definitionally equal to the equalizer condition for presieves incategory_theory.sites.sheaf_of_types. - When
Ahas limits and there is a functors : A ⥤ Typewhich is faithful, reflects isomorphisms and preserves limits, thenP : Cᵒᵖ ⥤ Ais a sheaf iff the underlying presheaf of typesP ⋙ s : Cᵒᵖ ⥤ Typeis a sheaf (category_theory.presheaf.is_sheaf_iff_is_sheaf_forget). Cf https://stacks.math.columbia.edu/tag/0073, which is a weaker version of this statement (it's only over spaces, not sites) and https://stacks.math.columbia.edu/tag/00YR (a), which additionally assumes filtered colimits.
A sheaf of A is a presheaf P : Cᵒᵖ => A such that for every E : A, the presheaf of types given by sending U : C to Hom_{A}(E, P U) is a sheaf of types.
https://stacks.math.columbia.edu/tag/00VR
Equations
- category_theory.presheaf.is_sheaf J P = ∀ (E : A), category_theory.presieve.is_sheaf J (P ⋙ category_theory.coyoneda.obj (opposite.op E))
Given a sieve S on X : C, a presheaf P : Cᵒᵖ ⥤ A, and an object E of A,
the cones over the natural diagram S.arrows.diagram.op ⋙ P associated to S and P
with cone point E are in 1-1 correspondence with sieve_compatible family of elements
for the sieve S and the presheaf of types Hom (E, P -).
Equations
- category_theory.presheaf.cones_equiv_sieve_compatible_family P S E = {to_fun := λ (π : (S.arrows.diagram.op ⋙ P).cones.obj E), ⟨λ (Y : C) (f : Y ⟶ X) (h : ⇑S f), π.app (opposite.op {obj := category_theory.over.mk f, property := h}), _⟩, inv_fun := λ (x : {x // x.sieve_compatible}), {app := λ (f : (category_theory.full_subcategory (λ (f : category_theory.over X), S.arrows f.hom))ᵒᵖ), x.val (opposite.unop f).obj.hom _, naturality' := _}, left_inv := _, right_inv := _}
The cone corresponding to a sieve_compatible family of elements, dot notation enabled.
Equations
- hx.cone = {X := opposite.unop E, π := (category_theory.presheaf.cones_equiv_sieve_compatible_family P S E).inv_fun ⟨x, hx⟩}
Cone morphisms from the cone corresponding to a sieve_compatible family to the natural
cone associated to a sieve S and a presheaf P are in 1-1 correspondence with amalgamations
of the family.
Given sieve S and presheaf P : Cᵒᵖ ⥤ A, their natural associated cone is a limit cone
iff Hom (E, P -) is a sheaf of types for the sieve S and all E : A.
Given sieve S and presheaf P : Cᵒᵖ ⥤ A, their natural associated cone admits at most one
morphism from every cone in the same category (i.e. over the same diagram),
iff Hom (E, P -)is separated for the sieve S and all E : A.
A presheaf P is a sheaf for the Grothendieck topology J iff for every covering sieve
S of J, the natural cone associated to P and S is a limit cone.
A presheaf P is separated for the Grothendieck topology J iff for every covering sieve
S of J, the natural cone associated to P and S admits at most one morphism from every
cone in the same category.
Given presieve R and presheaf P : Cᵒᵖ ⥤ A, the natural cone associated to P and
the sieve sieve.generate R generated by R is a limit cone iff Hom (E, P -) is a
sheaf of types for the presieve R and all E : A.
A presheaf P is a sheaf for the Grothendieck topology generated by a pretopology K
iff for every covering presieve R of K, the natural cone associated to P and
sieve.generate R is a limit cone.
This is a wrapper around presieve.is_sheaf_for.amalgamate to be used below.
If Ps a sheaf, S is a cover of X, and x is a collection of morphisms from E
to P evaluated at terms in the cover which are compatible, then we can amalgamate
the xs to obtain a single morphism E ⟶ P.obj (op X).
Equations
- hP.amalgamate S x hx = _.amalgamate (λ (Y : C) (f : Y ⟶ X) (hf : ⇑↑S f), x {Y := Y, f := f, hf := hf}) _
- val : Cᵒᵖ ⥤ A
- cond : category_theory.presheaf.is_sheaf J self.val
The category of sheaves taking values in A on a grothendieck topology.
Instances for category_theory.Sheaf
- category_theory.Sheaf.has_sizeof_inst
- category_theory.Sheaf.category_theory.category
- category_theory.Sheaf.inhabited
- category_theory.Sheaf.category_theory.limits.has_limits_of_shape
- category_theory.Sheaf.category_theory.limits.has_limits
- category_theory.Sheaf.category_theory.limits.has_colimits_of_shape
- category_theory.Sheaf.category_theory.limits.has_colimits
- category_theory.grothendieck_topology.category_theory.Sheaf.category_theory.limits.has_images
Morphisms between sheaves are just morphisms of presheaves.
Instances for category_theory.Sheaf.hom
- category_theory.Sheaf.hom.has_sizeof_inst
- category_theory.Sheaf.hom.inhabited
Equations
- category_theory.Sheaf.category_theory.category = {to_category_struct := {to_quiver := {hom := category_theory.Sheaf.hom _inst_2}, id := λ (X : category_theory.Sheaf J A), {val := 𝟙 X.val}, comp := λ (X Y Z : category_theory.Sheaf J A) (f : X ⟶ Y) (g : Y ⟶ Z), {val := f.val ≫ g.val}}, id_comp' := _, comp_id' := _, assoc' := _}
Equations
The inclusion functor from sheaves to presheaves.
Equations
- category_theory.Sheaf_to_presheaf J A = {obj := category_theory.Sheaf.val _inst_2, map := λ (_x _x_1 : category_theory.Sheaf J A) (f : _x ⟶ _x_1), f.val, map_id' := _, map_comp' := _}
Instances for category_theory.Sheaf_to_presheaf
- category_theory.Sheaf_to_presheaf.full
- category_theory.Sheaf_to_presheaf.faithful
- category_theory.Sheaf_to_presheaf_is_right_adjoint
- category_theory.Sheaf.category_theory.Sheaf_to_presheaf.category_theory.creates_limit
- category_theory.Sheaf.category_theory.Sheaf_to_presheaf.category_theory.creates_limits_of_shape
- category_theory.Sheaf.category_theory.Sheaf_to_presheaf.category_theory.creates_limits
- category_theory.Sheaf_to_presheaf.creates_limits
Equations
- category_theory.Sheaf_to_presheaf.full J A = {preimage := λ (X Y : category_theory.Sheaf J A) (f : (category_theory.Sheaf_to_presheaf J A).obj X ⟶ (category_theory.Sheaf_to_presheaf J A).obj Y), {val := f}, witness' := _}
This is stated as a lemma to prevent class search from forming a loop since a sheaf morphism is monic if and only if it is monic as a presheaf morphism (under suitable assumption).
The sheaf of sections guaranteed by the sheaf condition.
Equations
- category_theory.sheaf_over ℱ E = {val := ℱ.val ⋙ category_theory.coyoneda.obj (opposite.op E), cond := _}
The category of sheaves taking values in Type is the same as the category of set-valued sheaves.
Equations
- category_theory.Sheaf_equiv_SheafOfTypes J = {functor := {obj := λ (S : category_theory.Sheaf J (Type w)), {val := S.val, cond := _}, map := λ (S T : category_theory.Sheaf J (Type w)) (f : S ⟶ T), {val := f.val}, map_id' := _, map_comp' := _}, inverse := {obj := λ (S : category_theory.SheafOfTypes J), {val := S.val, cond := _}, map := λ (S T : category_theory.SheafOfTypes J) (f : S ⟶ T), {val := f.val}, map_id' := _, map_comp' := _}, unit_iso := category_theory.nat_iso.of_components (λ (X : category_theory.Sheaf J (Type w)), {hom := {val := 𝟙 ((𝟭 (category_theory.Sheaf J (Type w))).obj X).val}, inv := {val := 𝟙 (({obj := λ (S : category_theory.Sheaf J (Type w)), {val := S.val, cond := _}, map := λ (S T : category_theory.Sheaf J (Type w)) (f : S ⟶ T), {val := f.val}, map_id' := _, map_comp' := _} ⋙ {obj := λ (S : category_theory.SheafOfTypes J), {val := S.val, cond := _}, map := λ (S T : category_theory.SheafOfTypes J) (f : S ⟶ T), {val := f.val}, map_id' := _, map_comp' := _}).obj X).val}, hom_inv_id' := _, inv_hom_id' := _}) _, counit_iso := category_theory.nat_iso.of_components (λ (X : category_theory.SheafOfTypes J), {hom := {val := 𝟙 (({obj := λ (S : category_theory.SheafOfTypes J), {val := S.val, cond := _}, map := λ (S T : category_theory.SheafOfTypes J) (f : S ⟶ T), {val := f.val}, map_id' := _, map_comp' := _} ⋙ {obj := λ (S : category_theory.Sheaf J (Type w)), {val := S.val, cond := _}, map := λ (S T : category_theory.Sheaf J (Type w)) (f : S ⟶ T), {val := f.val}, map_id' := _, map_comp' := _}).obj X).val}, inv := {val := 𝟙 ((𝟭 (category_theory.SheafOfTypes J)).obj X).val}, hom_inv_id' := _, inv_hom_id' := _}) _, functor_unit_iso_comp' := _}
If the empty sieve is a cover of X, then F(X) is terminal.
Equations
When P is a sheaf and S is a cover, the associated multifork is a limit.
Equations
- category_theory.presheaf.is_limit_of_is_sheaf J P S hP = {lift := λ (E : category_theory.limits.multifork (S.index P)), hP.amalgamate S (λ (I : S.arrow), E.ι I) _, fac' := _, uniq' := _}
The middle object of the fork diagram given in Equation (3) of [MM92], as well as the fork diagram of https://stacks.math.columbia.edu/tag/00VM.
Equations
- category_theory.presheaf.first_obj R P = ∏ λ (f : Σ (V : C), {f // R f}), P.obj (opposite.op f.fst)
The left morphism of the fork diagram given in Equation (3) of [MM92], as well as the fork diagram of https://stacks.math.columbia.edu/tag/00VM.
Equations
- category_theory.presheaf.fork_map R P = category_theory.limits.pi.lift (λ (f : Σ (V : C), {f // R f}), P.map f.snd.val.op)
The rightmost object of the fork diagram of https://stacks.math.columbia.edu/tag/00VM, which contains the data used to check a family of elements for a presieve is compatible.
Equations
- category_theory.presheaf.second_obj R P = ∏ λ (fg : (Σ (V : C), {f // R f}) × Σ (W : C), {g // R g}), P.obj (opposite.op (category_theory.limits.pullback fg.fst.snd.val fg.snd.snd.val))
The map pr₀* of https://stacks.math.columbia.edu/tag/00VM.
Equations
- category_theory.presheaf.first_map R P = category_theory.limits.pi.lift (λ (fg : (Σ (V : C), {f // R f}) × Σ (W : C), {g // R g}), category_theory.limits.pi.π (λ (f : Σ (V : C), {f // R f}), P.obj (opposite.op f.fst)) fg.fst ≫ P.map category_theory.limits.pullback.fst.op)
The map pr₁* of https://stacks.math.columbia.edu/tag/00VM.
Equations
- category_theory.presheaf.second_map R P = category_theory.limits.pi.lift (λ (fg : (Σ (V : C), {f // R f}) × Σ (W : C), {g // R g}), category_theory.limits.pi.π (λ (f : Σ (V : C), {f // R f}), P.obj (opposite.op f.fst)) fg.snd ≫ P.map category_theory.limits.pullback.snd.op)
An alternative definition of the sheaf condition in terms of equalizers. This is shown to be
equivalent in category_theory.presheaf.is_sheaf_iff_is_sheaf'.
Equations
- category_theory.presheaf.is_sheaf' J P = ∀ (U : C) (R : category_theory.presieve U), category_theory.sieve.generate R ∈ ⇑J U → nonempty (category_theory.limits.is_limit (category_theory.limits.fork.of_ι (category_theory.presheaf.fork_map R P) _))
(Implementation). An auxiliary lemma to convert between sheaf conditions.
Equations
- category_theory.presheaf.is_sheaf_for_is_sheaf_for' P s U R = (category_theory.limits.is_limit_map_cone_fork_equiv s _).trans ((category_theory.limits.is_limit.postcompose_hom_equiv (category_theory.nat_iso.of_components (λ (X : category_theory.limits.walking_parallel_pair), X.cases_on (category_theory.limits.preserves_product.iso s (λ (f : Σ (V : C), {f // R f}), P.obj (opposite.op f.fst))) (category_theory.limits.preserves_product.iso s (λ (fg : (Σ (V : C), {f // R f}) × Σ (W : C), {g // R g}), P.obj (opposite.op (category_theory.limits.pullback fg.fst.snd.val fg.snd.snd.val))))) _) (category_theory.limits.fork.of_ι (s.map (category_theory.presheaf.fork_map R P)) _)).symm.trans (category_theory.limits.is_limit.equiv_iso_limit (category_theory.limits.fork.ext (category_theory.iso.refl ((category_theory.limits.cones.postcompose (category_theory.nat_iso.of_components (λ (X : category_theory.limits.walking_parallel_pair), X.cases_on (category_theory.limits.preserves_product.iso s (λ (f : Σ (V : C), {f // R f}), P.obj (opposite.op f.fst))) (category_theory.limits.preserves_product.iso s (λ (fg : (Σ (V : C), {f // R f}) × Σ (W : C), {g // R g}), P.obj (opposite.op (category_theory.limits.pullback fg.fst.snd.val fg.snd.snd.val))))) _).hom).obj (category_theory.limits.fork.of_ι (s.map (category_theory.presheaf.fork_map R P)) _)).X) _)))
The equalizer definition of a sheaf given by is_sheaf' is equivalent to is_sheaf.
For a concrete category (A, s) where the forgetful functor s : A ⥤ Type v preserves limits and
reflects isomorphisms, and A has limits, an A-valued presheaf P : Cᵒᵖ ⥤ A is a sheaf iff its
underlying Type-valued presheaf P ⋙ s : Cᵒᵖ ⥤ Type is a sheaf.
Note this lemma applies for "algebraic" categories, eg groups, abelian groups and rings, but not for the category of topological spaces, topological rings, etc since reflecting isomorphisms doesn't hold.