ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- CategoryTheory.GrothendieckTopology.liftToPlusObjLimitObj_fac
theorem liftToPlusObjLimitObj_fac {K : Type max v u} [SmallCategory K] [FinCategory K]
    [HasLimitsOfShape K D] [PreservesLimitsOfShape K (forget D)]
    [ReflectsLimitsOfShape K (forget D)] (F : K ⥤ Cᵒᵖ ⥤ D) (X : C)
    (S : Cone (F ⋙ J.plusFunctor D ⋙ (evaluation Cᵒᵖ D).obj (op X))) (k) :
    liftToPlusObjLimitObj.{w, v, u} F X S ≫ (J.plusMap (limit.π F k)).app (op X) = S.π.app k 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {J : CategoryTheory.GrothendieckTopology C} {D : Type w} [CategoryTheory.Category.{max v u, w} D] [∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), CategoryTheory.Limits.HasMultiequalizer (S.index P)] [∀ (X : C), CategoryTheory.Limits.HasColimitsOfShape (J.Cover X)ᵒᵖ D] [CategoryTheory.ConcreteCategory D] [(X : C) → CategoryTheory.Limits.PreservesColimitsOfShape (J.Cover X)ᵒᵖ (CategoryTheory.forget D)] {K : Type (max v u)} [CategoryTheory.SmallCategory K] [CategoryTheory.FinCategory K] [CategoryTheory.Limits.HasLimitsOfShape K D] [CategoryTheory.Limits.PreservesLimitsOfShape K (CategoryTheory.forget D)] [CategoryTheory.Limits.ReflectsLimitsOfShape K (CategoryTheory.forget D)] (F : K ⥤ Cᵒᵖ ⥤ D) (X : C) (S : CategoryTheory.Limits.Cone (F ⋙ J.plusFunctor D ⋙ (CategoryTheory.evaluation Cᵒᵖ D).obj (Opposite.op X))) (k : K)
Goal: CategoryTheory.GrothendieckTopology.liftToPlusObjLimitObj F X S ≫
    (J.plusMap (CategoryTheory.Limits.limit.π F k)).app (Opposite.op X) =
  S.π.app k
-- CategoryTheory.toSheafify_plusPlusIsoSheafify_hom
@[reassoc (attr := simp)]
lemma toSheafify_plusPlusIsoSheafify_hom (P : Cᵒᵖ ⥤ D) :
    J.toSheafify P ≫ (plusPlusIsoSheafify J D P).hom = toSheafify J P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] (J : CategoryTheory.GrothendieckTopology C) (D : Type w) [CategoryTheory.Category.{max v u, w} D] [∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), CategoryTheory.Limits.HasMultiequalizer (S.index P)] [∀ (X : C), CategoryTheory.Limits.HasColimitsOfShape (J.Cover X)ᵒᵖ D] [CategoryTheory.ConcreteCategory D] [(X : C) → CategoryTheory.Limits.PreservesColimitsOfShape (J.Cover X)ᵒᵖ (CategoryTheory.forget D)] [CategoryTheory.Limits.PreservesLimits (CategoryTheory.forget D)] [(CategoryTheory.forget D).ReflectsIsomorphisms] (P : Cᵒᵖ ⥤ D)
Goal: J.toSheafify P ≫ (CategoryTheory.plusPlusIsoSheafify J D P).hom = CategoryTheory.toSheafify J P
-- CategoryTheory.Sheaf.isSheafFor_bind
theorem isSheafFor_bind (P : Cᵒᵖ ⥤ Type v) (U : Sieve X) (B : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄, U f → Sieve Y)
    (hU : Presieve.IsSheafFor P (U : Presieve X))
    (hB : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (hf : U f), Presieve.IsSheafFor P (B hf : Presieve Y))
    (hB' : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (h : U f) ⦃Z⦄ (g : Z ⟶ Y),
      Presieve.IsSeparatedFor P (((B h).pullback g) : Presieve Z)) :
    Presieve.IsSheafFor P (Sieve.bind (U : Presieve X) B : Presieve X) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} (P : CategoryTheory.Functor Cᵒᵖ (Type v)) (U : CategoryTheory.Sieve X) (B : ⦃Y : C⦄ → ⦃f : Y ⟶ X⦄ → U.arrows f → CategoryTheory.Sieve Y) (hU : CategoryTheory.Presieve.IsSheafFor P U.arrows) (hB : ∀ ⦃Y : C⦄ ⦃f : Y ⟶ X⦄ (hf : U.arrows f), CategoryTheory.Presieve.IsSheafFor P (B hf).arrows) (hB' :
  ∀ ⦃Y : C⦄ ⦃f : Y ⟶ X⦄ (h : U.arrows f) ⦃Z : C⦄ (g : Z ⟶ Y),
    CategoryTheory.Presieve.IsSeparatedFor P (CategoryTheory.Sieve.pullback g (B h)).arrows)
