File: Mathlib/CategoryTheory/Sites/Whiskering.lean

full_name: CategoryTheory.GrothendieckTopology.HasSheafCompose.isSheaf
code: /-- Describes the property of a functor to "preserve sheaves". -/
class GrothendieckTopology.HasSheafCompose : Prop where
  /-- For every sheaf `P`, `P ⋙ F` is a sheaf. -/
  isSheaf (P : Cᵒᵖ ⥤ A) (hP : Presheaf.IsSheaf J P) : Presheaf.IsSheaf J (P ⋙ F)
goal: CategoryTheory.Presheaf.IsSheaf J (P.comp F)

full_name: CategoryTheory.GrothendieckTopology.HasSheafCompose
code: /-- Describes the property of a functor to "preserve sheaves". -/
class GrothendieckTopology.HasSheafCompose : Prop where
  /-- For every sheaf `P`, `P ⋙ F` is a sheaf. -/
  isSheaf (P : Cᵒᵖ ⥤ A) (hP : Presheaf.IsSheaf J P) : Presheaf.IsSheaf J (P ⋙ F)
goal: Prop

full_name: CategoryTheory.sheafCompose_map_val
code: /-- Composing a functor which `HasSheafCompose`, yields a functor between sheaf categories. -/
@[simps]
def sheafCompose : Sheaf J A ⥤ Sheaf J B 
goal: ∀ {X Y : CategoryTheory.Sheaf J A} (η : X ⟶ Y),
  ((CategoryTheory.sheafCompose J F).map η).val = CategoryTheory.whiskerRight η.val F

full_name: CategoryTheory.sheafCompose_obj_val
code: /-- Composing a functor which `HasSheafCompose`, yields a functor between sheaf categories. -/
@[simps]
def sheafCompose : Sheaf J A ⥤ Sheaf J B 
goal: ((CategoryTheory.sheafCompose J F).obj G).val = G.val.comp F

full_name: CategoryTheory.sheafCompose
code: /-- Composing a functor which `HasSheafCompose`, yields a functor between sheaf categories. -/
@[simps]
def sheafCompose : Sheaf J A ⥤ Sheaf J B 
goal: CategoryTheory.Functor (CategoryTheory.Sheaf J A) (CategoryTheory.Sheaf J B)

full_name: CategoryTheory.instFaithfulSheafFunctorOppositeCompSheafComposeSheafToPresheaf
code: instance [F.Faithful] : (sheafCompose J F ⋙ sheafToPresheaf _ _).Faithful 
goal: ((CategoryTheory.sheafCompose J F).comp (CategoryTheory.sheafToPresheaf J B)).Faithful

full_name: CategoryTheory.instFullSheafFunctorOppositeCompSheafComposeSheafToPresheafOfFaithful
code: instance [F.Faithful] [F.Full] : (sheafCompose J F ⋙ sheafToPresheaf _ _).Full 
goal: ((CategoryTheory.sheafCompose J F).comp (CategoryTheory.sheafToPresheaf J B)).Full

full_name: CategoryTheory.instFaithfulSheafSheafCompose
code: instance [F.Faithful] : (sheafCompose J F).Faithful 
goal: (CategoryTheory.sheafCompose J F).Faithful

full_name: CategoryTheory.instFullSheafSheafComposeOfFaithful
code: instance [F.Full] [F.Faithful] : (sheafCompose J F).Full 
goal: (CategoryTheory.sheafCompose J F).Full

full_name: CategoryTheory.instReflectsIsomorphismsSheafSheafCompose
code: instance [F.ReflectsIsomorphisms] : (sheafCompose J F).ReflectsIsomorphisms 
goal: (CategoryTheory.sheafCompose J F).ReflectsIsomorphisms

full_name: CategoryTheory.sheafCompose_map
code: /--
If `η : F ⟶ G` is a natural transformation then we obtain a morphism of functors
`sheafCompose J F ⟶ sheafCompose J G` by whiskering with `η` on the level of presheaves.
-/
def sheafCompose_map : sheafCompose J F ⟶ sheafCompose J G 
goal: CategoryTheory.sheafCompose J F ⟶ CategoryTheory.sheafCompose J G

full_name: CategoryTheory.sheafCompose_id
code: @[simp]
lemma sheafCompose_id : sheafCompose_map (F := F) J (𝟙 _) = 𝟙 _ 
goal: CategoryTheory.sheafCompose_map J (CategoryTheory.CategoryStruct.id F) =
  CategoryTheory.CategoryStruct.id (CategoryTheory.sheafCompose J F)

full_name: CategoryTheory.sheafCompose_comp
code: @[simp]
lemma sheafCompose_comp :
    sheafCompose_map J (η ≫ γ) = sheafCompose_map J η ≫ sheafCompose_map J γ 
goal: CategoryTheory.sheafCompose_map J (CategoryTheory.CategoryStruct.comp η γ) =
  CategoryTheory.CategoryStruct.comp (CategoryTheory.sheafCompose_map J η) (CategoryTheory.sheafCompose_map J γ)

