awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
K : Type t
inst_8 : SmallCategory K
inst_9 : FinCategory K
inst_10 : HasLimitsOfShape K D
inst_11 : PreservesLimitsOfShape K (forget D (FC := FD) (CC := CD))
inst_12 : ReflectsLimitsOfShape K (forget D (FC := FD) (CC := CD))
F : K ⥤ Functor.{v, t, u, w} Cᵒᵖ D
X : Cᵒᵖ
S : Cone (F ⋙ J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X)
m :
  S.pt ⟶
    Cone.pt (F := F ⋙ J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X)
      (Functor.mapCone (J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X) (limit.cone F))
hm :
  ∀ (j : K),
    m ≫ NatTrans.app (Cone.π (Functor.mapCone (J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X) (limit.cone F))) j =
      S.π.app j
⊢ Eq (α := S.pt ⟶ limit (F ⋙ J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X))
    (CategoryStruct.comp (Y :=
      limit (colimit (J := (J.Cover (unop X))ᵒᵖ) (Functor.flip (F ⋙ J.diagramFunctor D (unop X)))))
      (CategoryStruct.comp (Y := colimit (J := (J.Cover (unop X))ᵒᵖ) (limit (F ⋙ J.diagramFunctor D (unop X))))
          (m ≫
              Iso.hom
                (HasColimit.isoOfNatIso
                  (IsLimit.conePointUniqueUpToIso (isLimitOfPreserves (J.diagramFunctor D (unop X)) (limit.isLimit F))
                    (limit.isLimit (F ⋙ J.diagramFunctor D (unop X))))) :
            S.pt ⟶ colimit (J := (J.Cover (unop X))ᵒᵖ) (limit (F ⋙ J.diagramFunctor D (unop X))))
          (Iso.hom (colimitLimitIso (F ⋙ J.diagramFunctor D (unop X))) :
            colimit (J := (J.Cover (unop X))ᵒᵖ) (limit (F ⋙ J.diagramFunctor D (unop X))) ⟶
              limit (colimit (J := (J.Cover (unop X))ᵒᵖ) (Functor.flip (F ⋙ J.diagramFunctor D (unop X))))) :
        S.pt ⟶ limit (colimit (J := (J.Cover (unop X))ᵒᵖ) (Functor.flip (F ⋙ J.diagramFunctor D (unop X)))))
      (Iso.inv
          (HasLimit.isoOfNatIso
            (Iso.symm
              (NatIso.ofComponents
                (fun (k : K) ↦ colimitObjIsoColimitCompEvaluation (Functor.flip (F ⋙ J.diagramFunctor D (unop X))) k)
                ⋯))) :
        limit (colimit (J := (J.Cover (unop X))ᵒᵖ) (Functor.flip (F ⋙ J.diagramFunctor D (unop X)))) ⟶
          limit (F ⋙ J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X)))
    (limit.lift (F ⋙ J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X) S)

Tactic:
limit.hom_ext (fun k => ?_)

Premises used: CategoryTheory.Limits.limit.hom_ext
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
K : Type t
inst_8 : SmallCategory K
inst_9 : FinCategory K
inst_10 : HasLimitsOfShape K D
inst_11 : PreservesLimitsOfShape K (forget D (FC := FD) (CC := CD))
inst_12 : ReflectsLimitsOfShape K (forget D (FC := FD) (CC := CD))
F : K ⥤ Functor.{v, t, u, w} Cᵒᵖ D
X : Cᵒᵖ
S : Cone (F ⋙ J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X)
m :
  S.pt ⟶
    Cone.pt (F := F ⋙ J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X)
      (Functor.mapCone (J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X) (limit.cone F))
hm :
  ∀ (j : K),
    m ≫ NatTrans.app (Cone.π (Functor.mapCone (J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X) (limit.cone F))) j =
      S.π.app j