Goal: CategoryTheory.Presieve.IsSheafFor P (CategoryTheory.Sieve.bind U.arrows B).arrows
-- CategoryTheory.Sheaf.isSheafFor_trans
theorem isSheafFor_trans (P : Cᵒᵖ ⥤ Type v) (R S : Sieve X)
    (hR : Presieve.IsSheafFor P (R : Presieve X))
    (hR' : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (_ : S f), Presieve.IsSeparatedFor P (R.pullback f : Presieve Y))
    (hS : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (_ : R f), Presieve.IsSheafFor P (S.pullback f : Presieve Y)) :
    Presieve.IsSheafFor P (S : Presieve X) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} (P : CategoryTheory.Functor Cᵒᵖ (Type v)) (R S : CategoryTheory.Sieve X) (hR : CategoryTheory.Presieve.IsSheafFor P R.arrows) (hR' :
  ∀ ⦃Y : C⦄ ⦃f : Y ⟶ X⦄,
    S.arrows f → CategoryTheory.Presieve.IsSeparatedFor P (CategoryTheory.Sieve.pullback f R).arrows) (hS :
  ∀ ⦃Y : C⦄ ⦃f : Y ⟶ X⦄, R.arrows f → CategoryTheory.Presieve.IsSheafFor P (CategoryTheory.Sieve.pullback f S).arrows)
Goal: CategoryTheory.Presieve.IsSheafFor P S.arrows
-- CategoryTheory.Sheaf.sheaf_for_finestTopology
theorem sheaf_for_finestTopology (Ps : Set (Cᵒᵖ ⥤ Type v)) (h : P ∈ Ps) :
    Presieve.IsSheaf (finestTopology Ps) P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {P : CategoryTheory.Functor Cᵒᵖ (Type v)} (Ps : Set (CategoryTheory.Functor Cᵒᵖ (Type v))) (h : P ∈ Ps)
Goal: CategoryTheory.Presieve.IsSheaf (CategoryTheory.Sheaf.finestTopology Ps) P
-- CategoryTheory.Sheaf.le_finestTopology
theorem le_finestTopology (Ps : Set (Cᵒᵖ ⥤ Type v)) (J : GrothendieckTopology C)
    (hJ : ∀ P ∈ Ps, Presieve.IsSheaf J P) : J ≤ finestTopology Ps 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] (Ps : Set (CategoryTheory.Functor Cᵒᵖ (Type v))) (J : CategoryTheory.GrothendieckTopology C) (hJ : ∀ P ∈ Ps, CategoryTheory.Presieve.IsSheaf J P)
Goal: J ≤ CategoryTheory.Sheaf.finestTopology Ps
-- CategoryTheory.Sheaf.isSheaf_yoneda_obj
theorem isSheaf_yoneda_obj (X : C) : Presieve.IsSheaf (canonicalTopology C) (yoneda.obj X) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] (X : C)
Goal: CategoryTheory.Presieve.IsSheaf (CategoryTheory.Sheaf.canonicalTopology C) (CategoryTheory.yoneda.obj X)
-- CategoryTheory.Sheaf.isSheaf_of_representable
theorem isSheaf_of_representable (P : Cᵒᵖ ⥤ Type v) [P.Representable] :
    Presieve.IsSheaf (canonicalTopology C) P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] (P : CategoryTheory.Functor Cᵒᵖ (Type v)) [P.Representable]
