Documentation

Mathlib.CategoryTheory.Sites.IsSheafFor

The sheaf condition for a presieve #

We define what it means for a presheaf P : Cᵒᵖ ⥤ Type v to be a sheaf for a particular presieve R on X:

In the special case where R is a sieve, the compatibility condition can be simplified:

In the special case where C has pullbacks, the compatibility condition can be simplified:

We also provide equivalent conditions to satisfy alternate definitions given in the literature.

Implementation #

The sheaf condition is given as a proposition, rather than a subsingleton in Type (max u₁ v). This doesn't seem to make a big difference, other than making a couple of definitions noncomputable, but it means that equivalent conditions can be given as statements rather than statements, which can be convenient.

References #

A family of elements for a presheaf P given a collection of arrows R with fixed codomain X consists of an element of P Y for every f : Y ⟶ X in R. A presheaf is a sheaf (resp, separated) if every compatible family of elements has exactly one (resp, at most one) amalgamation.

This data is referred to as a family in [MM92], Chapter III, Section 4. It is also a concrete version of the elements of the middle object in https://stacks.math.columbia.edu/tag/00VM which is more useful for direct calculations. It is also used implicitly in Definition C2.1.2 in [Elephant].

Equations
Instances For
    Equations
    • CategoryTheory.Presieve.instInhabitedFamilyOfElementsBotPresieveToBotInstCompleteLatticePresieve = { default := fun (x : C) (x_1 : x X) => False.elim }

    A family of elements for a presheaf on the presieve R₂ can be restricted to a smaller presieve R₁.

    Equations
    Instances For

      A family of elements for the arrow set R is compatible if for any f₁ : Y₁ ⟶ X and f₂ : Y₂ ⟶ X in R, and any g₁ : Z ⟶ Y₁ and g₂ : Z ⟶ Y₂, if the square g₁ ≫ f₁ = g₂ ≫ f₂ commutes then the elements of P Z obtained by restricting the element of P Y₁ along g₁ and restricting the element of P Y₂ along g₂ are the same.

      In special cases, this condition can be simplified, see pullbackCompatible_iff and compatible_iff_sieveCompatible.

      This is referred to as a "compatible family" in Definition C2.1.2 of [Elephant], and on nlab: https://ncatlab.org/nlab/show/sheaf#GeneralDefinitionInComponents

      For a more explicit version in the case where R is of the form Presieve.ofArrows, see CategoryTheory.Presieve.Arrows.Compatible.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        If the category C has pullbacks, this is an alternative condition for a family of elements to be compatible: For any f : Y ⟶ X and g : Z ⟶ X in the presieve R, the restriction of the given elements for f and g to the pullback agree. This is equivalent to being compatible (provided C has pullbacks), shown in pullbackCompatible_iff.

        This is the definition for a "matching" family given in [MM92], Chapter III, Section 4, Equation (5). Viewing the type FamilyOfElements as the middle object of the fork in https://stacks.math.columbia.edu/tag/00VM, this condition expresses that pr₀* (x) = pr₁* (x), using the notation defined there.

        For a more explicit version in the case where R is of the form Presieve.ofArrows, see CategoryTheory.Presieve.Arrows.PullbackCompatible.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          Extend a family of elements to the sieve generated by an arrow set. This is the construction described as "easy" in Lemma C2.1.3 of [Elephant].

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For

            If the arrow set for a family of elements is actually a sieve (i.e. it is downward closed) then the consistency condition can be simplified. This is an equivalent condition, see compatible_iff_sieveCompatible.

            This is the notion of "matching" given for families on sieves given in [MM92], Chapter III, Section 4, Equation 1, and nlab: https://ncatlab.org/nlab/show/matching+family. See also the discussion before Lemma C2.1.4 of [Elephant].

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              @[simp]

              Given a family of elements x for the sieve S generated by a presieve R, if x is restricted to R and then extended back up to S, the resulting extension equals x.

              Compatible families of elements for a presheaf of types P and a presieve R are in 1-1 correspondence with compatible families for the same presheaf and the sieve generated by R, through extension and restriction.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For

                Given a family of elements of a sieve S on F(X), we can realize it as a family of elements of S.functorPullback F.

                Equations
                Instances For

                  Given a family of elements of a sieve S on X whose values factors through F, we can realize it as a family of elements of S.functorPushforward F. Since the preimage is obtained by choice, this is not well-defined generally.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For

                    Given a family of elements of a sieve S on X, and a map Y ⟶ X, we can obtain a family of elements of S.pullback f by taking the same elements.

                    Equations
                    Instances For

                      Given a morphism of presheaves f : P ⟶ Q, we can take a family of elements valued in P to a family of elements valued in Q by composing with f.

                      Equations
                      Instances For

                        The given element t of P.obj (op X) is an amalgamation for the family of elements x if every restriction P.map f.op t = x_f for every arrow f in the presieve R.

                        This is the definition given in https://ncatlab.org/nlab/show/sheaf#GeneralDefinitionInComponents, and https://ncatlab.org/nlab/show/matching+family, as well as [MM92], Chapter III, Section 4, equation (2).

                        Equations
                        Instances For

                          A presheaf is separated for a presieve if there is at most one amalgamation.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For
                            theorem CategoryTheory.Presieve.IsSeparatedFor.ext {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] {P : CategoryTheory.Functor Cᵒᵖ (Type w)} {X : C} {R : CategoryTheory.Presieve X} (hR : CategoryTheory.Presieve.IsSeparatedFor P R) {t₁ : P.toPrefunctor.obj (Opposite.op X)} {t₂ : P.toPrefunctor.obj (Opposite.op X)} (h : ∀ ⦃Y : C⦄ ⦃f : Y X⦄, R fP.toPrefunctor.map f.op t₁ = P.toPrefunctor.map f.op t₂) :
                            t₁ = t₂

                            We define P to be a sheaf for the presieve R if every compatible family has a unique amalgamation.

                            This is the definition of a sheaf for the given presieve given in C2.1.2 of [Elephant], and https://ncatlab.org/nlab/show/sheaf#GeneralDefinitionInComponents. Using compatible_iff_sieveCompatible, this is equivalent to the definition of a sheaf in [MM92], Chapter III, Section 4.

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For

                              This is an equivalent condition to be a sheaf, which is useful for the abstraction to local operators on elementary toposes. However this definition is defined only for sieves, not presieves. The equivalence between this and IsSheafFor is given in isSheafFor_iff_yonedaSheafCondition. This version is also useful to establish that being a sheaf is preserved under isomorphism of presheaves.

                              See the discussion before Equation (3) of [MM92], Chapter III, Section 4. See also C2.1.4 of [Elephant]. This is also a direct reformulation of .

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For

                                (Implementation). This is a (primarily internal) equivalence between natural transformations and compatible families.

                                Cf the discussion after Lemma 7.47.10 in . See also the proof of C2.1.4 of [Elephant], and the discussion in [MM92], Chapter III, Section 4.

                                Equations
                                • One or more equations did not get rendered due to their size.
                                Instances For
                                  theorem CategoryTheory.Presieve.extension_iff_amalgamation {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] {X : C} {S : CategoryTheory.Sieve X} {P : CategoryTheory.Functor Cᵒᵖ (Type v₁)} (x : CategoryTheory.Sieve.functor S P) (g : CategoryTheory.yoneda.toPrefunctor.obj X P) :
                                  CategoryTheory.CategoryStruct.comp (CategoryTheory.Sieve.functorInclusion S) g = x CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation ((CategoryTheory.Presieve.natTransEquivCompatibleFamily x)) (CategoryTheory.yonedaEquiv g)

                                  (Implementation). A lemma useful to prove isSheafFor_iff_yonedaSheafCondition.

                                  The yoneda version of the sheaf condition is equivalent to the sheaf condition.

                                  C2.1.4 of [Elephant].

                                  noncomputable def CategoryTheory.Presieve.IsSheafFor.extend {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] {X : C} {S : CategoryTheory.Sieve X} {P : CategoryTheory.Functor Cᵒᵖ (Type v₁)} (h : CategoryTheory.Presieve.IsSheafFor P S.arrows) (f : CategoryTheory.Sieve.functor S P) :
                                  CategoryTheory.yoneda.toPrefunctor.obj X P

                                  If P is a sheaf for the sieve S on X, a natural transformation from S (viewed as a functor) to P can be (uniquely) extended to all of yoneda.obj X.

                                    f
                                  

                                  S → P ↓ ↗ yX

                                  Equations
                                  • One or more equations did not get rendered due to their size.
                                  Instances For
                                    @[simp]

                                    Show that the extension of f : S.functor ⟶ P to all of yoneda.obj X is in fact an extension, ie that the triangle below commutes, provided P is a sheaf for S

                                      f
                                    

                                    S → P ↓ ↗ yX

                                    theorem CategoryTheory.Presieve.IsSheafFor.hom_ext {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] {X : C} {S : CategoryTheory.Sieve X} {P : CategoryTheory.Functor Cᵒᵖ (Type v₁)} (h : CategoryTheory.Presieve.IsSheafFor P S.arrows) (t₁ : CategoryTheory.yoneda.toPrefunctor.obj X P) (t₂ : CategoryTheory.yoneda.toPrefunctor.obj X P) (ht : CategoryTheory.CategoryStruct.comp (CategoryTheory.Sieve.functorInclusion S) t₁ = CategoryTheory.CategoryStruct.comp (CategoryTheory.Sieve.functorInclusion S) t₂) :
                                    t₁ = t₂

                                    If P is a sheaf for the sieve S on X, then if two natural transformations from yoneda.obj X to P agree when restricted to the subfunctor given by S, they are equal.

                                    Get the amalgamation of the given compatible family, provided we have a sheaf.

                                    Equations
                                    Instances For

                                      Every presheaf is a sheaf for the maximal sieve.

                                      [Elephant] C2.1.5(ii)

                                      If P is a sheaf for S, and it is iso to P', then P' is a sheaf for S. This shows that "being a sheaf for a presieve" is a mathematical or hygienic property.

                                      If a presieve R on X has a subsieve S such that:

                                      • P is a sheaf for S.
                                      • For every f in R, P is separated for the pullback of S along f,

                                      then P is a sheaf for R.

                                      This is closely related to [Elephant] C2.1.6(i).

                                      If P is a sheaf for every pullback of the sieve S, then P is a sheaf for any presieve which contains S. This is closely related to [Elephant] C2.1.6.

                                      def CategoryTheory.Presieve.Arrows.Compatible {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] (P : CategoryTheory.Functor Cᵒᵖ (Type w)) {B : C} {I : Type u_1} {X : IC} (π : (i : I) → X i B) (x : (i : I) → P.toPrefunctor.obj (Opposite.op (X i))) :

                                      A more explicit version of FamilyOfElements.Compatible for a Presieve.ofArrows.

                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      Instances For
                                        theorem CategoryTheory.Presieve.FamilyOfElements.isAmalgamation_iff_ofArrows {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] (P : CategoryTheory.Functor Cᵒᵖ (Type w)) {B : C} {I : Type u_1} {X : IC} (π : (i : I) → X i B) (x : CategoryTheory.Presieve.FamilyOfElements P (CategoryTheory.Presieve.ofArrows X π)) (t : P.toPrefunctor.obj (Opposite.op B)) :
                                        CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation x t ∀ (i : I), P.toPrefunctor.map (π i).op t = x (π i) (_ : CategoryTheory.Presieve.ofArrows X π (π i))
                                        theorem CategoryTheory.Presieve.Arrows.Compatible.exists_familyOfElements {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] {P : CategoryTheory.Functor Cᵒᵖ (Type w)} {B : C} {I : Type u_1} {X : IC} {π : (i : I) → X i B} {x : (i : I) → P.toPrefunctor.obj (Opposite.op (X i))} (hx : CategoryTheory.Presieve.Arrows.Compatible P π x) :
                                        noncomputable def CategoryTheory.Presieve.Arrows.Compatible.familyOfElements {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] {P : CategoryTheory.Functor Cᵒᵖ (Type w)} {B : C} {I : Type u_1} {X : IC} {π : (i : I) → X i B} {x : (i : I) → P.toPrefunctor.obj (Opposite.op (X i))} (hx : CategoryTheory.Presieve.Arrows.Compatible P π x) :

                                        A FamilyOfElements associated to an explicit family of elements.

                                        Equations
                                        • One or more equations did not get rendered due to their size.
                                        Instances For
                                          @[simp]
                                          theorem CategoryTheory.Presieve.Arrows.Compatible.familyOfElements_ofArrows_mk {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] {P : CategoryTheory.Functor Cᵒᵖ (Type w)} {B : C} {I : Type u_1} {X : IC} {π : (i : I) → X i B} {x : (i : I) → P.toPrefunctor.obj (Opposite.op (X i))} (hx : CategoryTheory.Presieve.Arrows.Compatible P π x) (i : I) :
                                          theorem CategoryTheory.Presieve.isSheafFor_arrows_iff {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] (P : CategoryTheory.Functor Cᵒᵖ (Type w)) {B : C} {I : Type u_1} {X : IC} (π : (i : I) → X i B) :
                                          CategoryTheory.Presieve.IsSheafFor P (CategoryTheory.Presieve.ofArrows X π) ∀ (x : (i : I) → P.toPrefunctor.obj (Opposite.op (X i))), CategoryTheory.Presieve.Arrows.Compatible P π x∃! (t : P.toPrefunctor.obj (Opposite.op B)), ∀ (i : I), P.toPrefunctor.map (π i).op t = x i
                                          def CategoryTheory.Presieve.Arrows.PullbackCompatible {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] (P : CategoryTheory.Functor Cᵒᵖ (Type w)) {B : C} {I : Type u_1} {X : IC} (π : (i : I) → X i B) [CategoryTheory.Presieve.hasPullbacks (CategoryTheory.Presieve.ofArrows X π)] (x : (i : I) → P.toPrefunctor.obj (Opposite.op (X i))) :

                                          A more explicit version of FamilyOfElements.PullbackCompatible for a Presieve.ofArrows.

                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For
                                            theorem CategoryTheory.Presieve.isSheafFor_arrows_iff_pullbacks {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] (P : CategoryTheory.Functor Cᵒᵖ (Type w)) {B : C} {I : Type u_1} {X : IC} (π : (i : I) → X i B) [CategoryTheory.Presieve.hasPullbacks (CategoryTheory.Presieve.ofArrows X π)] :
                                            CategoryTheory.Presieve.IsSheafFor P (CategoryTheory.Presieve.ofArrows X π) ∀ (x : (i : I) → P.toPrefunctor.obj (Opposite.op (X i))), CategoryTheory.Presieve.Arrows.PullbackCompatible P π x∃! (t : P.toPrefunctor.obj (Opposite.op B)), ∀ (i : I), P.toPrefunctor.map (π i).op t = x i