k_1 : K
k : (J.Cover (unop X))ᵒᵖ
dsimp :
  (CategoryStruct.comp (Y := Functor.obj (limit (F ⋙ J.diagramFunctor D (unop X))) k)
      (NatTrans.app
        (limit.lift (F ⋙ J.diagramFunctor D (unop X)) (Functor.mapCone (J.diagramFunctor D (unop X)) (limit.cone F))) k)
      (NatTrans.app (limit.π (F ⋙ J.diagramFunctor D (unop X)) k_1) k ≫
        colimit.ι (Functor.flip (F ⋙ J.diagramFunctor D (unop X)) ⋙ Functor.obj (evaluation K D) k_1) k) :
    multiequalizer ((unop k).index (limit F)) ⟶ colimit (J := (J.Cover (unop X))ᵒᵖ) (J.diagram (F.obj k_1) (unop X)))
| (CategoryStruct.comp (Y := Functor.obj (limit (F ⋙ J.diagramFunctor D (unop X))) k)
      (NatTrans.app
        (Iso.hom
          (IsLimit.conePointUniqueUpToIso (isLimitOfPreserves (J.diagramFunctor D (unop X)) (limit.isLimit F))
            (limit.isLimit (F ⋙ J.diagramFunctor D (unop X)))))
        k)
      (NatTrans.app (limit.π (F ⋙ J.diagramFunctor D (unop X)) k_1) k ≫
        colimit.ι (Functor.flip (F ⋙ J.diagramFunctor D (unop X)) ⋙ Functor.obj (evaluation K D) k_1) k) :
    multiequalizer ((unop k).index (limit F)) ⟶ colimit (J := (J.Cover (unop X))ᵒᵖ) (J.diagram (F.obj k_1) (unop X)))

Tactic:
dsimp [IsLimit.conePointUniqueUpToIso]

Premises used: CategoryTheory.Limits.IsLimit.conePointUniqueUpToIso
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
K : Type t
inst_8 : SmallCategory K
inst_9 : FinCategory K
inst_10 : HasLimitsOfShape K D
inst_11 : PreservesLimitsOfShape K (forget D (FC := FD) (CC := CD))
inst_12 : ReflectsLimitsOfShape K (forget D (FC := FD) (CC := CD))
F : K ⥤ Functor.{v, t, u, w} Cᵒᵖ D
X : Cᵒᵖ
S : Cone (F ⋙ J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X)
m :
  S.pt ⟶
    Cone.pt (F := F ⋙ J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X)
      (Functor.mapCone (J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X) (limit.cone F))
hm :
  ∀ (j : K),
    m ≫ NatTrans.app (Cone.π (Functor.mapCone (J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X) (limit.cone F))) j =
      S.π.app j
k_1 : K
k : (J.Cover (unop X))ᵒᵖ
preservesLimit :
  Eq (α :=
    multiequalizer ((unop k).index (limit F)) ⟶ colimit (J := (J.Cover (unop X))ᵒᵖ) (J.diagram (F.obj k_1) (unop X)))
    (NatTrans.app (NatTrans.app (Cone.π (Functor.mapCone (J.diagramFunctor D (unop X)) (limit.cone F))) k_1) k ≫
        colimit.ι (Functor.flip (F ⋙ J.diagramFunctor D (unop X)) ⋙ Functor.obj (evaluation K D) k_1) k :
      multiequalizer ((unop k).index (limit F)) ⟶ colimit (J := (J.Cover (unop X))ᵒᵖ) (J.diagram (F.obj k_1) (unop X)))
    (NatTrans.app (J.diagramNatTrans (limit.π F k_1) (unop X)) k ≫ colimit.ι (J.diagram (F.obj k_1) (unop X)) k :
      Functor.obj (J.diagram (limit F) (unop X)) k ⟶
        colimit (J := (J.Cover (unop X))ᵒᵖ) (J.diagram (F.obj k_1) (unop X)))