Goal: CategoryTheory.Presieve.IsSheaf (CategoryTheory.Sheaf.canonicalTopology C) P
-- CategoryTheory.Sheaf.Subcanonical.of_yoneda_isSheaf
theorem of_yoneda_isSheaf (J : GrothendieckTopology C)
    (h : ∀ X, Presieve.IsSheaf J (yoneda.obj X)) : Subcanonical J 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] (J : CategoryTheory.GrothendieckTopology C) (h : ∀ (X : C), CategoryTheory.Presieve.IsSheaf J (CategoryTheory.yoneda.obj X))
Goal: CategoryTheory.Sheaf.Subcanonical J
-- CategoryTheory.Sheaf.Subcanonical.isSheaf_of_representable
theorem isSheaf_of_representable {J : GrothendieckTopology C} (hJ : Subcanonical J)
    (P : Cᵒᵖ ⥤ Type v) [P.Representable] : Presieve.IsSheaf J P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {J : CategoryTheory.GrothendieckTopology C} (hJ : CategoryTheory.Sheaf.Subcanonical J) (P : CategoryTheory.Functor Cᵒᵖ (Type v)) [P.Representable]
Goal: CategoryTheory.Presieve.IsSheaf J P
-- CategoryTheory.Sheaf.Subcanonical.yoneda_map_val
@[simps]
def yoneda (hJ : Subcanonical J) : C ⥤ Sheaf J (Type v) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {J : CategoryTheory.GrothendieckTopology C} (hJ : CategoryTheory.Sheaf.Subcanonical J)
Goal: ∀ {X Y : C} (f : X ⟶ Y), (hJ.yoneda.map f).val = CategoryTheory.yoneda.map f
-- CategoryTheory.Sheaf.Subcanonical.yoneda_obj_val
@[simps]
def yoneda (hJ : Subcanonical J) : C ⥤ Sheaf J (Type v) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {J : CategoryTheory.GrothendieckTopology C} (hJ : CategoryTheory.Sheaf.Subcanonical J) (X : C)
Goal: (hJ.yoneda.obj X).val = CategoryTheory.yoneda.obj X
-- CategoryTheory.Sheaf.isDiscrete_of_iso
lemma isDiscrete_of_iso {F : Sheaf J A} {X : A}
    (i : F ≅ (constantSheaf J A).obj X) : IsDiscrete J ht F 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] (J : CategoryTheory.GrothendieckTopology C) {A : Type u_2} [CategoryTheory.Category.{u_4, u_2} A] [CategoryTheory.HasWeakSheafify J A] [(CategoryTheory.constantSheaf J A).Faithful] [(CategoryTheory.constantSheaf J A).Full] {t : C} (ht : CategoryTheory.Limits.IsTerminal t) {F : CategoryTheory.Sheaf J A} {X : A} (i : F ≅ (CategoryTheory.constantSheaf J A).obj X)
Goal: CategoryTheory.Sheaf.IsDiscrete J ht F
-- CategoryTheory.Sheaf.isDiscrete_iff_mem_essImage
lemma isDiscrete_iff_mem_essImage (F : Sheaf J A) :
    F.IsDiscrete J ht ↔ F ∈ (constantSheaf J A).essImage 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_3, u_1} C] (J : CategoryTheory.GrothendieckTopology C) {A : Type u_2} [CategoryTheory.Category.{u_4, u_2} A] [CategoryTheory.HasWeakSheafify J A] [(CategoryTheory.constantSheaf J A).Faithful] [(CategoryTheory.constantSheaf J A).Full] {t : C} (ht : CategoryTheory.Limits.IsTerminal t) (F : CategoryTheory.Sheaf J A)
