File: Mathlib/CategoryTheory/Sites/PreservesSheafification.lean

full_name: CategoryTheory.GrothendieckTopology.PreservesSheafification.le
code: /-- A functor `F : A ⥤ B` preserves the sheafification for the Grothendieck
topology `J` on a category `C` if whenever a morphism of presheaves `f : P₁ ⟶ P₂`
in `Cᵒᵖ ⥤ A` is such that becomes an iso after sheafification, then it is
also the case of `whiskerRight f F : P₁ ⋙ F ⟶ P₂ ⋙ F`. -/
class PreservesSheafification : Prop where
  le : J.W ≤ J.W.inverseImage ((whiskeringRight Cᵒᵖ A B).obj F)
goal: J.W ≤ J.W.inverseImage ((CategoryTheory.whiskeringRight Cᵒᵖ A B).obj F)

full_name: CategoryTheory.GrothendieckTopology.PreservesSheafification
code: /-- A functor `F : A ⥤ B` preserves the sheafification for the Grothendieck
topology `J` on a category `C` if whenever a morphism of presheaves `f : P₁ ⟶ P₂`
in `Cᵒᵖ ⥤ A` is such that becomes an iso after sheafification, then it is
also the case of `whiskerRight f F : P₁ ⋙ F ⟶ P₂ ⋙ F`. -/
class PreservesSheafification : Prop where
  le : J.W ≤ J.W.inverseImage ((whiskeringRight Cᵒᵖ A B).obj F)
goal: Prop

full_name: CategoryTheory.GrothendieckTopology.W_of_preservesSheafification
code: lemma W_of_preservesSheafification
    {P₁ P₂ : Cᵒᵖ ⥤ A} (f : P₁ ⟶ P₂) (hf : J.W f) :
    J.W (whiskerRight f F) 
goal: J.W (CategoryTheory.whiskerRight f F)

full_name: CategoryTheory.GrothendieckTopology.W_isInvertedBy_whiskeringRight_presheafToSheaf
code: lemma W_isInvertedBy_whiskeringRight_presheafToSheaf :
    J.W.IsInvertedBy (((whiskeringRight Cᵒᵖ A B).obj F) ⋙ presheafToSheaf J B) 
goal: J.W.IsInvertedBy (((CategoryTheory.whiskeringRight Cᵒᵖ A B).obj F).comp (CategoryTheory.presheafToSheaf J B))

full_name: CategoryTheory.Sheaf.composeAndSheafify
code: /-- This is the functor sending a sheaf `X : Sheaf J A` to the sheafification
of `X.val ⋙ F`. -/
noncomputable abbrev Sheaf.composeAndSheafify : Sheaf J A ⥤ Sheaf J B 
goal: CategoryTheory.Functor (CategoryTheory.Sheaf J A) (CategoryTheory.Sheaf J B)

full_name: CategoryTheory.toPresheafToSheafCompComposeAndSheafify_app
code: /-- The canonical natural transformation from
`(whiskeringRight Cᵒᵖ A B).obj F ⋙ presheafToSheaf J B` to
`presheafToSheaf J A ⋙ Sheaf.composeAndSheafify J F`. -/
@[simps!]
noncomputable def toPresheafToSheafCompComposeAndSheafify :
    (whiskeringRight Cᵒᵖ A B).obj F ⋙ presheafToSheaf J B ⟶
      presheafToSheaf J A ⋙ Sheaf.composeAndSheafify J F 
goal: (CategoryTheory.toPresheafToSheafCompComposeAndSheafify J F).app X =
  (CategoryTheory.presheafToSheaf J B).map (CategoryTheory.whiskerRight (CategoryTheory.toSheafify J X) F)

full_name: CategoryTheory.toPresheafToSheafCompComposeAndSheafify
code: /-- The canonical natural transformation from
`(whiskeringRight Cᵒᵖ A B).obj F ⋙ presheafToSheaf J B` to
`presheafToSheaf J A ⋙ Sheaf.composeAndSheafify J F`. -/
@[simps!]
noncomputable def toPresheafToSheafCompComposeAndSheafify :
    (whiskeringRight Cᵒᵖ A B).obj F ⋙ presheafToSheaf J B ⟶
      presheafToSheaf J A ⋙ Sheaf.composeAndSheafify J F 
goal: ((CategoryTheory.whiskeringRight Cᵒᵖ A B).obj F).comp (CategoryTheory.presheafToSheaf J B) ⟶
  (CategoryTheory.presheafToSheaf J A).comp (CategoryTheory.Sheaf.composeAndSheafify J F)

full_name: CategoryTheory.instIsIsoFunctorOppositeSheafToPresheafToSheafCompComposeAndSheafify
code: instance : IsIso (toPresheafToSheafCompComposeAndSheafify J F) 
goal: CategoryTheory.IsIso (CategoryTheory.toPresheafToSheafCompComposeAndSheafify J F)

