mathlib documentation

category_theory.sites.sieves

Theory of sieves #

Tags #

sieve, pullback

def category_theory.presieve {C : Type u₁} [category_theory.category C] (X : C) :
Type (max u₁ v₁)

A set of arrows all with codomain X.

Equations
Instances for category_theory.presieve
@[reducible]

Given a sieve S on X : C, its associated diagram S.diagram is defined to be the natural functor from the full subcategory of the over category C/X consisting of arrows in S to C.

@[reducible]

Given a sieve S on X : C, its associated cocone S.cocone is defined to be the natural cocone over the diagram defined above with cocone point X.

def category_theory.presieve.bind {C : Type u₁} [category_theory.category C] {X : C} (S : category_theory.presieve X) (R : Π ⦃Y : C⦄ ⦃f : Y X⦄, S fcategory_theory.presieve Y) :

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₁} [category_theory.category C] {X Y Z : C} (f : Y X) {S : category_theory.presieve X} {R : Π ⦃Y : C⦄ ⦃f : Y X⦄, S fcategory_theory.presieve Y} {g : Z Y} (h₁ : S f) (h₂ : R h₁ g) :
S.bind R (g f)
inductive category_theory.presieve.singleton {C : Type u₁} [category_theory.category C] {X Y : C} (f : Y X) :

The singleton presieve.

Pullback a set of arrows with given codomain along a fixed map, by taking the pullback in the category. This is not the same as the arrow set of sieve.pullback, but there is a relation between them in pullback_arrows_comm.

inductive category_theory.presieve.of_arrows {C : Type u₁} [category_theory.category C] {X : C} {ι : Type u_1} (Y : ι → C) (f : Π (i : ι), Y i X) :

Construct the presieve given by the family of arrows indexed by ι.

theorem category_theory.presieve.of_arrows_bind {C : Type u₁} [category_theory.category C] {X : C} {ι : Type u_1} (Z : ι → C) (g : Π (i : ι), Z i X) (j : Π ⦃Y : C⦄ (f : Y X), category_theory.presieve.of_arrows Z g fType u_2) (W : Π ⦃Y : C⦄ (f : Y X) (H : category_theory.presieve.of_arrows Z g f), j f H → C) (k : Π ⦃Y : C⦄ (f : Y X) (H : category_theory.presieve.of_arrows Z g f) (i : j f H), W f H i Y) :
(category_theory.presieve.of_arrows Z g).bind (λ (Y : C) (f : Y X) (H : category_theory.presieve.of_arrows Z g f), category_theory.presieve.of_arrows (W f H) (k f H)) = category_theory.presieve.of_arrows (λ (i : Σ (i : ι), j (g i) _), W (g i.fst) _ i.snd) (λ (ij : Σ (i : ι), j (g i) _), k (g ij.fst) _ ij.snd g ij.fst)

Given a presieve on F(X), we can define a presieve on X by taking the preimage via F.

Equations
@[simp]
theorem category_theory.presieve.functor_pullback_mem {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] (F : C D) {X : C} (R : category_theory.presieve (F.obj X)) {Y : C} (f : Y X) :

Given a presieve on X, we can define a presieve on F(X) (which is actually a sieve) by taking the sieve generated by the image via F.

Equations
@[nolint]
structure category_theory.presieve.functor_pushforward_structure {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] (F : C D) {X : C} (S : category_theory.presieve X) {Y : D} (f : Y F.obj X) :
Type (max u₁ v₁ v₂)

An auxillary definition in order to fix the choice of the preimages between various definitions.

Instances for category_theory.presieve.functor_pushforward_structure
  • category_theory.presieve.functor_pushforward_structure.has_sizeof_inst

The fixed choice of a preimage.

Equations
structure category_theory.sieve {C : Type u₁} [category_theory.category C] (X : C) :
Type (max u₁ v₁)

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

Instances for category_theory.sieve
@[simp]
theorem category_theory.sieve.downward_closed {C : Type u₁} [category_theory.category C] {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₁} [category_theory.category C] {X : C} {R S : category_theory.sieve X} :
R.arrows = S.arrowsR = S
@[protected, ext]
theorem category_theory.sieve.ext {C : Type u₁} [category_theory.category C] {X : C} {R S : category_theory.sieve X} (h : ∀ ⦃Y : C⦄ (f : Y X), R f S f) :
R = S
@[protected]
theorem category_theory.sieve.ext_iff {C : Type u₁} [category_theory.category C] {X : C} {R S : category_theory.sieve X} :
R = S ∀ ⦃Y : C⦄ (f : Y X), R f S f
@[protected]

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