Goal: CategoryTheory.Sheaf.IsDiscrete J ht F ↔ F ∈ (CategoryTheory.constantSheaf J A).essImage
-- CategoryTheory.Sheaf.isDiscrete_iff_mem_essImage'
lemma isDiscrete_iff_mem_essImage' {L : A ⥤ Sheaf J A} (adj : L ⊣ (sheafSections J A).obj ⟨t⟩)
    (F : Sheaf J A) :
    IsDiscrete J ht F ↔ F ∈ L.essImage 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_4, u_1} C] (J : CategoryTheory.GrothendieckTopology C) {A : Type u_2} [CategoryTheory.Category.{u_3, u_2} A] [CategoryTheory.HasWeakSheafify J A] [(CategoryTheory.constantSheaf J A).Faithful] [(CategoryTheory.constantSheaf J A).Full] {t : C} (ht : CategoryTheory.Limits.IsTerminal t) {L : A ⥤ CategoryTheory.Sheaf J A} (adj : L ⊣ (CategoryTheory.sheafSections J A).obj (Opposite.op t)) (F : CategoryTheory.Sheaf J A)
Goal: CategoryTheory.Sheaf.IsDiscrete J ht F ↔ F ∈ L.essImage
-- CategoryTheory.Sheaf.isDiscrete_iff_isIso_counit_app
lemma isDiscrete_iff_isIso_counit_app {L : A ⥤ Sheaf J A} (adj : L ⊣ (sheafSections J A).obj ⟨t⟩)
    (F : Sheaf J A) :
    IsDiscrete J ht F ↔ IsIso (adj.counit.app F) 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_4, u_1} C] (J : CategoryTheory.GrothendieckTopology C) {A : Type u_2} [CategoryTheory.Category.{u_3, u_2} A] [CategoryTheory.HasWeakSheafify J A] [(CategoryTheory.constantSheaf J A).Faithful] [(CategoryTheory.constantSheaf J A).Full] {t : C} (ht : CategoryTheory.Limits.IsTerminal t) {L : A ⥤ CategoryTheory.Sheaf J A} (adj : L ⊣ (CategoryTheory.sheafSections J A).obj (Opposite.op t)) (F : CategoryTheory.Sheaf J A)
Goal: CategoryTheory.Sheaf.IsDiscrete J ht F ↔ CategoryTheory.IsIso (adj.counit.app F)
-- CategoryTheory.Sheaf.isDiscrete_iff_of_equivalence
lemma isDiscrete_iff_of_equivalence (F : Sheaf K A) :
    let e : Sheaf J A ≌ Sheaf K A :=
      sheafEquiv G J K A
    haveI : (constantSheaf K A).Faithful :=
      Functor.Faithful.of_iso (equivCommuteConstant J A ht K G ht')
    haveI : (constantSheaf K A).Full :=
      Functor.Full.of_iso (equivCommuteConstant J A ht K G ht')
    (e.inverse.obj F).IsDiscrete J ht ↔ IsDiscrete K ht' F 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_6, u_1} C] (J : CategoryTheory.GrothendieckTopology C) {A : Type u_2} [CategoryTheory.Category.{u_5, u_2} A] [CategoryTheory.HasWeakSheafify J A] {t : C} (ht : CategoryTheory.Limits.IsTerminal t) {D : Type u_3} [CategoryTheory.Category.{u_4, u_3} D] (K : CategoryTheory.GrothendieckTopology D) [CategoryTheory.HasWeakSheafify K A] (G : C ⥤ D) [∀ (X : Dᵒᵖ), CategoryTheory.Limits.HasLimitsOfShape (CategoryTheory.StructuredArrow X G.op) A] [CategoryTheory.Functor.IsDenseSubsite J K G] (ht' : CategoryTheory.Limits.IsTerminal (G.obj t)) [(CategoryTheory.constantSheaf J A).Faithful] [(CategoryTheory.constantSheaf J A).Full] (F : CategoryTheory.Sheaf K A)
Goal: let e := CategoryTheory.Functor.IsDenseSubsite.sheafEquiv G J K A;
CategoryTheory.Sheaf.IsDiscrete J ht (e.inverse.obj F) ↔ CategoryTheory.Sheaf.IsDiscrete K ht' F
-- CategoryTheory.Sheaf.constantCommuteCompose_inv_app_val_app
@[simps!]
noncomputable def constantCommuteCompose :
    constantSheaf J A ⋙ sheafCompose J U ≅ U ⋙ constantSheaf J B 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_4, u_1} C] (J : CategoryTheory.GrothendieckTopology C) {A : Type u_2} [CategoryTheory.Category.{u_5, u_2} A] {B : Type u_3} [CategoryTheory.Category.{u_6, u_3} B] (U : A ⥤ B) [CategoryTheory.HasWeakSheafify J A] [CategoryTheory.HasWeakSheafify J B] [J.PreservesSheafification U] [J.HasSheafCompose U] (X : A)