⊢ Eq (α :=
    multiequalizer ((unop k).index (limit F)) ⟶ colimit (J := (J.Cover (unop X))ᵒᵖ) (J.diagram (F.obj k_1) (unop X)))
    (CategoryStruct.comp (Y := Functor.obj (limit (F ⋙ J.diagramFunctor D (unop X))) k)
        (NatTrans.app
          (limit.lift (F ⋙ J.diagramFunctor D (unop X)) (Functor.mapCone (J.diagramFunctor D (unop X)) (limit.cone F)))
          k)
        (NatTrans.app (limit.π (F ⋙ J.diagramFunctor D (unop X)) k_1) k ≫
          colimit.ι (Functor.flip (F ⋙ J.diagramFunctor D (unop X)) ⋙ Functor.obj (evaluation K D) k_1) k) :
      multiequalizer ((unop k).index (limit F)) ⟶ colimit (J := (J.Cover (unop X))ᵒᵖ) (J.diagram (F.obj k_1) (unop X)))
    (NatTrans.app (J.diagramNatTrans (limit.π F k_1) (unop X)) k ≫ colimit.ι (J.diagram (F.obj k_1) (unop X)) k :
      Functor.obj (J.diagram (limit F) (unop X)) k ⟶
        colimit (J := (J.Cover (unop X))ᵒᵖ) (J.diagram (F.obj k_1) (unop X)))

Tactic:
rw [← Category.assoc, ← NatTrans.comp_app, limit.lift_π]

Premises used: CategoryTheory.Category.assoc, CategoryTheory.NatTrans.comp_app, CategoryTheory.Limits.limit.lift_π
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
K : Type t
inst_8 : SmallCategory K
inst_9 : FinCategory K
inst_10 : HasLimitsOfShape K D
inst_11 : PreservesLimitsOfShape K (forget D (FC := FD) (CC := CD))
inst_12 : ReflectsLimitsOfShape K (forget D (FC := FD) (CC := CD))
F : K ⥤ Functor.{v, t, u, w} Cᵒᵖ D
X : Cᵒᵖ
S : Cone (F ⋙ J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X)
m :
  S.pt ⟶
    Cone.pt (F := F ⋙ J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X)
      (Functor.mapCone (J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X) (limit.cone F))
hm :
  ∀ (j : K),
    m ≫ NatTrans.app (Cone.π (Functor.mapCone (J.plusFunctor D ⋙ Functor.obj (evaluation Cᵒᵖ D) X) (limit.cone F))) j =
      S.π.app j
k_1 : K
k : (J.Cover (unop X))ᵒᵖ
⊢ Eq (α :=
    multiequalizer ((unop k).index (limit F)) ⟶ colimit (J := (J.Cover (unop X))ᵒᵖ) (J.diagram (F.obj k_1) (unop X)))
    (NatTrans.app (NatTrans.app (Cone.π (Functor.mapCone (J.diagramFunctor D (unop X)) (limit.cone F))) k_1) k ≫
        colimit.ι (Functor.flip (F ⋙ J.diagramFunctor D (unop X)) ⋙ Functor.obj (evaluation K D) k_1) k :
      multiequalizer ((unop k).index (limit F)) ⟶ colimit (J := (J.Cover (unop X))ᵒᵖ) (J.diagram (F.obj k_1) (unop X)))
    (NatTrans.app (J.diagramNatTrans (limit.π F k_1) (unop X)) k ≫ colimit.ι (J.diagram (F.obj k_1) (unop X)) k :
      Functor.obj (J.diagram (limit F) (unop X)) k ⟶
        colimit (J := (J.Cover (unop X))ᵒᵖ) (J.diagram (F.obj k_1) (unop X)))

Tactic:
rfl
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
inst_8 : HasFiniteLimits.{t, w} D
inst_9 : PreservesFiniteLimits (forget D (FC := FD) (CC := CD))
inst_10 : Functor.ReflectsIsomorphisms (forget D (FC := FD) (CC := CD))
h :
  ∀ (J_1 : Type t) {𝒥 : SmallCategory J_1} (x : FinCategory J_1),
    PreservesLimitsOfShape (C := Functor.{v, t, u, w} Cᵒᵖ D) J_1 (J.plusFunctor D)
⊢ PreservesFiniteLimits (C := Functor.{v, t, u, w} Cᵒᵖ D) (J.plusFunctor D)

Tactic:
apply preservesFiniteLimits_of_preservesFiniteLimitsOfSize.{t}
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
inst_8 : HasFiniteLimits.{t, w} D
inst_9 : PreservesFiniteLimits (forget D (FC := FD) (CC := CD))
inst_10 : Functor.ReflectsIsomorphisms (forget D (FC := FD) (CC := CD))
K : Type t
h :
  ∀ {𝒥 : SmallCategory K} (x : FinCategory K),
    PreservesLimitsOfShape (C := Functor.{v, t, u, w} Cᵒᵖ D) K (J.plusFunctor D)