full_name: CategoryTheory.presheafToSheafCompComposeAndSheafifyIso_inv_app
code: /-- The canonical isomorphism between `presheafToSheaf J A ⋙ Sheaf.composeAndSheafify J F`
and `(whiskeringRight Cᵒᵖ A B).obj F ⋙ presheafToSheaf J B` when `F : A ⥤ B`
preserves sheafification. -/
@[simps! inv_app]
noncomputable def presheafToSheafCompComposeAndSheafifyIso :
    presheafToSheaf J A ⋙ Sheaf.composeAndSheafify J F ≅
      (whiskeringRight Cᵒᵖ A B).obj F ⋙ presheafToSheaf J B 
goal: (CategoryTheory.presheafToSheafCompComposeAndSheafifyIso J F).inv.app X =
  (CategoryTheory.presheafToSheaf J B).map (CategoryTheory.whiskerRight (CategoryTheory.toSheafify J X) F)

full_name: CategoryTheory.presheafToSheafCompComposeAndSheafifyIso
code: /-- The canonical isomorphism between `presheafToSheaf J A ⋙ Sheaf.composeAndSheafify J F`
and `(whiskeringRight Cᵒᵖ A B).obj F ⋙ presheafToSheaf J B` when `F : A ⥤ B`
preserves sheafification. -/
@[simps! inv_app]
noncomputable def presheafToSheafCompComposeAndSheafifyIso :
    presheafToSheaf J A ⋙ Sheaf.composeAndSheafify J F ≅
      (whiskeringRight Cᵒᵖ A B).obj F ⋙ presheafToSheaf J B 
goal: (CategoryTheory.presheafToSheaf J A).comp (CategoryTheory.Sheaf.composeAndSheafify J F) ≅
  ((CategoryTheory.whiskeringRight Cᵒᵖ A B).obj F).comp (CategoryTheory.presheafToSheaf J B)

full_name: CategoryTheory.instLiftingFunctorOppositeSheafPresheafToSheafWCompObjWhiskeringRightComposeAndSheafify
code: noncomputable instance : Localization.Lifting (presheafToSheaf J A) J.W
    ((whiskeringRight Cᵒᵖ A B).obj F ⋙ presheafToSheaf J B) (Sheaf.composeAndSheafify J F) 
goal: CategoryTheory.Localization.Lifting (CategoryTheory.presheafToSheaf J A) J.W
  (((CategoryTheory.whiskeringRight Cᵒᵖ A B).obj F).comp (CategoryTheory.presheafToSheaf J B))
  (CategoryTheory.Sheaf.composeAndSheafify J F)

full_name: CategoryTheory.GrothendieckTopology.preservesSheafification_iff_of_adjunctions
code: lemma GrothendieckTopology.preservesSheafification_iff_of_adjunctions :
    J.PreservesSheafification F ↔ ∀ (P : Cᵒᵖ ⥤ A),
      IsIso (G₂.map (whiskerRight (adj₁.unit.app P) F)) 
goal: J.PreservesSheafification F ↔
  ∀ (P : CategoryTheory.Functor Cᵒᵖ A), CategoryTheory.IsIso (G₂.map (CategoryTheory.whiskerRight (adj₁.unit.app P) F))

full_name: CategoryTheory.sheafComposeNatTrans
code: /-- The canonical natural transformation
`(whiskeringRight Cᵒᵖ A B).obj F ⋙ G₂ ⟶ G₁ ⋙ sheafCompose J F`
when `F : A ⥤ B` is such that `J.HasSheafCompose F`, and that `G₁` and `G₂` are
left adjoints to the forget functors `sheafToPresheaf`. -/
def sheafComposeNatTrans :
    (whiskeringRight Cᵒᵖ A B).obj F ⋙ G₂ ⟶ G₁ ⋙ sheafCompose J F 
goal: ((CategoryTheory.whiskeringRight Cᵒᵖ A B).obj F).comp G₂ ⟶ G₁.comp (CategoryTheory.sheafCompose J F)

full_name: CategoryTheory.sheafComposeNatTrans_fac
code: lemma sheafComposeNatTrans_fac (P : Cᵒᵖ ⥤ A) :
    adj₂.unit.app (P ⋙ F) ≫
      (sheafToPresheaf J B).map ((sheafComposeNatTrans J F adj₁ adj₂).app P) =
        whiskerRight (adj₁.unit.app P) F  
goal: CategoryTheory.CategoryStruct.comp (adj₂.unit.app (P.comp F))
    ((CategoryTheory.sheafToPresheaf J B).map ((CategoryTheory.sheafComposeNatTrans J F adj₁ adj₂).app P)) =
  CategoryTheory.whiskerRight (adj₁.unit.app P) F

full_name: CategoryTheory.sheafComposeNatTrans_app_uniq
code: lemma sheafComposeNatTrans_app_uniq (P : Cᵒᵖ ⥤ A)
    (α : G₂.obj (P ⋙ F) ⟶ (sheafCompose J F).obj (G₁.obj P))
    (hα : adj₂.unit.app (P ⋙ F) ≫ (sheafToPresheaf J B).map α =
        whiskerRight (adj₁.unit.app P) F) :
    α = (sheafComposeNatTrans J F adj₁ adj₂).app P 