Goal: ∀ (X_1 : Cᵒᵖ),
  ((CategoryTheory.Sheaf.constantCommuteCompose J U).inv.app X).val.app X_1 =
    ((CategoryTheory.presheafToSheaf J B).map ((CategoryTheory.Functor.compConstIso Cᵒᵖ U).hom.app X)).val.app X_1 ≫
      ((CategoryTheory.sheafComposeNatIso J U (CategoryTheory.sheafificationAdjunction J A)
                    (CategoryTheory.sheafificationAdjunction J B)).hom.app
              ((CategoryTheory.Functor.const Cᵒᵖ).obj X)).val.app
        X_1
-- CategoryTheory.Sheaf.constantCommuteCompose_hom_app_val_app
@[simps!]
noncomputable def constantCommuteCompose :
    constantSheaf J A ⋙ sheafCompose J U ≅ U ⋙ constantSheaf J B 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_4, u_1} C] (J : CategoryTheory.GrothendieckTopology C) {A : Type u_2} [CategoryTheory.Category.{u_5, u_2} A] {B : Type u_3} [CategoryTheory.Category.{u_6, u_3} B] (U : A ⥤ B) [CategoryTheory.HasWeakSheafify J A] [CategoryTheory.HasWeakSheafify J B] [J.PreservesSheafification U] [J.HasSheafCompose U] (X : A)
Goal: ∀ (X_1 : Cᵒᵖ),
  ((CategoryTheory.Sheaf.constantCommuteCompose J U).hom.app X).val.app X_1 =
    ((CategoryTheory.sheafComposeNatIso J U (CategoryTheory.sheafificationAdjunction J A)
                    (CategoryTheory.sheafificationAdjunction J B)).inv.app
              ((CategoryTheory.Functor.const Cᵒᵖ).obj X)).val.app
        X_1 ≫
      ((CategoryTheory.presheafToSheaf J B).map ((CategoryTheory.Functor.compConstIso Cᵒᵖ U).inv.app X)).val.app X_1
-- CategoryTheory.Sheaf.sheafComposeNatIso_app_counit
lemma sheafComposeNatIso_app_counit (P : Sheaf J A) :
    (sheafComposeNatIso J U (sheafificationAdjunction J A)
      (sheafificationAdjunction J B)).hom.app _ ≫ (sheafCompose J U).map
        ((sheafificationAdjunction J A).counit.app P) =
          (sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj P) 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_4, u_1} C] (J : CategoryTheory.GrothendieckTopology C) {A : Type u_2} [CategoryTheory.Category.{u_5, u_2} A] {B : Type u_3} [CategoryTheory.Category.{u_6, u_3} B] (U : A ⥤ B) [CategoryTheory.HasWeakSheafify J A] [CategoryTheory.HasWeakSheafify J B] [J.PreservesSheafification U] [J.HasSheafCompose U] (P : CategoryTheory.Sheaf J A)
Goal: (CategoryTheory.sheafComposeNatIso J U (CategoryTheory.sheafificationAdjunction J A)
            (CategoryTheory.sheafificationAdjunction J B)).hom.app
      ((CategoryTheory.sheafToPresheaf J A).obj P) ≫
    (CategoryTheory.sheafCompose J U).map ((CategoryTheory.sheafificationAdjunction J A).counit.app P) =
  (CategoryTheory.sheafificationAdjunction J B).counit.app ((CategoryTheory.sheafCompose J U).obj P)