⊢ ∀ {𝒥 : SmallCategory K} (x : FinCategory K),
    PreservesLimitsOfShape (C := Functor.{v, t, u, w} Cᵒᵖ D) K (J.plusFunctor D)

Tactic:
_
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
inst_8 : HasFiniteLimits.{t, w} D
inst_9 : PreservesFiniteLimits (forget D (FC := FD) (CC := CD))
inst_10 : Functor.ReflectsIsomorphisms (forget D (FC := FD) (CC := CD))
K : Type t
𝒥 : SmallCategory K
h : ∀ (x : FinCategory K), PreservesLimitsOfShape (C := Functor.{v, t, u, w} Cᵒᵖ D) K (J.plusFunctor D)
⊢ ∀ (x : FinCategory K), PreservesLimitsOfShape (C := Functor.{v, t, u, w} Cᵒᵖ D) K (J.plusFunctor D)

Tactic:
_
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
inst_8 : HasFiniteLimits.{t, w} D
inst_9 : PreservesFiniteLimits (forget D (FC := FD) (CC := CD))
inst_10 : Functor.ReflectsIsomorphisms (forget D (FC := FD) (CC := CD))
K : Type t
𝒥 : SmallCategory K
x : FinCategory K
⊢ ReflectsLimitsOfShape K (forget D (FC := FD) (CC := CD))

Tactic:
have : ReflectsLimitsOfShape K (forget D) := reflectsLimitsOfShape_of_reflectsIsomorphisms
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
inst_8 : HasFiniteLimits.{t, w} D
inst_9 : PreservesFiniteLimits (forget D (FC := FD) (CC := CD))
inst_10 : Functor.ReflectsIsomorphisms (forget D (FC := FD) (CC := CD))
K : Type t
𝒥 : SmallCategory K
x : FinCategory K
this : ReflectsLimitsOfShape K (forget D (FC := FD) (CC := CD))
⊢ PreservesLimitsOfShape (C := Functor.{v, t, u, w} Cᵒᵖ D) K (J.plusFunctor D)

Tactic:
apply preservesLimitsOfShape_plusFunctor

Premises used: CategoryTheory.GrothendieckTopology.preservesLimitsOfShape_plusFunctor
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
K : Type t
inst_8 : SmallCategory K
inst_9 : FinCategory K
inst_10 : HasLimitsOfShape K D
inst_11 : PreservesLimitsOfShape K (forget D (FC := FD) (CC := CD))
inst_12 : ReflectsLimitsOfShape K (forget D (FC := FD) (CC := CD))
⊢ PreservesLimitsOfShape (C := Functor.{v, t, u, w} Cᵒᵖ D) K (J.sheafification D)

Tactic:
Limits.comp_preservesLimitsOfShape _ _

Premises used: CategoryTheory.GrothendieckTopology.sheafification, CategoryTheory.Limits.comp_preservesLimitsOfShape
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
inst_8 : HasFiniteLimits.{t, w} D
inst_9 : PreservesFiniteLimits (forget D (FC := FD) (CC := CD))
inst_10 : Functor.ReflectsIsomorphisms (forget D (FC := FD) (CC := CD))
⊢ PreservesFiniteLimits (C := Functor.{v, t, u, w} Cᵒᵖ D) (J.sheafification D)

Tactic:
Limits.comp_preservesFiniteLimits _ _

Premises used: CategoryTheory.GrothendieckTopology.sheafification, CategoryTheory.Limits.comp_preservesFiniteLimits
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : Functor.ReflectsIsomorphisms (forget D (FC := FD) (CC := CD))
inst_8 : ∀ {X : C} (S : J.Cover X), PreservesLimitsOfShape (WalkingMulticospan S.shape) (forget D (FC := FD) (CC := CD))
K : Type w'
inst_9 : SmallCategory K
inst_10 : FinCategory K
inst_11 : HasLimitsOfShape.{w', w', t, w} K D
inst_12 : PreservesLimits (forget D (FC := FD) (CC := CD))
inst_13 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
e : Equivalence.{w', t, w', t} K (AsSmall (FinCategory.AsType K)) :=
  Equivalence.trans (Equivalence.symm (FinCategory.equivAsType K)) AsSmall.equiv
