Documentation

Mathlib.CategoryTheory.Sites.Descent.IsPrestack

Prestacks: descent of morphisms #

Let C be a category and F : LocallyDiscrete Cᵒᵖ ⥤ᵖ Cat. Given S : C, and objects M and N in F.obj (.mk (op S)), we define a presheaf of types F.presheafHom M N on the category Over S: its sections on an object T : Over S corresponding to a morphism p : X ⟶ S are the type of morphisms p^* M ⟶ p^* N. We shall say that F satisfies the descent of morphisms for a Grothendieck topology J if these presheaves are all sheaves (typeclass F.IsPrestack J).

Terminological note #

In this file, we use the language of pseudofunctors to formalize prestacks. Similar notions could also be phrased in terms of fibered categories. In the mathematical literature, various uses of the words "prestacks" and "stacks" exists. Our definitions are consistent with Giraud's definition II 1.2.1 in Cohomologie non abélienne: a prestack is defined by the descent of morphisms condition with respect to a Grothendieck topology, and a stack by the effectiveness of the descent. However, contrary to Laumon and Moret-Bailly in Champs algébriques 3.1, we do not require that target categories are groupoids.

References #

def CategoryTheory.Pseudofunctor.LocallyDiscreteOpToCat.pullHom {C : Type u} [Category.{v, u} C] {F : Pseudofunctor (LocallyDiscrete Cᵒᵖ) Cat} X₁ X₂ : C M₁ : (F.obj { as := Opposite.op X₁ }) M₂ : (F.obj { as := Opposite.op X₂ }) Y : C f₁ : Y X₁ f₂ : Y X₂ (φ : (F.map f₁.op.toLoc).toFunctor.obj M₁ (F.map f₂.op.toLoc).toFunctor.obj M₂) Y' : C (g : Y' Y) (gf₁ : Y' X₁) (gf₂ : Y' X₂) (hgf₁ : CategoryStruct.comp g f₁ = gf₁ := by cat_disch) (hgf₂ : CategoryStruct.comp g f₂ = gf₂ := by cat_disch) :
(F.map gf₁.op.toLoc).toFunctor.obj M₁ (F.map gf₂.op.toLoc).toFunctor.obj M₂

Given a pseudofunctor F from LocallyDiscrete Cᵒᵖ to Cat, objects M₁ and M₂ of F over X₁ and X₂, morphisms f₁ : Y ⟶ X₁ and f₂ : Y ⟶ X₂, this is a version of the pullback map (f₁^* M₁ ⟶ f₂^* M₂) → (g^* (f₁^* M₁) ⟶ g^* (f₂^* M₂)) by a morphism g : Y' ⟶ Y, where we actually replace g^* (f₁^* M₁) by gf₁^* M₁ where gf₁ : Y' ⟶ X₁ is a morphism such that g ≫ f₁ = gf₁ (and similarly for M₂).