-- CategoryTheory.Sheaf.constantCommuteComposeApp_comp_counit
lemma constantCommuteComposeApp_comp_counit (F : Sheaf J A) :
    ((constantCommuteCompose J U).app _).hom ≫
      (constantSheafAdj J B ht).counit.app ((sheafCompose J U).obj F) =
        (sheafCompose J U).map ((constantSheafAdj J A ht).counit.app F) 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_4, u_1} C] (J : CategoryTheory.GrothendieckTopology C) {A : Type u_2} [CategoryTheory.Category.{u_5, u_2} A] {t : C} (ht : CategoryTheory.Limits.IsTerminal t) {B : Type u_3} [CategoryTheory.Category.{u_6, u_3} B] (U : A ⥤ B) [CategoryTheory.HasWeakSheafify J A] [CategoryTheory.HasWeakSheafify J B] [J.PreservesSheafification U] [J.HasSheafCompose U] (F : CategoryTheory.Sheaf J A)
Goal: ((CategoryTheory.Sheaf.constantCommuteCompose J U).app (F.val.obj (Opposite.op t))).hom ≫
    (CategoryTheory.constantSheafAdj J B ht).counit.app ((CategoryTheory.sheafCompose J U).obj F) =
  (CategoryTheory.sheafCompose J U).map ((CategoryTheory.constantSheafAdj J A ht).counit.app F)
-- _private.Mathlib.CategoryTheory.Sites.Discrete.0.CategoryTheory.Sheaf.sheafifyComposeIso_comp_sheafCompose_map_constantSheafAdj_counit
private lemma sheafifyComposeIso_comp_sheafCompose_map_constantSheafAdj_counit :
  (sheafifyComposeIso J U ((const Cᵒᵖ).obj (F.val.obj { unop := t }))).hom ≫
    ((sheafCompose J U).map ((constantSheafAdj J A ht).counit.app F)).val =
      ((presheafToSheaf J B ⋙ sheafToPresheaf J B).mapIso (constComp Cᵒᵖ _ U)).hom ≫
        ((constantSheafAdj J B ht).counit.app ((sheafCompose J U).obj F)).val 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_5, u_1} C] (J : CategoryTheory.GrothendieckTopology C) {A : Type u_2} [CategoryTheory.Category.{u_6, u_2} A] {t : C} (ht : CategoryTheory.Limits.IsTerminal t) {B : Type u_3} [CategoryTheory.Category.{u_4, u_3} B] (U : A ⥤ B) [CategoryTheory.HasWeakSheafify J A] [CategoryTheory.HasWeakSheafify J B] [J.PreservesSheafification U] [J.HasSheafCompose U] (F : CategoryTheory.Sheaf J A)
Goal: (CategoryTheory.sheafifyComposeIso J U ((CategoryTheory.Functor.const Cᵒᵖ).obj (F.val.obj (Opposite.op t)))).hom ≫
    ((CategoryTheory.sheafCompose J U).map ((CategoryTheory.constantSheafAdj J A ht).counit.app F)).val =
  ((CategoryTheory.presheafToSheaf J B ⋙ CategoryTheory.sheafToPresheaf J B).mapIso
        (CategoryTheory.Functor.constComp Cᵒᵖ (F.val.obj (Opposite.op t)) U)).hom ≫
    ((CategoryTheory.constantSheafAdj J B ht).counit.app ((CategoryTheory.sheafCompose J U).obj F)).val
-- _private.Mathlib.CategoryTheory.Sites.Discrete.0.CategoryTheory.Sheaf.constantSheafAdj_counit_w
private lemma constantSheafAdj_counit_w :
    ((sheafifyComposeIso J U ((const Cᵒᵖ).obj (F.val.obj ⟨t⟩))).symm ≪≫
      (presheafToSheaf J B ⋙ sheafToPresheaf J B).mapIso (constComp Cᵒᵖ (F.val.obj ⟨t⟩) U)).hom ≫
        ((constantSheafAdj J B ht).counit.app ((sheafCompose J U).obj F)).val =
          ((sheafCompose J U).map ((constantSheafAdj J A ht).counit.app F)).val 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_5, u_1} C] (J : CategoryTheory.GrothendieckTopology C) {A : Type u_2} [CategoryTheory.Category.{u_6, u_2} A] {t : C} (ht : CategoryTheory.Limits.IsTerminal t) {B : Type u_3} [CategoryTheory.Category.{u_4, u_3} B] (U : A ⥤ B) [CategoryTheory.HasWeakSheafify J A] [CategoryTheory.HasWeakSheafify J B] [J.PreservesSheafification U] [J.HasSheafCompose U] (F : CategoryTheory.Sheaf J A)
