# mathlib3documentation

topology.sheaves.sheaf_condition.sites

# Coverings and sieves; from sheaves on sites and sheaves on spaces #

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

In this file, we connect coverings in a topological space to sieves in the associated Grothendieck topology, in preparation of connecting the sheaf condition on sites to the various sheaf conditions on spaces.

We also specialize results about sheaves on sites to sheaves on spaces; we show that the inclusion functor from a topological basis to topological_space.opens is cover_dense, that open maps induce cover_preserving functors, and that open embeddings induce compatible_preserving functors.

Given a presieve R on U, we obtain a covering family of open sets in X, by taking as index type the type of dependent pairs (V, f), where f : V ⟶ U is in R.

Equations
• = λ (f : Σ (V : , {f // R f}), f.fst
@[simp]

If R is a presieve in the grothendieck topology on opens X, the covering family associated to R really is covering, i.e. the union of all open sets equals U.

Given a family of opens U : ι → opens X and any open Y : opens X, we obtain a presieve on Y by declaring that a morphism f : V ⟶ Y is a member of the presieve if and only if there exists an index i : ι such that V = U i.

Equations
• = λ (V : (f : V Y), (i : ι), V = U i
def Top.presheaf.presieve_of_covering {X : Top} {ι : Type v} (U : ι ) :

Take Y to be supr U and obtain a presieve over supr U.

Equations
@[simp]

Given a presieve R on Y, if we take its associated family of opens via covering_of_presieve (which may not cover Y if R is not covering), and take the presieve on Y associated to the family of opens via presieve_of_covering_aux, then we get back the original presieve R.

The sieve generated by presieve_of_covering U is a member of the grothendieck topology.

def Top.presheaf.presieve_of_covering.hom_of_index {X : Top} {ι : Type v} (U : ι ) (i : ι) :
Σ (V : , {f //

An index i : ι can be turned into a dependent pair (V, f), where V is an open set and f : V ⟶ supr U is a member of presieve_of_covering U f.

Equations
noncomputable def Top.presheaf.presieve_of_covering.index_of_hom {X : Top} {ι : Type v} (U : ι ) (f : Σ (V : , {f // ) :
ι

By using the axiom of choice, a dependent pair (V, f) where f : V ⟶ supr U is a member of presieve_of_covering U f can be turned into an index i : ι, such that V = U i.

Equations
theorem Top.presheaf.presieve_of_covering.index_of_hom_spec {X : Top} {ι : Type v} (U : ι ) (f : Σ (V : , {f // ) :
theorem Top.opens.cover_dense_iff_is_basis {X : Top} {ι : Type u_2} (B : ι ) :
theorem Top.opens.cover_dense_induced_functor {X : Top} {ι : Type u_2} {B : ι }  :
theorem open_embedding.compatible_preserving {X Y : Top} {f : X Y} (hf : open_embedding f) :
theorem is_open_map.cover_preserving {X Y : Top} {f : X Y} (hf : is_open_map f) :
theorem Top.presheaf.is_sheaf_of_open_embedding {C : Type u} {X Y : Top} {f : X Y} {F : Y} (h : open_embedding f) (hF : F.is_sheaf) :
noncomputable def Top.sheaf.is_terminal_of_empty {C : Type u} {X : Top} (F : X) :

The empty component of a sheaf is terminal

Equations
noncomputable def Top.sheaf.is_terminal_of_eq_empty {C : Type u} {X : Top} (F : X) {U : topological_space.opens X} (h : U = ) :

A variant of is_terminal_of_empty that is easier to apply.

Equations
noncomputable def Top.sheaf.restrict_hom_equiv_hom {C : Type u} {X : Top} {ι : Type u_1} {B : ι } (F : X) (F' : X)  :
(F F'.val)

If a family B of open sets forms a basis of the topology on X, and if F' is a sheaf on X, then a homomorphism between a presheaf F on X and F' is equivalent to a homomorphism between their restrictions to the indexing type ι of B, with the induced category structure on ι.

Equations
@[simp]
theorem Top.sheaf.extend_hom_app {C : Type u} {X : Top} {ι : Type u_1} {B : ι } (F : X) (F' : X) (α : ) (i : ι) :
( h) α).app (opposite.op (B i)) = α.app (opposite.op i)
theorem Top.sheaf.hom_ext {C : Type u} {X : Top} {ι : Type u_1} {B : ι } (F : X) (F' : X) {α β : F F'.val} (he : (i : ι), α.app (opposite.op (B i)) = β.app (opposite.op (B i))) :
α = β