Sheaves taking values in a category #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
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ᵒᵖ ⥤ A
is 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
C
is small, has pullbacks andA
has 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
A
has limits and there is a functors : A ⥤ Type
which is faithful, reflects isomorphisms and preserves limits, thenP : Cᵒᵖ ⥤ A
is a sheaf iff the underlying presheaf of typesP ⋙ s : Cᵒᵖ ⥤ Type
is 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 P
s 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 x
s 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.preadditive
- 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.Sheaf.limits.has_finite_products
- category_theory.Sheaf_is_abelian
- 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
Equations
- category_theory.quiver.hom.add_comm_group = function.injective.add_comm_group (λ (f : P.hom Q), f.val) category_theory.quiver.hom.add_comm_group._proof_1 category_theory.quiver.hom.add_comm_group._proof_2 category_theory.quiver.hom.add_comm_group._proof_3 category_theory.quiver.hom.add_comm_group._proof_4 category_theory.quiver.hom.add_comm_group._proof_5 category_theory.quiver.hom.add_comm_group._proof_6 category_theory.quiver.hom.add_comm_group._proof_7
Equations
- category_theory.Sheaf.preadditive = {hom_group := λ (P Q : category_theory.Sheaf J A), infer_instance, add_comp' := _, comp_add' := _}
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.
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
(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.