Goal: ((CategoryTheory.sheafifyComposeIso J U ((CategoryTheory.Functor.const Cᵒᵖ).obj (F.val.obj (Opposite.op t)))).symm ≪≫
        (CategoryTheory.presheafToSheaf J B ⋙ CategoryTheory.sheafToPresheaf J B).mapIso
          (CategoryTheory.Functor.constComp Cᵒᵖ (F.val.obj (Opposite.op t)) U)).hom ≫
    ((CategoryTheory.constantSheafAdj J B ht).counit.app ((CategoryTheory.sheafCompose J U).obj F)).val =
  ((CategoryTheory.sheafCompose J U).map ((CategoryTheory.constantSheafAdj J A ht).counit.app F)).val
-- CategoryTheory.Sheaf.sheafCompose_reflects_discrete
lemma sheafCompose_reflects_discrete [(sheafCompose J U).ReflectsIsomorphisms]
    [((sheafCompose J U).obj F).IsDiscrete J ht] :
    F.IsDiscrete J ht 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_6, u_1} C] (J : CategoryTheory.GrothendieckTopology C) {A : Type u_2} [CategoryTheory.Category.{u_4, u_2} A] {t : C} (ht : CategoryTheory.Limits.IsTerminal t) {B : Type u_3} [CategoryTheory.Category.{u_5, u_3} B] (U : A ⥤ B) [CategoryTheory.HasWeakSheafify J A] [CategoryTheory.HasWeakSheafify J B] [J.PreservesSheafification U] [J.HasSheafCompose U] (F : CategoryTheory.Sheaf J A) [(CategoryTheory.sheafCompose J U).ReflectsIsomorphisms] [CategoryTheory.Sheaf.IsDiscrete J ht ((CategoryTheory.sheafCompose J U).obj F)]
Goal: CategoryTheory.Sheaf.IsDiscrete J ht F
-- CategoryTheory.Sheaf.isDiscrete_iff_forget
lemma isDiscrete_iff_forget [(sheafCompose J U).ReflectsIsomorphisms] : F.IsDiscrete J ht ↔
    ((sheafCompose J U).obj F).IsDiscrete J ht 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_6, u_1} C] (J : CategoryTheory.GrothendieckTopology C) {A : Type u_2} [CategoryTheory.Category.{u_4, u_2} A] {t : C} (ht : CategoryTheory.Limits.IsTerminal t) {B : Type u_3} [CategoryTheory.Category.{u_5, u_3} B] (U : A ⥤ B) [CategoryTheory.HasWeakSheafify J A] [CategoryTheory.HasWeakSheafify J B] [(CategoryTheory.constantSheaf J A).Faithful] [(CategoryTheory.constantSheaf J A).Full] [(CategoryTheory.constantSheaf J B).Faithful] [(CategoryTheory.constantSheaf J B).Full] [J.PreservesSheafification U] [J.HasSheafCompose U] (F : CategoryTheory.Sheaf J A) [(CategoryTheory.sheafCompose J U).ReflectsIsomorphisms]