full_name: CategoryTheory.GrothendieckTopology.Cover.multicospanComp_hom_app
code: /-- The multicospan associated to a cover `S : J.Cover X` and a presheaf of the form `P ⋙ F`
is isomorphic to the composition of the multicospan associated to `S` and `P`,
composed with `F`. -/
@[simps!]
def multicospanComp : (S.index (P ⋙ F)).multicospan ≅ (S.index P).multicospan ⋙ F 
goal: ∀ (X_1 : CategoryTheory.Limits.WalkingMulticospan (S.index (P.comp F)).fstTo (S.index (P.comp F)).sndTo),
  (CategoryTheory.GrothendieckTopology.Cover.multicospanComp F P S).hom.app X_1 =
    (match X_1 with
      | CategoryTheory.Limits.WalkingMulticospan.left a => CategoryTheory.Iso.refl (F.obj (P.obj (Opposite.op a.Y)))
      | CategoryTheory.Limits.WalkingMulticospan.right b =>
        CategoryTheory.Iso.refl (F.obj (P.obj (Opposite.op b.r.Z)))).hom

full_name: CategoryTheory.GrothendieckTopology.Cover.multicospanComp_inv_app
code: /-- The multicospan associated to a cover `S : J.Cover X` and a presheaf of the form `P ⋙ F`
is isomorphic to the composition of the multicospan associated to `S` and `P`,
composed with `F`. -/
@[simps!]
def multicospanComp : (S.index (P ⋙ F)).multicospan ≅ (S.index P).multicospan ⋙ F 
goal: ∀ (X_1 : CategoryTheory.Limits.WalkingMulticospan (S.index (P.comp F)).fstTo (S.index (P.comp F)).sndTo),
  (CategoryTheory.GrothendieckTopology.Cover.multicospanComp F P S).inv.app X_1 =
    (match X_1 with
      | CategoryTheory.Limits.WalkingMulticospan.left a => CategoryTheory.Iso.refl (F.obj (P.obj (Opposite.op a.Y)))
      | CategoryTheory.Limits.WalkingMulticospan.right b =>
        CategoryTheory.Iso.refl (F.obj (P.obj (Opposite.op b.r.Z)))).inv

full_name: CategoryTheory.GrothendieckTopology.Cover.multicospanComp
code: /-- The multicospan associated to a cover `S : J.Cover X` and a presheaf of the form `P ⋙ F`
is isomorphic to the composition of the multicospan associated to `S` and `P`,
composed with `F`. -/
@[simps!]
def multicospanComp : (S.index (P ⋙ F)).multicospan ≅ (S.index P).multicospan ⋙ F 
goal: (S.index (P.comp F)).multicospan ≅ (S.index P).multicospan.comp F

full_name: CategoryTheory.GrothendieckTopology.Cover.mapMultifork
code: /-- Mapping the multifork associated to a cover `S : J.Cover X` and a presheaf `P` with
respect to a functor `F` is isomorphic (upto a natural isomorphism of the underlying functors)
to the multifork associated to `S` and `P ⋙ F`. -/
def mapMultifork :
    F.mapCone (S.multifork P) ≅
      (Limits.Cones.postcompose (S.multicospanComp F P).hom).obj (S.multifork (P ⋙ F)) 
goal: F.mapCone (S.multifork P) ≅
  (CategoryTheory.Limits.Cones.postcompose (CategoryTheory.GrothendieckTopology.Cover.multicospanComp F P S).hom).obj
    (S.multifork (P.comp F))

full_name: CategoryTheory.hasSheafCompose_of_preservesMulticospan
code: /--
Composing a sheaf with a functor preserving the limit of `(S.index P).multicospan` yields a functor
between sheaf categories.
-/
instance hasSheafCompose_of_preservesMulticospan (F : A ⥤ B)
    [∀ (X : C) (S : J.Cover X) (P : Cᵒᵖ ⥤ A), PreservesLimit (S.index P).multicospan F] :
    J.HasSheafCompose F 
goal: J.HasSheafCompose F

full_name: CategoryTheory.hasSheafCompose_of_preservesLimitsOfSize
code: /--
Composing a sheaf with a functor preserving limits of the same size as the hom sets in `C` yields a
functor between sheaf categories.

Note: the size of the limit that `F` is required to preserve in
`hasSheafCompose_of_preservesMulticospan` is in general larger than this.
-/
instance hasSheafCompose_of_preservesLimitsOfSize [PreservesLimitsOfSize.{v₁, max u₁ v₁} F] :
    J.HasSheafCompose F 
goal: J.HasSheafCompose F

full_name: CategoryTheory.Sheaf.isSeparated
code: lemma Sheaf.isSeparated [ConcreteCategory A] [J.HasSheafCompose (forget A)]
    (F : Sheaf J A) : Presheaf.IsSeparated J F.val 
goal: CategoryTheory.Presheaf.IsSeparated J F.val

full_name: CategoryTheory.Presheaf.IsSheaf.isSeparated
code: lemma Presheaf.IsSheaf.isSeparated {F : Cᵒᵖ ⥤ A} [ConcreteCategory A]
    [J.HasSheafCompose (forget A)] (hF : Presheaf.IsSheaf J F) :
    Presheaf.IsSeparated J F 
goal: CategoryTheory.Presheaf.IsSeparated J F