⊢ HasLimitsOfShape.{t, t, t, w} (AsSmall (FinCategory.AsType K)) D

Tactic:
haveI : HasLimitsOfShape (AsSmall.{t} (FinCategory.AsType K)) D :=
    Limits.hasLimitsOfShape_of_equivalence e
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : Functor.ReflectsIsomorphisms (forget D (FC := FD) (CC := CD))
inst_8 : ∀ {X : C} (S : J.Cover X), PreservesLimitsOfShape (WalkingMulticospan S.shape) (forget D (FC := FD) (CC := CD))
K : Type w'
inst_9 : SmallCategory K
inst_10 : FinCategory K
inst_11 : HasLimitsOfShape.{w', w', t, w} K D
inst_12 : PreservesLimits (forget D (FC := FD) (CC := CD))
inst_13 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
e : Equivalence.{w', t, w', t} K (AsSmall (FinCategory.AsType K)) :=
  Equivalence.trans (Equivalence.symm (FinCategory.equivAsType K)) AsSmall.equiv
this : HasLimitsOfShape.{t, t, t, w} (AsSmall (FinCategory.AsType K)) D
fintypeObj : autoParam (Fintype (AsSmall (FinCategory.AsType K))) FinCategory.fintypeObj._autoParam
fintypeHom : autoParam ((j j' : AsSmall (FinCategory.AsType K)) → Fintype (j ⟶ j')) FinCategory.fintypeHom._autoParam
⊢ FinCategory (AsSmall (FinCategory.AsType K))

Tactic:
constructor
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : Functor.ReflectsIsomorphisms (forget D (FC := FD) (CC := CD))
inst_8 : ∀ {X : C} (S : J.Cover X), PreservesLimitsOfShape (WalkingMulticospan S.shape) (forget D (FC := FD) (CC := CD))
K : Type w'
inst_9 : SmallCategory K
inst_10 : FinCategory K
inst_11 : HasLimitsOfShape.{w', w', t, w} K D
inst_12 : PreservesLimits (forget D (FC := FD) (CC := CD))
inst_13 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
e : Equivalence.{w', t, w', t} K (AsSmall (FinCategory.AsType K)) :=
  Equivalence.trans (Equivalence.symm (FinCategory.equivAsType K)) AsSmall.equiv
this : HasLimitsOfShape.{t, t, t, w} (AsSmall (FinCategory.AsType K)) D
⊢ Fintype (ULift.{t, 0} (FinCategory.AsType K))

Tactic:
infer_instance
-- Module: Mathlib.CategoryTheory.Sites.LeftExact
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{t, w} D
inst_2 : ∀ (P : Functor.{v, t, u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_3 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
FD : D → D → Type u_1
CD : D → Type t
inst_4 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
inst_5 : ConcreteCategory D FD (CC := CD)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : Functor.ReflectsIsomorphisms (forget D (FC := FD) (CC := CD))
inst_8 : ∀ {X : C} (S : J.Cover X), PreservesLimitsOfShape (WalkingMulticospan S.shape) (forget D (FC := FD) (CC := CD))
K : Type w'
inst_9 : SmallCategory K
inst_10 : FinCategory K
inst_11 : HasLimitsOfShape.{w', w', t, w} K D
inst_12 : PreservesLimits (forget D (FC := FD) (CC := CD))
inst_13 : ∀ (X : C), Small.{t, max u v} (J.Cover X)ᵒᵖ
e : Equivalence.{w', t, w', t} K (AsSmall (FinCategory.AsType K)) :=
  Equivalence.trans (Equivalence.symm (FinCategory.equivAsType K)) AsSmall.equiv
this : HasLimitsOfShape.{t, t, t, w} (AsSmall (FinCategory.AsType K)) D
j j' : AsSmall (FinCategory.AsType K)
⊢ Fintype (ULift.{t, 0} (j.down ⟶ j'.down))

Tactic:
infer_instance