Goal: CategoryTheory.Sheaf.IsDiscrete J ht F ↔ CategoryTheory.Sheaf.IsDiscrete J ht ((CategoryTheory.sheafCompose J U).obj F)
-- CategoryTheory.Projective.factors
class Projective (P : C) : Prop where
  factors : ∀ {E X : C} (f : P ⟶ X) (e : E ⟶ X) [Epi e], ∃ f', f' ≫ e = f
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {P : C} [self : CategoryTheory.Projective P] {E X : C} (f : P ⟶ X) (e : E ⟶ X) [CategoryTheory.Epi e]
Goal: ∃ f', f' ≫ e = f
-- CategoryTheory.Limits.IsZero.projective
lemma Limits.IsZero.projective {X : C} (h : IsZero X) : Projective X 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} (h : CategoryTheory.Limits.IsZero X)
Goal: CategoryTheory.Projective X
-- CategoryTheory.ProjectivePresentation.epi
-- Porting note(#5171): was @[nolint has_nonempty_instance]
structure ProjectivePresentation (X : C) where
  p : C
  [projective : Projective p]
  f : p ⟶ X
  [epi : Epi f]
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} (self : CategoryTheory.ProjectivePresentation X)
Goal: CategoryTheory.Epi self.f
-- CategoryTheory.ProjectivePresentation.projective
-- Porting note(#5171): was @[nolint has_nonempty_instance]
structure ProjectivePresentation (X : C) where
  p : C
  [projective : Projective p]
  f : p ⟶ X
  [epi : Epi f]
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} (self : CategoryTheory.ProjectivePresentation X)
Goal: CategoryTheory.Projective self.p
-- CategoryTheory.EnoughProjectives.presentation
class EnoughProjectives : Prop where
  presentation : ∀ X : C, Nonempty (ProjectivePresentation X)
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [self : CategoryTheory.EnoughProjectives C] (X : C)
Goal: Nonempty (CategoryTheory.ProjectivePresentation X)
-- CategoryTheory.Projective.factorThru_comp
@[reassoc (attr := simp)]
theorem factorThru_comp {P X E : C} [Projective P] (f : P ⟶ X) (e : E ⟶ X) [Epi e] :
    factorThru f e ≫ e = f 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {P X E : C} [CategoryTheory.Projective P] (f : P ⟶ X) (e : E ⟶ X) [CategoryTheory.Epi e]
Goal: CategoryTheory.Projective.factorThru f e ≫ e = f
-- CategoryTheory.Projective.of_iso
theorem of_iso {P Q : C} (i : P ≅ Q) (hP : Projective P) : Projective Q 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {P Q : C} (i : P ≅ Q) (hP : CategoryTheory.Projective P)
Goal: CategoryTheory.Projective Q
-- CategoryTheory.Projective.iso_iff
theorem iso_iff {P Q : C} (i : P ≅ Q) : Projective P ↔ Projective Q 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {P Q : C} (i : P ≅ Q)
Goal: CategoryTheory.Projective P ↔ CategoryTheory.Projective Q
-- CategoryTheory.Projective.projective_iff_preservesEpimorphisms_coyoneda_obj
theorem projective_iff_preservesEpimorphisms_coyoneda_obj (P : C) :
    Projective P ↔ (coyoneda.obj (op P)).PreservesEpimorphisms 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] (P : C)
Goal: CategoryTheory.Projective P ↔ (CategoryTheory.coyoneda.obj (Opposite.op P)).PreservesEpimorphisms
-- CategoryTheory.Adjunction.map_projective
theorem map_projective (adj : F ⊣ G) [G.PreservesEpimorphisms] (P : C) (hP : Projective P) :
    Projective (F.obj P) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {D : Type u'} [CategoryTheory.Category.{v', u'} D] {F : C ⥤ D} {G : D ⥤ C} (adj : F ⊣ G) [G.PreservesEpimorphisms] (P : C) (hP : CategoryTheory.Projective P)
Goal: CategoryTheory.Projective (F.obj P)
-- CategoryTheory.Adjunction.projective_of_map_projective
theorem projective_of_map_projective (adj : F ⊣ G) [F.Full] [F.Faithful] (P : C)
    (hP : Projective (F.obj P)) : Projective P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {D : Type u'} [CategoryTheory.Category.{v', u'} D] {F : C ⥤ D} {G : D ⥤ C} (adj : F ⊣ G) [F.Full] [F.Faithful] (P : C) (hP : CategoryTheory.Projective (F.obj P))
Goal: CategoryTheory.Projective P