Theory of sieves #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
- For an object
X
of a categoryC
, asieve X
is a set of morphisms toX
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 onC
together with a monomorphism to the yoneda embedding ofX
.
Tags #
sieve, pullback
A set of arrows all with codomain X
.
Equations
- category_theory.presieve X = Π ⦃Y : C⦄, set (Y ⟶ X)
Instances for category_theory.presieve
Equations
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
.
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
.
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 }
.
- mk : ∀ {C : Type u₁} [_inst_1 : category_theory.category C] {X Y : C} {f : Y ⟶ X}, category_theory.presieve.singleton f f
The singleton presieve.
- mk : ∀ {C : Type u₁} [_inst_1 : category_theory.category C] {X Y : C} {f : Y ⟶ X} [_inst_3 : category_theory.limits.has_pullbacks C] {R : category_theory.presieve X} (Z : C) (h : Z ⟶ X), R h → category_theory.presieve.pullback_arrows f R category_theory.limits.pullback.snd
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
.
- mk : ∀ {C : Type u₁} [_inst_1 : category_theory.category C] {X : C} {ι : Type u_1} {Y : ι → C} {f : Π (i : ι), Y i ⟶ X} (i : ι), category_theory.presieve.of_arrows Y f (f i)
Construct the presieve given by the family of arrows indexed by ι
.
Given a presieve on F(X)
, we can define a presieve on X
by taking the preimage via F
.
Equations
- category_theory.presieve.functor_pullback F R = λ (_x : C) (f : _x ⟶ X), R (F.map f)
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
.
- preobj : C
- premap : self.preobj ⟶ X
- lift : Y ⟶ F.obj self.preobj
- cover : S self.premap
- fac : f = self.lift ≫ F.map self.premap
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
- category_theory.presieve.get_functor_pushforward_structure h = (λ (_x : ∃ (g : classical.some h ⟶ X) (h_1 : Y ⟶ F.obj (classical.some h)), S g ∧ f = h_1 ≫ F.map g), (λ (_x_1 : ∃ (h_1 : Y ⟶ F.obj (classical.some h)), S (classical.some _x) ∧ f = h_1 ≫ F.map (classical.some _x)), (λ (_x_2 : S (classical.some _x) ∧ f = classical.some _x_1 ≫ F.map (classical.some _x)), {preobj := classical.some h, premap := classical.some _x, lift := classical.some _x_1, cover := _, fac := _}) _) _) _
- arrows : category_theory.presieve X
- downward_closed' : ∀ {Y Z : C} {f : Y ⟶ X}, self.arrows f → ∀ (g : Z ⟶ Y), self.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.
Instances for category_theory.sieve
Equations
The supremum of a collection of sieves: the union of them all.
Equations
- category_theory.sieve.Sup 𝒮 = {arrows := λ (Y : C), {f : Y ⟶ X | ∃ (S : category_theory.sieve X) (H : S ∈ 𝒮), S.arrows f}, downward_closed' := _}
The infimum of a collection of sieves: the intersection of them all.
Equations
- category_theory.sieve.Inf 𝒮 = {arrows := λ (Y : C), {f : Y ⟶ X | ∀ (S : category_theory.sieve X), S ∈ 𝒮 → S.arrows f}, downward_closed' := _}
The union of two sieves is a sieve.
The intersection of two sieves is a sieve.
Sieves on an object X
form a complete lattice.
We generate this directly rather than using the galois insertion for nicer definitional properties.
Equations
- category_theory.sieve.complete_lattice = {sup := category_theory.sieve.union X, le := λ (S R : category_theory.sieve X), ∀ ⦃Y : C⦄ (f : Y ⟶ X), ⇑S f → ⇑R f, lt := lattice.lt._default (λ (S R : category_theory.sieve X), ∀ ⦃Y : C⦄ (f : Y ⟶ X), ⇑S f → ⇑R f), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := category_theory.sieve.inter X, inf_le_left := _, inf_le_right := _, le_inf := _, Sup := category_theory.sieve.Sup X, le_Sup := _, Sup_le := _, Inf := category_theory.sieve.Inf X, Inf_le := _, le_Inf := _, top := {arrows := λ (_x : C), set.univ, downward_closed' := _}, bot := {arrows := λ (_x : C), ∅, downward_closed' := _}, le_top := _, bot_le := _}
The maximal sieve always exists.
Equations
Generate the smallest sieve containing the given set of arrows.
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
- category_theory.sieve.bind S R = {arrows := S.bind (λ (Y : C) (f : Y ⟶ X) (h : S f), ⇑(R h)), downward_closed' := _}
Show that there is a galois insertion (generate, set_over).
Equations
- category_theory.sieve.gi_generate = {choice := λ (𝒢 : category_theory.presieve X) (_x : (category_theory.sieve.generate 𝒢).arrows ≤ 𝒢), category_theory.sieve.generate 𝒢, gc := _, le_l_u := _, choice_eq := _}
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
- category_theory.sieve.pullback h S = {arrows := λ (Y_1 : C) (sl : Y_1 ⟶ Y), ⇑S (sl ≫ h), downward_closed' := _}
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
.
If f
is a monomorphism, the pushforward-pullback adjunction on sieves is coreflective.
Equations
If f
is a split epi, the pushforward-pullback adjunction on sieves is reflective.
If R
is a sieve, then the category_theory.presieve.functor_pullback
of R
is actually a sieve.
Equations
The sieve generated by the image of R
under F
.
Equations
When F
is essentially surjective and full, the galois connection is a galois insertion.
Equations
When F
is fully faithful, the galois connection is a galois coinsertion.
A sieve induces a presheaf.
If a sieve S is contained in a sieve T, then we have a morphism of presheaves on their induced presheaves.
Equations
- category_theory.sieve.nat_trans_of_le h = {app := λ (Y : Cᵒᵖ) (f : S.functor.obj Y), ⟨f.val, _⟩, naturality' := _}
The natural inclusion from the functor induced by a sieve to the yoneda embedding.
Equations
- S.functor_inclusion = {app := λ (Y : Cᵒᵖ) (f : S.functor.obj Y), f.val, naturality' := _}
Instances for category_theory.sieve.functor_inclusion
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
- category_theory.sieve.sieve_of_subfunctor f = {arrows := λ (Y : C) (g : Y ⟶ X), ∃ (t : R.obj (opposite.op Y)), f.app (opposite.op Y) t = g, downward_closed' := _}