# mathlibdocumentation

category_theory.sites.sieves

# Theory of sieves

• For an object X of a category C, a sieve X is a set of morphisms to X which is closed under left-composition.
• The complete lattice structure on sieves is given, as well as the Galois insertion given by downward-closing.
• A sieve X (functorially) induces a presheaf on C together with a monomorphism to the yoneda embedding of X.

## Tags

sieve, pullback

def category_theory.presieve {C : Type u} (X : C) :
Type (max u v)

A set of arrows all with codomain X.

Equations
@[instance]
def category_theory.presieve.complete_lattice {C : Type u} (X : C) :

@[instance]
def category_theory.presieve.inhabited {C : Type u} {X : C} :

Equations
def category_theory.presieve.bind {C : Type u} {X : C} (S : category_theory.presieve X) (R : Π ⦃Y : C⦄ ⦃f : Y X⦄, S f) :

Given a set of arrows S all with codomain X, and a set of arrows with codomain Y for each f : Y ⟶ X in S, produce a set of arrows with codomain X: { g ≫ f | (f : Y ⟶ X) ∈ S, (g : Z ⟶ Y) ∈ R f }.

Equations
• S.bind R = λ (Z : C) (h : Z X), ∃ (Y : C) (g : Z Y) (f : Y X) (H : S f), R H g g f = h
@[simp]
theorem category_theory.presieve.bind_comp {C : Type u} {X Y Z : C} (f : Y X) {S : category_theory.presieve X} {R : Π ⦃Y : C⦄ ⦃f : Y X⦄, S f} {g : Z Y} (h₁ : S f) (h₂ : R h₁ g) :
S.bind R (g f)

def category_theory.presieve.singleton {C : Type u} {X Y : C} (f : Y X) :

The singleton presieve.

Equations
• = λ (Z : C) (g : Z X), ∃ (H : Z = Y),
@[simp]
theorem category_theory.presieve.singleton_eq_iff_domain {C : Type u} {X Y : C} (f g : Y X) :

theorem category_theory.presieve.singleton_self {C : Type u} {X Y : C} (f : Y X) :

structure category_theory.sieve {C : Type u} (X : C) :
Type (max u v)
• arrows :
• downward_closed' : ∀ {Y Z : C} {f : Y X}, c.arrows f∀ (g : Z Y), c.arrows (g f)

For an object X of a category C, a sieve X is a set of morphisms to X which is closed under left-composition.

@[instance]
def category_theory.sieve.has_coe_to_fun {C : Type u} {X : C} :

Equations
@[simp]
theorem category_theory.sieve.downward_closed {C : Type u} {X Y Z : C} (S : category_theory.sieve X) {f : Y X} (hf : S f) (g : Z Y) :
S (g f)

theorem category_theory.sieve.arrows_ext {C : Type u} {X : C} {R S : category_theory.sieve X} :
R.arrows = S.arrowsR = S

@[ext]
theorem category_theory.sieve.ext {C : Type u} {X : C} {R S : category_theory.sieve X} (h : ∀ ⦃Y : C⦄ (f : Y X), R f S f) :
R = S

theorem category_theory.sieve.ext_iff {C : Type u} {X : C} {R S : category_theory.sieve X} :
R = S ∀ ⦃Y : C⦄ (f : Y X), R f S f

def category_theory.sieve.Sup {C : Type u} {X : C} (𝒮 : set ) :

The supremum of a collection of sieves: the union of them all.

Equations
def category_theory.sieve.Inf {C : Type u} {X : C} (𝒮 : set ) :

The infimum of a collection of sieves: the intersection of them all.

Equations
def category_theory.sieve.union {C : Type u} {X : C} (S R : category_theory.sieve X) :

The union of two sieves is a sieve.

Equations
def category_theory.sieve.inter {C : Type u} {X : C} (S R : category_theory.sieve X) :

The intersection of two sieves is a sieve.

Equations
@[instance]
def category_theory.sieve.complete_lattice {C : Type u} {X : C} :

Sieves on an object X form a complete lattice. We generate this directly rather than using the galois insertion for nicer definitional properties.

Equations
@[instance]
def category_theory.sieve.sieve_inhabited {C : Type u} {X : C} :

The maximal sieve always exists.