Equations
@[protected]

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

Equations
@[protected]

The union of two sieves is a sieve.

Equations
@[protected]

The intersection of two sieves is a sieve.

Equations
@[protected, instance]

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

Equations
@[protected, instance]

The maximal sieve always exists.

Equations
@[simp]
theorem category_theory.sieve.Inf_apply {C : Type u₁} [category_theory.category C] {X : C} {Ss : set (category_theory.sieve X)} {Y : C} (f : Y X) :
(has_Inf.Inf Ss) f ∀ (S : category_theory.sieve X), S SsS f
@[simp]
theorem category_theory.sieve.Sup_apply {C : Type u₁} [category_theory.category C] {X : C} {Ss : set (category_theory.sieve X)} {Y : C} (f : Y X) :
(has_Sup.Sup Ss) f ∃ (S : category_theory.sieve X) (H : S Ss), S f
@[simp]
theorem category_theory.sieve.inter_apply {C : Type u₁} [category_theory.category C] {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.union_apply {C : Type u₁} [category_theory.category C] {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.top_apply {C : Type u₁} [category_theory.category C] {X Y : C} (f : Y X) :

Generate the smallest sieve containing the given set of arrows.

Equations
@[simp]
theorem category_theory.sieve.generate_apply {C : Type u₁} [category_theory.category C] {X : C} (R : category_theory.presieve X) (Z : C) (f : Z X) :
(category_theory.sieve.generate R) f = ∃ (Y : C) (h : Z Y) (g : Y X), R g h g = f
@[simp]
theorem category_theory.sieve.bind_apply {C : Type u₁} [category_theory.category C] {X : C} (S : category_theory.presieve X) (R : Π ⦃Y : C⦄ ⦃f : Y X⦄, S fcategory_theory.sieve Y) :
(category_theory.sieve.bind S R) = S.bind (λ (Y : C) (f : Y X) (h : S f), (R h))
def category_theory.sieve.bind {C : Type u₁} [category_theory.category C] {X : C} (S : category_theory.presieve X) (R : Π ⦃Y : C⦄ ⦃f : Y X⦄, S fcategory_theory.sieve Y) :

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

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

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

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.pullback_apply {C : Type u₁} [category_theory.category C] {X Y : C} (h : Y X) (S : category_theory.sieve X) (Y_1 : C) (sl : Y_1 Y) :
@[simp]

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.pushforward_apply {C : Type u₁} [category_theory.category C] {X Y : C} (f : Y X) (R : category_theory.sieve Y) (Z : C) (gf : Z X) :
(category_theory.sieve.pushforward f R) gf = ∃ (g : Z Y), g f = gf R g
theorem category_theory.sieve.pushforward_apply_comp {C : Type u₁} [category_theory.category C] {X Y : C} {R : category_theory.sieve Y} {Z : C} {g : Z Y} (hg : R g) (f : Y X) :
theorem category_theory.sieve.pushforward_le_bind_of_mem {C : Type u₁} [category_theory.category C] {X Y : C} (S : category_theory.presieve X) (R : Π ⦃Y : C⦄ ⦃f : Y X⦄, S fcategory_theory.sieve Y) (f : Y X) (h : S f) :
theorem category_theory.sieve.le_pullback_bind {C : Type u₁} [category_theory.category C] {X Y : C} (S : category_theory.presieve X) (R : Π ⦃Y : C⦄ ⦃f : Y X⦄, S fcategory_theory.sieve Y) (f : Y X) (h : S f) :

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

Equations
theorem category_theory.sieve.image_mem_functor_pushforward {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] (F : C D) {X : C} (R : category_theory.sieve X) {V : C} {f : V X} (h : R f) :
def category_theory.sieve.functor {C : Type u₁} [category_theory.category C] {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₁} [category_theory.category C] {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₁} [category_theory.category C] {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]

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

Equations
@[simp]

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

Equations
Instances for category_theory.sieve.functor_inclusion
@[protected, instance]

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

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₁} [category_theory.category C] {X : C} {R : Cᵒᵖ Type v₁} (f : R category_theory.yoneda.obj X) (Y : C) (g : Y X) :