goal: α = (CategoryTheory.sheafComposeNatTrans J F adj₁ adj₂).app P

full_name: CategoryTheory.GrothendieckTopology.preservesSheafification_iff_of_adjunctions_of_hasSheafCompose
code: lemma GrothendieckTopology.preservesSheafification_iff_of_adjunctions_of_hasSheafCompose :
    J.PreservesSheafification F ↔ IsIso (sheafComposeNatTrans J F adj₁ adj₂) 
goal: J.PreservesSheafification F ↔ CategoryTheory.IsIso (CategoryTheory.sheafComposeNatTrans J F adj₁ adj₂)

full_name: CategoryTheory.instIsIsoFunctorOppositeSheafSheafComposeNatTrans
code: instance : IsIso (sheafComposeNatTrans J F adj₁ adj₂) 
goal: CategoryTheory.IsIso (CategoryTheory.sheafComposeNatTrans J F adj₁ adj₂)

full_name: CategoryTheory.sheafComposeNatIso
code: /-- The canonical natural isomorphism
`(whiskeringRight Cᵒᵖ A B).obj F ⋙ G₂ ≅ G₁ ⋙ sheafCompose J F`
when `F : A ⥤ B` preserves sheafification, and that `G₁` and `G₂` are
left adjoints to the forget functors `sheafToPresheaf`. -/
noncomputable def sheafComposeNatIso :
    (whiskeringRight Cᵒᵖ A B).obj F ⋙ G₂ ≅ G₁ ⋙ sheafCompose J F 
goal: ((CategoryTheory.whiskeringRight Cᵒᵖ A B).obj F).comp G₂ ≅ G₁.comp (CategoryTheory.sheafCompose J F)

full_name: CategoryTheory.sheafifyComposeIso
code: /-- The canonical isomorphism `sheafify J (P ⋙ F) ≅ sheafify J P ⋙ F` when
`F` preserves the sheafification. -/
noncomputable def sheafifyComposeIso :
    sheafify J (P ⋙ F) ≅ sheafify J P ⋙ F 
goal: CategoryTheory.sheafify J (P.comp F) ≅ (CategoryTheory.sheafify J P).comp F

full_name: CategoryTheory.sheafComposeIso_hom_fac
code: @[reassoc (attr := simp)]
lemma sheafComposeIso_hom_fac :
    toSheafify J (P ⋙ F) ≫ (sheafifyComposeIso J F P).hom =
      whiskerRight (toSheafify J P) F 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.toSheafify J (P.comp F))
    (CategoryTheory.sheafifyComposeIso J F P).hom =
  CategoryTheory.whiskerRight (CategoryTheory.toSheafify J P) F

full_name: CategoryTheory.sheafComposeIso_inv_fac
code: @[reassoc (attr := simp)]
lemma sheafComposeIso_inv_fac :
    whiskerRight (toSheafify J P) F ≫ (sheafifyComposeIso J F P).inv =
      toSheafify J (P ⋙ F) 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.whiskerRight (CategoryTheory.toSheafify J P) F)
    (CategoryTheory.sheafifyComposeIso J F P).inv =
  CategoryTheory.toSheafify J (P.comp F)

full_name: CategoryTheory.GrothendieckTopology.sheafToPresheaf_map_sheafComposeNatTrans_eq_sheafifyCompIso_inv
code: lemma sheafToPresheaf_map_sheafComposeNatTrans_eq_sheafifyCompIso_inv (P : Cᵒᵖ ⥤ D) :
    (sheafToPresheaf J E).map
      ((sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P) =
      (sheafifyCompIso J F P).inv 
goal: (CategoryTheory.sheafToPresheaf J E).map
    ((CategoryTheory.sheafComposeNatTrans J F (CategoryTheory.plusPlusAdjunction J D)
          (CategoryTheory.plusPlusAdjunction J E)).app
      P) =
  (J.sheafifyCompIso F P).inv

full_name: CategoryTheory.GrothendieckTopology.instIsIsoSheafAppFunctorOppositeSheafComposeNatTransPlusPlusAdjunction
code: instance (P : Cᵒᵖ ⥤ D) :
    IsIso ((sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P) 
goal: CategoryTheory.IsIso
  ((CategoryTheory.sheafComposeNatTrans J F (CategoryTheory.plusPlusAdjunction J D)
        (CategoryTheory.plusPlusAdjunction J E)).app
    P)

full_name: CategoryTheory.GrothendieckTopology.instIsIsoFunctorOppositeSheafSheafComposeNatTransPlusPlusAdjunction
code: instance : IsIso (sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)) 
goal: CategoryTheory.IsIso
  (CategoryTheory.sheafComposeNatTrans J F (CategoryTheory.plusPlusAdjunction J D)
    (CategoryTheory.plusPlusAdjunction J E))

full_name: CategoryTheory.GrothendieckTopology.instPreservesSheafification
code: instance : PreservesSheafification J F 
goal: J.PreservesSheafification F