Equations
@[simp]
theorem category_theory.sieve.mem_Inf {C : Type u} {X : C} {Ss : set } {Y : C} (f : Y X) :
(Inf Ss) f ∀ (S : , S SsS f

@[simp]
theorem category_theory.sieve.mem_Sup {C : Type u} {X : C} {Ss : set } {Y : C} (f : Y X) :
(Sup Ss) f ∃ (S : (H : S Ss), S f

@[simp]
theorem category_theory.sieve.mem_inter {C : Type u} {X : C} {R S : category_theory.sieve X} {Y : C} (f : Y X) :
(R S) f R f S f

@[simp]
theorem category_theory.sieve.mem_union {C : Type u} {X : C} {R S : category_theory.sieve X} {Y : C} (f : Y X) :
(R S) f R f S f

@[simp]
theorem category_theory.sieve.mem_top {C : Type u} {X Y : C} (f : Y X) :

def category_theory.sieve.generate {C : Type u} {X : C} (R : category_theory.presieve X) :

Generate the smallest sieve containing the given set of arrows.

Equations
theorem category_theory.sieve.mem_generate {C : Type u} {X Z : C} (R : category_theory.presieve X) (f : Z X) :
∃ (Y : C) (h : Z Y) (g : Y X), R g h g = f

def category_theory.sieve.bind {C : Type u} {X : C} (S : category_theory.presieve X) (R : Π ⦃Y : C⦄ ⦃f : Y X⦄, S f) :

Given a presieve on X, and a sieve on each domain of an arrow in the presieve, we can bind to produce a sieve on X.

Equations

Show that there is a galois insertion (generate, set_over).

Equations
theorem category_theory.sieve.le_generate {C : Type u} {X : C} (R : category_theory.presieve X) :

theorem category_theory.sieve.id_mem_iff_eq_top {C : Type u} {X : C} {S : category_theory.sieve X} :
S (𝟙 X) S =

If the identity arrow is in a sieve, the sieve is maximal.

theorem category_theory.sieve.generate_of_contains_split_epi {C : Type u} {X Y : C} {R : category_theory.presieve X} (f : Y X) (hf : R f) :

If an arrow set contains a split epi, it generates the maximal sieve.

@[simp]
theorem category_theory.sieve.generate_of_singleton_split_epi {C : Type u} {X Y : C} (f : Y X)  :

@[simp]
theorem category_theory.sieve.generate_top {C : Type u} {X : C} :

def category_theory.sieve.pullback {C : Type u} {X Y : C} (h : Y X) (S : category_theory.sieve X) :

Given a morphism h : Y ⟶ X, send a sieve S on X to a sieve on Y as the inverse image of S with _ ≫ h. That is, sieve.pullback S h := (≫ h) '⁻¹ S.

Equations
@[simp]
theorem category_theory.sieve.mem_pullback {C : Type u} {X Y Z : C} {S : category_theory.sieve X} (h : Y X) {f : Z Y} :
S (f h)

@[simp]
theorem category_theory.sieve.pullback_id {C : Type u} {X : C} {S : category_theory.sieve X} :
= S

@[simp]
theorem category_theory.sieve.pullback_top {C : Type u} {X Y : C} {f : Y X} :

theorem category_theory.sieve.pullback_comp {C : Type u} {X Y Z : C} {f : Y X} {g : Z Y} (S : category_theory.sieve X) :

@[simp]
theorem category_theory.sieve.pullback_inter {C : Type u} {X Y : C} {f : Y X} (S R : category_theory.sieve X) :

theorem category_theory.sieve.pullback_eq_top_iff_mem {C : Type u} {X Y : C} {S : category_theory.sieve X} (f : Y X) :
S f

theorem category_theory.sieve.pullback_eq_top_of_mem {C : Type u} {X Y : C} (S : category_theory.sieve X) {f : Y X} :
S f

def category_theory.sieve.pushforward {C : Type u} {X Y : C} (f : Y X) (R : category_theory.sieve Y) :

Push a sieve R on Y forward along an arrow f : Y ⟶ X: gf : Z ⟶ X is in the sieve if gf factors through some g : Z ⟶ Y which is in R.

Equations
@[simp]
theorem category_theory.sieve.mem_pushforward_of_comp {C : Type u} {X Y : C} {R : category_theory.sieve Y} {Z : C} {g : Z Y} (hg : R g) (f : Y X) :
(g f)

theorem category_theory.sieve.pushforward_comp {C : Type u} {X Y Z : C} {f : Y X} {g : Z Y} (R : category_theory.sieve Z) :

theorem category_theory.sieve.galois_connection {C : Type u} {X Y : C} (f : Y X) :

theorem category_theory.sieve.pullback_monotone {C : Type u} {X Y : C} (f : Y X) :

theorem category_theory.sieve.pushforward_monotone {C : Type u} {X Y : C} (f : Y X) :

theorem category_theory.sieve.le_pushforward_pullback {C : Type u} {X Y : C} (f : Y X) (R : category_theory.sieve Y) :

theorem category_theory.sieve.pullback_pushforward_le {C : Type u} {X Y : C} (f : Y X) (R : category_theory.sieve X) :

theorem category_theory.sieve.pushforward_union {C : Type u} {X Y : C} {f : Y X} (S R : category_theory.sieve Y) :

theorem category_theory.sieve.pushforward_le_bind_of_mem {C : Type u} {X Y : C} (S : category_theory.presieve X) (R : Π ⦃Y : C⦄ ⦃f : Y X⦄, S f) (f : Y X) (h : S f) :

theorem category_theory.sieve.le_pullback_bind {C : Type u} {X Y : C} (S : category_theory.presieve X) (R : Π ⦃Y : C⦄ ⦃f : Y X⦄, S f) (f : Y X) (h : S f) :

def category_theory.sieve.galois_coinsertion_of_mono {C : Type u} {X Y : C} (f : Y X)  :

If f is a monomorphism, the pushforward-pullback adjunction on sieves is coreflective.

Equations
def category_theory.sieve.galois_insertion_of_split_epi {C : Type u} {X Y : C} (f : Y X)  :

If f is a split epi, the pushforward-pullback adjunction on sieves is reflective.

Equations
def category_theory.sieve.functor {C : Type u} {X : C} (S : category_theory.sieve X) :
Cᵒᵖ Type v

A sieve induces a presheaf.

Equations
@[simp]
theorem category_theory.sieve.functor_obj {C : Type u} {X : C} (S : category_theory.sieve X) (Y : Cᵒᵖ) :
S.functor.obj Y = {g // S g}

@[simp]
theorem category_theory.sieve.functor_map_coe {C : Type u} {X : C} (S : category_theory.sieve X) (Y Z : Cᵒᵖ) (f : Y Z) (g : {g // S g}) :
(S.functor.map f g) = f.unop g.val

@[simp]
theorem category_theory.sieve.nat_trans_of_le_app_coe {C : Type u} {X : C} {S T : category_theory.sieve X} (h : S T) (Y : Cᵒᵖ) (f : S.functor.obj Y) :
f) = f.val

def category_theory.sieve.nat_trans_of_le {C : Type u} {X : C} {S T : category_theory.sieve X} (h : S T) :

If a sieve S is contained in a sieve T, then we have a morphism of presheaves on their induced presheaves.

Equations
@[simp]
theorem category_theory.sieve.functor_inclusion_app {C : Type u} {X : C} (S : category_theory.sieve X) (Y : Cᵒᵖ) (f : S.functor.obj Y) :
f = f.val

The natural inclusion from the functor induced by a sieve to the yoneda embedding.

Equations
theorem category_theory.sieve.nat_trans_of_le_comm {C : Type u} {X : C} {S T : category_theory.sieve X} (h : S T) :

@[instance]

The presheaf induced by a sieve is a subobject of the yoneda embedding.

def category_theory.sieve.sieve_of_subfunctor {C : Type u} {X : C} {R : Cᵒᵖ Type v} (f : R ) :

A natural transformation to a representable functor induces a sieve. This is the left inverse of functor_inclusion, shown in sieve_of_functor_inclusion.

Equations
@[simp]
theorem category_theory.sieve.sieve_of_subfunctor_apply {C : Type u} {X Y : C} {R : Cᵒᵖ Type v} (f : R ) (g : Y X) :
∃ (t : R.obj (opposite.op Y)), f.app (opposite.op Y) t = g

@[instance]

Equations