# mathlib3documentation

topology.sheaves.sheaf

# Sheaves #

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

We define sheaves on a topological space, with values in an arbitrary category.

A presheaf on a topological space X is a sheaf presicely when it is a sheaf under the grothendieck topology on opens X, which expands out to say: For each open cover { Uᵢ } of U, and a family of compatible functions A ⟶ F(Uᵢ) for an A : X, there exists an unique gluing A ⟶ F(U) compatible with the restriction.

See the docstring of Top.presheaf.is_sheaf for an explanation on the design descisions and a list of equivalent conditions.

We provide the instance category (sheaf C X) as the full subcategory of presheaves, and the fully faithful functor sheaf.forget : sheaf C X ⥤ presheaf C X.

def Top.presheaf.is_sheaf {C : Type u} {X : Top} (F : X) :
Prop

The sheaf condition has several different equivalent formulations. The official definition chosen here is in terms of grothendieck topologies so that the results on sites could be applied here easily, and this condition does not require additional constraints on the value category. The equivalent formulations of the sheaf condition on presheaf C X are as follows :

1. Top.presheaf.is_sheaf: (the official definition) It is a sheaf with respect to the grothendieck topology on opens X, which is to say: For each open cover { Uᵢ } of U, and a family of compatible functions A ⟶ F(Uᵢ) for an A : X, there exists an unique gluing A ⟶ F(U) compatible with the restriction.

2. Top.presheaf.is_sheaf_equalizer_products: (requires C to have all products) For each open cover { Uᵢ } of U, F(U) ⟶ ∏ F(Uᵢ) is the equalizer of the two morphisms ∏ F(Uᵢ) ⟶ ∏ F(Uᵢ ∩ Uⱼ). See Top.presheaf.is_sheaf_iff_is_sheaf_equalizer_products.

3. Top.presheaf.is_sheaf_opens_le_cover: For each open cover { Uᵢ } of U, F(U) is the limit of the diagram consisting of arrows F(V₁) ⟶ F(V₂) for every pair of open sets V₁ ⊇ V₂ that are contained in some Uᵢ. See Top.presheaf.is_sheaf_iff_is_sheaf_opens_le_cover.

4. Top.presheaf.is_sheaf_pairwise_intersections: For each open cover { Uᵢ } of U, F(U) is the limit of the diagram consisting of arrows from F(Uᵢ) and F(Uⱼ) to F(Uᵢ ∩ Uⱼ) for each pair (i, j). See Top.presheaf.is_sheaf_iff_is_sheaf_pairwise_intersections.

The following requires C to be concrete and complete, and forget C to reflect isomorphisms and preserve limits. This applies to most "algebraic" categories, e.g. groups, abelian groups and rings.

1. Top.presheaf.is_sheaf_unique_gluing: (requires C to be concrete and complete; forget C to reflect isomorphisms and preserve limits) For each open cover { Uᵢ } of U, and a compatible family of elements x : F(Uᵢ), there exists a unique gluing x : F(U) that restricts to the given elements. See Top.presheaf.is_sheaf_iff_is_sheaf_unique_gluing.

2. The underlying sheaf of types is a sheaf. See Top.presheaf.is_sheaf_iff_is_sheaf_comp and category_theory.presheaf.is_sheaf_iff_is_sheaf_forget.

Equations
theorem Top.presheaf.is_sheaf_unit {X : Top} (F : X) :

The presheaf valued in unit over any topological space is a sheaf.

theorem Top.presheaf.is_sheaf_iso_iff {C : Type u} {X : Top} {F G : X} (α : F G) :
theorem Top.presheaf.is_sheaf_of_iso {C : Type u} {X : Top} {F G : X} (α : F G) (h : F.is_sheaf) :

Transfer the sheaf condition across an isomorphism of presheaves.

@[protected, instance]
def Top.sheaf.category (C : Type u) (X : Top) :
def Top.sheaf (C : Type u) (X : Top) :
Type (max u v w)

A sheaf C X is a presheaf of objects from C over a (bundled) topological space X, satisfying the sheaf condition.

Equations
Instances for Top.sheaf
@[reducible]
def Top.sheaf.presheaf {C : Type u} {X : Top} (F : X) :
X

The underlying presheaf of a sheaf

@[protected, instance]
def Top.sheaf_inhabited (X : Top) :
Equations
@[protected, instance]
def Top.sheaf.forget.faithful (C : Type u) (X : Top) :
def Top.sheaf.forget (C : Type u) (X : Top) :
X X

The forgetful functor from sheaves to presheaves.

Equations
Instances for Top.sheaf.forget
@[protected, instance]
def Top.sheaf.forget.full (C : Type u) (X : Top) :
theorem Top.sheaf.id_app (C : Type u) (X : Top) (F : X) (t : ᵒᵖ) :
(𝟙 F).val.app t = 𝟙 (F.val.obj t)
theorem Top.sheaf.comp_app (C : Type u) (X : Top) {F G H : X} (f : F G) (g : G H) (t : ᵒᵖ) :
(f g).val.app t = f.val.app t g.val.app t