Equations
    Instances For
      theorem CategoryTheory.Pseudofunctor.LocallyDiscreteOpToCat.map_eq_pullHom {C : Type u} [Category.{v, u} C] {F : Pseudofunctor (LocallyDiscrete Cᵒᵖ) Cat} X₁ X₂ : C M₁ : (F.obj { as := Opposite.op X₁ }) M₂ : (F.obj { as := Opposite.op X₂ }) Y : C f₁ : Y X₁ f₂ : Y X₂ (φ : (F.map f₁.op.toLoc).toFunctor.obj M₁ (F.map f₂.op.toLoc).toFunctor.obj M₂) Y' : C (g : Y' Y) (gf₁ : Y' X₁) (gf₂ : Y' X₂) (hgf₁ : CategoryStruct.comp g f₁ = gf₁) (hgf₂ : CategoryStruct.comp g f₂ = gf₂) :
      (F.map g.op.toLoc).toFunctor.map φ = CategoryStruct.comp ((F.mapComp' f₁.op.toLoc g.op.toLoc gf₁.op.toLoc ).inv.toNatTrans.app M₁) (CategoryStruct.comp (pullHom φ g gf₁ gf₂ hgf₁ hgf₂) ((F.mapComp' f₂.op.toLoc g.op.toLoc gf₂.op.toLoc ).hom.toNatTrans.app M₂))
      theorem CategoryTheory.Pseudofunctor.LocallyDiscreteOpToCat.map_eq_pullHom_assoc {C : Type u} [Category.{v, u} C] {F : Pseudofunctor (LocallyDiscrete Cᵒᵖ) Cat} X₁ X₂ : C M₁ : (F.obj { as := Opposite.op X₁ }) M₂ : (F.obj { as := Opposite.op X₂ }) Y : C f₁ : Y X₁ f₂ : Y X₂ (φ : (F.map f₁.op.toLoc).toFunctor.obj M₁ (F.map f₂.op.toLoc).toFunctor.obj M₂) Y' : C (g : Y' Y) (gf₁ : Y' X₁) (gf₂ : Y' X₂) (hgf₁ : CategoryStruct.comp g f₁ = gf₁) (hgf₂ : CategoryStruct.comp g f₂ = gf₂) {Z : (F.obj { as := Opposite.op Y' })} (h : (F.map g.op.toLoc).toFunctor.obj ((F.map f₂.op.toLoc).toFunctor.obj M₂) Z) :
      CategoryStruct.comp ((F.map g.op.toLoc).toFunctor.map φ) h = CategoryStruct.comp ((F.mapComp' f₁.op.toLoc g.op.toLoc gf₁.op.toLoc ).inv.toNatTrans.app M₁) (CategoryStruct.comp (pullHom φ g gf₁ gf₂ hgf₁ hgf₂) (CategoryStruct.comp ((F.mapComp' f₂.op.toLoc g.op.toLoc gf₂.op.toLoc ).hom.toNatTrans.app M₂) h))
      @[simp]
      theorem CategoryTheory.Pseudofunctor.LocallyDiscreteOpToCat.pullHom_id {C : Type u} [Category.{v, u} C] {F : Pseudofunctor (LocallyDiscrete Cᵒᵖ) Cat} X₁ X₂ : C M₁ : (F.obj { as := Opposite.op X₁ }) M₂ : (F.obj { as := Opposite.op X₂ }) Y : C f₁ : Y X₁ f₂ : Y X₂ (φ : (F.map f₁.op.toLoc).toFunctor.obj M₁ (F.map f₂.op.toLoc).toFunctor.obj M₂) :
      pullHom φ (CategoryStruct.id Y) f₁ f₂ = φ
      @[simp]
      theorem CategoryTheory.Pseudofunctor.LocallyDiscreteOpToCat.pullHom_pullHom {C : Type u} [Category.{v, u} C] {F : Pseudofunctor (LocallyDiscrete Cᵒᵖ) Cat} X₁ X₂ : C M₁ : (F.obj { as := Opposite.op X₁ }) M₂ : (F.obj { as := Opposite.op X₂ }) Y : C f₁ : Y X₁ f₂ : Y X₂ (φ : (F.map f₁.op.toLoc).toFunctor.obj M₁ (F.map f₂.op.toLoc).toFunctor.obj M₂) Y' : C (g : Y' Y) (gf₁ : Y' X₁) (gf₂ : Y' X₂) Y'' : C (g' : Y'' Y') (g'f₁ : Y'' X₁) (g'f₂ : Y'' X₂) (hgf₁ : CategoryStruct.comp g f₁ = gf₁ := by cat_disch) (hgf₂ : CategoryStruct.comp g f₂ = gf₂ := by cat_disch) (hg'f₁ : CategoryStruct.comp g' gf₁ = g'f₁ := by cat_disch) (hg'f₂ : CategoryStruct.comp g' gf₂ = g'f₂ := by cat_disch) :
      pullHom (pullHom φ g gf₁ gf₂ hgf₁ hgf₂) g' g'f₁ g'f₂ hg'f₁ hg'f₂ = pullHom φ (CategoryStruct.comp g' g) g'f₁ g'f₂

      If F is a pseudofunctor from Cᵒᵖ to Cat, and M and N are objects in F.obj (.mk (op S)), this is the presheaf of morphisms from M to N: it sends an object T : Over S corresponding to a morphism p : X ⟶ S to the type of morphisms $p^* M ⟶ p^* N$.

      Equations
        Instances For
          @[simp]
          theorem CategoryTheory.Pseudofunctor.presheafHom_map {C : Type u} [Category.{v, u} C] (F : Pseudofunctor (LocallyDiscrete Cᵒᵖ) Cat) {S : C} (M N : (F.obj { as := Opposite.op S })) {T₁ T₂ : (Over S)ᵒᵖ} (p : T₁ T₂) (f : (F.map (Opposite.unop T₁).hom.op.toLoc).toFunctor.obj M (F.map (Opposite.unop T₁).hom.op.toLoc).toFunctor.obj N) :

          The bijection (M ⟶ N) ≃ (F.presheafHom M N).obj (op (Over.mk (𝟙 S))).

          Equations
            Instances For

              Compatibility isomorphism of Pseudofunctor.presheafHom with "restrictions".

              Equations
                Instances For

                  The property that a pseudofunctor F : LocallyDiscrete Cᵒᵖ ⥤ᵖ Cat satisfies the descent property for morphisms, i.e. is a prestack. (See the terminological note in the introduction of the file Sites.Descent.IsPrestack.)

                  Instances

                    If F is a prestack from Cᵒᵖ to Cat relatively to a Grothendieck topology J, and M and N are two objects in F.obj (.mk (op S)), this is the sheaf of morphisms from M to N: it sends an object T : Over S corresponding to a morphism p : X ⟶ S to the type of morphisms $p^* M ⟶ p^* N$.

                    Equations
                      Instances For