Documentation

Mathlib.CategoryTheory.Sites.Sieves.Presieve

Presieves #

A presieve on an object X of a category C is an arbitrary predicate on morphisms with codomain X. Unlike a sieve, a presieve is not required to be closed under precomposition. Presieves are useful for specifying generating families of arrows before passing to the sieve they generate.

This file develops the basic theory of presieves. It defines singleton presieves and presieves Presieve.ofArrows associated to indexed families of arrows, together with binding and pullback constructions. It also defines pullback and pushforward along a fixed morphism, the associated Galois connection, and the category, diagram, and cocone determined by a presieve. Finally, Presieve.uncurry realizes a presieve as a set in a sigma type.

Functorial operations induced by a functor between categories are developed in Mathlib.CategoryTheory.Sites.Sieves.Functoriality.

Tags #

presieve, pullback

@[implicit_reducible]
def CategoryTheory.Presieve {C : Type u₁} [Category.{v₁, u₁} C] (X : C) :
Type (max u₁ v₁)

A predicate on arrows with codomain X.

Equations
Instances For
    @[instance_reducible]
    Equations
    • One or more equations did not get rendered due to their size.
    @[simp]
    theorem CategoryTheory.top_apply {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : Y X) :
    f
    @[simp]
    theorem CategoryTheory.bot_apply {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : Y X) :
    @[reducible, inline]
    abbrev CategoryTheory.Presieve.category {C : Type u₁} [Category.{v₁, u₁} C] {X : C} (P : Presieve X) :
    Type (max u₁ v₁)

    The full subcategory of the over category C/X consisting of arrows which belong to a presieve on X.

    Equations
    Instances For
      @[reducible, inline]
      abbrev CategoryTheory.Presieve.categoryMk {C : Type u₁} [Category.{v₁, u₁} C] {X : C} (P : Presieve X) {Y : C} (f : Y X) (hf : P f) :

      Construct an object of P.category.

      Equations
      Instances For
        @[reducible, inline]

        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.

        Equations
        Instances For
          @[reducible, inline]

          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.

          Equations
          Instances For
            def CategoryTheory.Presieve.bind {C : Type u₁} [Category.{v₁, u₁} C] {X : C} (S : Presieve X) (R : Y : C⦄ → f : Y X⦄ → S fPresieve Y) :

            Given a presieve S on X, and presieve R on Y for each f : Y ⟶ X in S, produce a presieve on X: { gf | (f : Y ⟶ X) ∈ S, (g : Z ⟶ Y) ∈ R f }.

            Equations
            Instances For
              structure CategoryTheory.Presieve.BindStruct {C : Type u₁} [Category.{v₁, u₁} C] {X : C} (S : Presieve X) (R : Y : C⦄ → f : Y X⦄ → S fPresieve Y) {Z : C} (h : Z X) :
              Type (max u₁ v₁)

              Structure which contains the data and properties for a morphism h satisfying Presieve.bind S R h.

              • Y : C

                the intermediate object

              • g : Z self.Y

                a morphism in the family of presieves R

              • f : self.Y X

                a morphism in the presieve S

              • hf : S self.f
              • hg : R self.g
              • fac : CategoryStruct.comp self.g self.f = h
              Instances For
                @[simp]
                theorem CategoryTheory.Presieve.BindStruct.fac_assoc {C : Type u₁} [Category.{v₁, u₁} C] {X : C} {S : Presieve X} {R : Y : C⦄ → f : Y X⦄ → S fPresieve Y} {Z : C} {h : Z X} (self : S.BindStruct R h) {Z✝ : C} (h✝ : X Z✝) :
                noncomputable def CategoryTheory.Presieve.bind.bindStruct {C : Type u₁} [Category.{v₁, u₁} C] {X : C} {S : Presieve X} {R : Y : C⦄ → f : Y X⦄ → S fPresieve Y} {Z : C} {h : Z X} (H : S.bind R h) :

                If a morphism h satisfies Presieve.bind S R h, this is a choice of a structure in BindStruct S R h.

                Equations
                Instances For
                  theorem CategoryTheory.Presieve.BindStruct.bind {C : Type u₁} [Category.{v₁, u₁} C] {X : C} {S : Presieve X} {R : Y : C⦄ → f : Y X⦄ → S fPresieve Y} {Z : C} {h : Z X} (b : S.BindStruct R h) :
                  S.bind R h
                  @[simp]
                  theorem CategoryTheory.Presieve.bind_comp {C : Type u₁} [Category.{v₁, u₁} C] {X Y Z : C} (f : Y X) {S : Presieve X} {R : Y : C⦄ → f : Y X⦄ → S fPresieve Y} {g : Z Y} (h₁ : S f) (h₂ : R h₁ g) :
                  inductive CategoryTheory.Presieve.singleton {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : Y X) :

                  The singleton presieve.

                  Instances For
                    @[simp]
                    theorem CategoryTheory.Presieve.singleton_eq_iff_domain {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f g : Y X) :
                    singleton f g f = g
                    @[simp]
                    theorem CategoryTheory.Presieve.singleton_le_iff {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : Y X) {R : Presieve X} :
                    singleton f R R f
                    class CategoryTheory.Presieve.HasPullbacks {C : Type u₁} [Category.{v₁, u₁} C] {X : C} (R : Presieve X) {Y : C} (f : Y X) :

                    A presieve R has pullbacks along f if for every h in R, the pullback with f exists.

                    Instances
                      theorem CategoryTheory.Presieve.hasPullback {C : Type u₁} {inst✝ : Category.{v₁, u₁} C} {X : C} {R : Presieve X} {Y : C} (f : Y X) [self : R.HasPullbacks f] {Z : C} {h : Z X} :
                      R hLimits.HasPullback h f

                      Alias of CategoryTheory.Presieve.HasPullbacks.hasPullback.

                      inductive CategoryTheory.Presieve.pullbackArrows {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : Y X) (R : Presieve X) [R.HasPullbacks f] :

                      Pullback a presieve along a fixed map, by taking the pullback in the category. This is not the same as the underlying presieve of Sieve.pullback, but there is a relation between them in pullbackArrows_comm.

                      Instances For
                        inductive CategoryTheory.Presieve.ofArrows {C : Type u₁} [Category.{v₁, u₁} C] {X : C} {ι : Type u_1} (Y : ιC) (f : (i : ι) → Y i X) :

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

                        Instances For
                          theorem CategoryTheory.Presieve.ofArrows.mk' {C : Type u₁} [Category.{v₁, u₁} C] {X : C} {ι : Type u_1} {Y : ιC} {f : (i : ι) → Y i X} {Z : C} {g : Z X} (i : ι) (h : Z = Y i) (hg : g = CategoryStruct.comp (eqToHom h) (f i)) :
                          ofArrows Y f g
                          instance CategoryTheory.Presieve.instHasPullbacksOfArrowsOfHasPullback {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : Y X) {ι : Type u_1} (Z : ιC) (g : (i : ι) → Z i X) [∀ (i : ι), Limits.HasPullback (g i) f] :
                          theorem CategoryTheory.Presieve.ofArrows_pullback {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : Y X) {ι : Type u_1} (Z : ιC) (g : (i : ι) → Z i X) [∀ (i : ι), Limits.HasPullback (g i) f] :
                          (ofArrows (fun (i : ι) => Limits.pullback (g i) f) fun (x : ι) => Limits.pullback.snd (g x) f) = pullbackArrows f (ofArrows Z g)
                          theorem CategoryTheory.Presieve.ofArrows_bind {C : Type u₁} [Category.{v₁, u₁} C] {X : C} {ι : Type u_1} (Z : ιC) (g : (i : ι) → Z i X) (j : Y : C⦄ → (f : Y X) → ofArrows Z g fType u_2) (W : Y : C⦄ → (f : Y X) → (H : ofArrows Z g f) → j f HC) (k : Y : C⦄ → (f : Y X) → (H : ofArrows Z g f) → (i : j f H) → W f H i Y) :
                          ((ofArrows Z g).bind fun (x : C) (f : x X) (H : ofArrows Z g f) => ofArrows (W f H) (k f H)) = ofArrows (fun (i : (i : ι) × j (g i) ) => W (g i.fst) i.snd) fun (ij : (i : ι) × j (g i) ) => CategoryStruct.comp (k (g ij.fst) ij.snd) (g ij.fst)
                          theorem CategoryTheory.Presieve.ofArrows_surj {C : Type u₁} [Category.{v₁, u₁} C] {X : C} {ι : Type u_1} {Y : ιC} (f : (i : ι) → Y i X) {Z : C} (g : Z X) (hg : ofArrows Y f g) :
                          ∃ (i : ι) (h : Y i = Z), g = CategoryStruct.comp (eqToHom ) (f i)
                          theorem CategoryTheory.Presieve.exists_eq_ofArrows {C : Type u₁} [Category.{v₁, u₁} C] {X : C} (R : Presieve X) :
                          ∃ (ι : Type (max u₁ v₁)) (Y : ιC) (f : (i : ι) → Y i X), R = ofArrows Y f
                          theorem CategoryTheory.Presieve.ofArrows_category {C : Type u₁} [Category.{v₁, u₁} C] {S : C} (R : Presieve S) :
                          (ofArrows (fun (f : R.category) => f.obj.left) fun (f : R.category) => f.obj.hom) = R
                          noncomputable def CategoryTheory.Presieve.ofArrows.idx {C : Type u₁} [Category.{v₁, u₁} C] {ι : Type u_1} {S : C} {X : ιC} {f : (i : ι) → X i S} {Y : C} {g : Y S} (hf : ofArrows X f g) :
                          ι

                          If g : Y ⟶ S is in the presieve given by the indexed family fᵢ, this is a choice of index such that g = fᵢ modulo eqToHom. Note: This should generally not be used! If possible, use the induction principle for the type Presieve.ofArrows instead (using e.g., rintro / obtain).

                          Equations
                          Instances For
                            theorem CategoryTheory.Presieve.ofArrows.obj_idx {C : Type u₁} [Category.{v₁, u₁} C] {ι : Type u_1} {S : C} {X : ιC} {f : (i : ι) → X i S} {Y : C} {g : Y S} (hf : ofArrows X f g) :
                            X hf.idx = Y
                            theorem CategoryTheory.Presieve.ofArrows.eq_eqToHom_comp_hom_idx {C : Type u₁} [Category.{v₁, u₁} C] {ι : Type u_1} {S : C} {X : ιC} {f : (i : ι) → X i S} {Y : C} {g : Y S} (hf : ofArrows X f g) :
                            theorem CategoryTheory.Presieve.ofArrows.hom_idx {C : Type u₁} [Category.{v₁, u₁} C] {ι : Type u_1} {S : C} {X : ιC} {f : (i : ι) → X i S} {Y : C} {g : Y S} (hf : ofArrows X f g) :
                            theorem CategoryTheory.Presieve.ofArrows_comp_le {C : Type u₁} [Category.{v₁, u₁} C] {X : C} {ι : Type u_1} {σ : Type u_2} {Y : ιC} (f : (i : ι) → Y i X) (a : σι) :
                            (ofArrows (Y a) fun (i : σ) => f (a i)) ofArrows Y f
                            theorem CategoryTheory.Presieve.ofArrows_comp_eq_of_surjective {C : Type u₁} [Category.{v₁, u₁} C] {X : C} {ι : Type u_1} {σ : Type u_2} {Y : ιC} (f : (i : ι) → Y i X) {a : σι} (ha : Function.Surjective a) :
                            (ofArrows (Y a) fun (i : σ) => f (a i)) = ofArrows Y f
                            theorem CategoryTheory.Presieve.ofArrows_le_iff {C : Type u₁} [Category.{v₁, u₁} C] {X : C} {ι : Type u_1} {Y : ιC} {f : (i : ι) → Y i X} {R : Presieve X} :
                            ofArrows Y f R ∀ (i : ι), R (f i)
                            theorem CategoryTheory.Presieve.ofArrows_of_unique {C : Type u₁} [Category.{v₁, u₁} C] {X : C} {ι : Type u_1} [Unique ι] {Y : ιC} (f : (i : ι) → Y i X) :
                            theorem CategoryTheory.Presieve.ofArrows_pUnit {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : Y X) :
                            (ofArrows (fun (x : PUnit.{w + 1}) => Y) fun (x : PUnit.{w + 1}) => f) = singleton f
                            theorem CategoryTheory.Presieve.ofArrows_of_isEmpty {C : Type u₁} [Category.{v₁, u₁} C] {X : C} {ι : Type u_1} [IsEmpty ι] {Y : ιC} (f : (i : ι) → Y i X) :
                            inductive CategoryTheory.Presieve.bindOfArrows {C : Type u₁} [Category.{v₁, u₁} C] {ι : Type u_1} {X : C} (Y : ιC) (f : (i : ι) → Y i X) (R : (i : ι) → Presieve (Y i)) :

                            A convenient constructor for a refinement of a presieve of the form Presieve.ofArrows. This contains a sieve obtained by Sieve.bind and Sieve.ofArrows, see Presieve.bind_ofArrows_le_bindOfArrows, but has better definitional properties.

                            Instances For
                              theorem CategoryTheory.Presieve.bindOfArrows_ofArrows {C : Type u₁} [Category.{v₁, u₁} C] {ι : Type u_1} {S : C} {X : ιC} (f : (i : ι) → X i S) {σ : ιType u_2} {Y : (i : ι) → σ iC} (g : (i : ι) → (j : σ i) → Y i j X i) :
                              (bindOfArrows X f fun (i : ι) => ofArrows (Y i) (g i)) = ofArrows (fun (p : (i : ι) × σ i) => Y p.fst p.snd) fun (p : (i : ι) × σ i) => CategoryStruct.comp (g p.fst p.snd) (f p.fst)
                              def CategoryTheory.Presieve.pushforward {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : X Y) (R : Presieve X) :

                              Compose a presieve on the right with a morphism.

                              Equations
                              Instances For
                                theorem CategoryTheory.Presieve.pushforward_apply_comp {C : Type u₁} [Category.{v₁, u₁} C] {X Y Z : C} {f : X Y} {R : Presieve X} {g : Z X} (hg : R g) :
                                theorem CategoryTheory.Presieve.pushforward_ofArrows {C : Type u₁} [Category.{v₁, u₁} C] {ι : Type u_1} {U : ιC} {X Y : C} (g : (i : ι) → U i X) (f : X Y) :
                                pushforward f (ofArrows U g) = ofArrows U fun (x : ι) => CategoryStruct.comp (g x) f
                                def CategoryTheory.Presieve.pullback {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (f : X Y) (R : Presieve Y) :

                                The pullback of a presieve R on Y along a morphism f : X ⟶ Y is the presieve on X given by all morphisms g : Z ⟶ X such that gf is in R.

                                Equations
                                Instances For
                                  @[simp]
                                  theorem CategoryTheory.Presieve.pullback_iff {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} {f : Y X} {R : Presieve X} {Z : C} {g : Z Y} :
                                  theorem CategoryTheory.Presieve.pullback_comp {C : Type u₁} [Category.{v₁, u₁} C] {X Y Z : C} (f : Y X) (R : Presieve Z) (g : X Z) :

                                  Given a presieve R on X, the predicate R.HasPairwisePullbacks means that for all arrows f and g in R, the pullback of f and g exists.

                                  • has_pullbacks {Y Z : C} {f : Y X} : R f∀ {g : Z X}, R gLimits.HasPullback f g

                                    For all arrows f and g in R, the pullback of f and g exists.

                                  Instances
                                    instance CategoryTheory.Presieve.instHasPullbackOfHasPairwisePullbacksOfArrows {C : Type u₁} [Category.{v₁, u₁} C] {α : Type v₂} {X : αC} {B : C} (π : (a : α) → X a B) [(ofArrows X π).HasPairwisePullbacks] (a b : α) :
                                    Limits.HasPullback (π a) (π b)
                                    def CategoryTheory.Presieve.uncurry {C : Type u₁} [Category.{v₁, u₁} C] {X : C} (s : Presieve X) :
                                    Set ((Y : C) × (Y X))

                                    Uncurry a presieve to one set over the sigma type.

                                    Equations
                                    Instances For
                                      @[simp]
                                      @[simp]
                                      theorem CategoryTheory.Presieve.uncurry_pullbackArrows {C : Type u₁} [Category.{v₁, u₁} C] {X : C} (s : Presieve X) [Limits.HasPullbacks C] {B : C} (b : B X) :
                                      (pullbackArrows b s).uncurry = (fun (f : (Y : C) × (Y X)) => Limits.pullback f.snd b, Limits.pullback.snd f.snd b) '' s.uncurry
                                      @[simp]
                                      theorem CategoryTheory.Presieve.uncurry_bind {C : Type u₁} [Category.{v₁, u₁} C] {X : C} (s : Presieve X) (t : Y : C⦄ → (f : Y X) → s fPresieve Y) :
                                      (s.bind t).uncurry = ⋃ (i : (Y : C) × (Y X)), ⋃ (h : i s.uncurry), (Sigma.map id fun (Z : C) (g : Z i.fst) => CategoryStruct.comp g i.snd) '' (t i.snd h).uncurry
                                      @[simp]
                                      theorem CategoryTheory.Presieve.uncurry_ofArrows {C : Type u₁} [Category.{v₁, u₁} C] {X : C} {ι : Type u_1} (Y : ιC) (f : (i : ι) → Y i X) :
                                      (ofArrows Y f).uncurry = Set.range fun (i : ι) => Y i, f i
                                      theorem CategoryTheory.Presieve.ofArrows_eq_ofArrows_uncurry {C : Type u₁} [Category.{v₁, u₁} C] {ι : Type u_1} {S : C} {X : ιC} (f : (i : ι) → X i S) :
                                      ofArrows X f = ofArrows (fun (i : (ofArrows X f).uncurry) => X (ofArrows.idx )) fun (i : (ofArrows X f).uncurry) => f (ofArrows.idx )