awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Module: Mathlib.CategoryTheory.Sites.ConcreteSheafification
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{w', w} D
FD : D → D → Type u_1
CD : D → Type t
inst_2 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
instCC : ConcreteCategory.{t, w', w, u_1} D FD (CC := CD)
inst_3 : ∀ {X : C} (S : J.Cover X), PreservesLimitsOfShape (WalkingMulticospan S.shape) (forget D (FC := FD) (CC := CD))
inst_4 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst_5 : ∀ (P : Functor.{v, w', u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
P : Functor.{v, w', u, w} Cᵒᵖ D
hsep :
  ∀ (X : C) (S : J.Cover X) (x y : ToType.{t, w', w, u_1} (FC := FD) (CC := CD) (P.obj (op X))),
    (∀ (I : S.Arrow),
        Eq (α := CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              x :
            CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              y :
            CD (P.obj (op I.Y)))) →
      x = y
X : C
S : J.Cover X
s : Meq (FD := FD) (CD := CD) (J.plusObj P) S
inj :
  ∀ (X : C),
    Function.Injective.{t + 1, t + 1} (α := CD (P.obj (op X))) (β := CD ((J.plusObj P).obj (op X)))
      (⇑(ConcreteCategory.hom (FC := FD) (CC := CD) (NatTrans.app (J.toPlus P) (op X))) :
        (a : CD (P.obj (op X))) → CD ((J.plusObj P).obj (op X)))
T : (I : S.Arrow) → J.Cover I.Y
t : (I : S.Arrow) → Meq (FD := FD) (CD := CD) P (T I)
ht : ∀ (I : S.Arrow), (↑s : (I : S.Arrow) → ToType ((J.plusObj P).obj (op I.Y))) I = mk (FD := FD) (CD := CD) (t I)
B : J.Cover X := S.bind T
Z : (I : B.Arrow) → C
e1 : (I : B.Arrow) → I.Y ⟶ Z I
e2 : (I : B.Arrow) → Z I ⟶ X
he2 : ∀ (I : B.Arrow), (↑S : Sieve X).arrows (e2 I)
h_1 :
  ∀ (I : B.Arrow),
    (fun (x : C) (x_1 : x ⟶ X) (h : (↑S : Sieve X).arrows x_1) ↦
        (Sieve.arrows
            ((fun (Y : C) (f : Y ⟶ X) (hf : (↑S : Sieve X).arrows f) ↦
                ((↑(T { Y := Y, f := f, hf := hf : S.Arrow }) : Sieve.{v, u} { Y := Y, f := f, hf := hf : S.Arrow }.Y) :
                  Sieve.{v, u} { Y := Y, f := f, hf := hf : S.Arrow }.Y))
              x x_1 h) :
          Presieve.{v, u} x))
      (Z I) (e2 I) ⋯ (e1 I)
h_2 : ∀ (I : B.Arrow), e1 I ≫ e2 I = I.f
w : Meq (FD := FD) (CD := CD) P B := meqOfSep (FD := FD) (CD := CD) P hsep X S s T t ht
I : S.Arrow
h :
  (ConcreteCategory.hom (FC := FD) (CC := CD) ((J.plusObj P).map I.f.op) :
        (a : CD ((J.plusObj P).obj (op X))) → CD ((J.plusObj P).obj (op I.Y)))
      (mk (FD := FD) (CD := CD) w) =
    (↑s : (I : S.Arrow) → ToType ((J.plusObj P).obj (op I.Y))) I
⊢ (↑(Meq.mk (FD := FD) (CD := CD) S (mk (FD := FD) (CD := CD) w)) : (I : S.Arrow) → ToType ((J.plusObj P).obj (op I.Y)))
      I =
    (↑s : (I : S.Arrow) → ToType ((J.plusObj P).obj (op I.Y))) I

Tactic:
dsimp [Meq.mk]

Premises used: CategoryTheory.Meq.mk
-- Module: Mathlib.CategoryTheory.Sites.ConcreteSheafification
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{w', w} D
FD : D → D → Type u_1
CD : D → Type t
inst_2 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
instCC : ConcreteCategory.{t, w', w, u_1} D FD (CC := CD)
inst_3 : ∀ {X : C} (S : J.Cover X), PreservesLimitsOfShape (WalkingMulticospan S.shape) (forget D (FC := FD) (CC := CD))
inst_4 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst_5 : ∀ (P : Functor.{v, w', u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
P : Functor.{v, w', u, w} Cᵒᵖ D
hsep :
  ∀ (X : C) (S : J.Cover X) (x y : ToType.{t, w', w, u_1} (FC := FD) (CC := CD) (P.obj (op X))),
    (∀ (I : S.Arrow),
        Eq (α := CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              x :
            CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              y :
            CD (P.obj (op I.Y)))) →
      x = y
X : C
S : J.Cover X
s : Meq (FD := FD) (CD := CD) (J.plusObj P) S
inj :
  ∀ (X : C),
    Function.Injective.{t + 1, t + 1} (α := CD (P.obj (op X))) (β := CD ((J.plusObj P).obj (op X)))
      (⇑(ConcreteCategory.hom (FC := FD) (CC := CD) (NatTrans.app (J.toPlus P) (op X))) :
        (a : CD (P.obj (op X))) → CD ((J.plusObj P).obj (op X)))
T : (I : S.Arrow) → J.Cover I.Y
t : (I : S.Arrow) → Meq (FD := FD) (CD := CD) P (T I)
ht : ∀ (I : S.Arrow), (↑s : (I : S.Arrow) → ToType ((J.plusObj P).obj (op I.Y))) I = mk (FD := FD) (CD := CD) (t I)
B : J.Cover X := S.bind T
Z : (I : B.Arrow) → C
e1 : (I : B.Arrow) → I.Y ⟶ Z I
e2 : (I : B.Arrow) → Z I ⟶ X
he2 : ∀ (I : B.Arrow), (↑S : Sieve X).arrows (e2 I)
h_1 :
  ∀ (I : B.Arrow),
    (fun (x : C) (x_1 : x ⟶ X) (h : (↑S : Sieve X).arrows x_1) ↦
        (Sieve.arrows
            ((fun (Y : C) (f : Y ⟶ X) (hf : (↑S : Sieve X).arrows f) ↦
                ((↑(T { Y := Y, f := f, hf := hf : S.Arrow }) : Sieve.{v, u} { Y := Y, f := f, hf := hf : S.Arrow }.Y) :
                  Sieve.{v, u} { Y := Y, f := f, hf := hf : S.Arrow }.Y))
              x x_1 h) :
          Presieve.{v, u} x))
      (Z I) (e2 I) ⋯ (e1 I)
h_2 : ∀ (I : B.Arrow), e1 I ≫ e2 I = I.f
w : Meq (FD := FD) (CD := CD) P B := meqOfSep (FD := FD) (CD := CD) P hsep X S s T t ht
I : S.Arrow
h :
  Eq (α := ToType.{t, w', w, u_1} (FC := FD) (CC := CD) ((J.plusObj P).obj (op I.Y)))
    (mk (FD := FD) (CD := CD) (w.pullback (FD := FD) (CD := CD) I.f)) (mk (FD := FD) (CD := CD) (t I))
⊢ (ConcreteCategory.hom (FC := FD) (CC := CD) ((J.plusObj P).map I.f.op) :
        (a : CD ((J.plusObj P).obj (op X))) → CD ((J.plusObj P).obj (op I.Y)))
      (mk (FD := FD) (CD := CD) w) =
    (↑s : (I : S.Arrow) → ToType ((J.plusObj P).obj (op I.Y))) I

Tactic:
rw [ht, res_mk_eq_mk_pullback]

Premises used: CategoryTheory.GrothendieckTopology.Plus.res_mk_eq_mk_pullback
-- Module: Mathlib.CategoryTheory.Sites.ConcreteSheafification
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{w', w} D
FD : D → D → Type u_1
CD : D → Type t
inst_2 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
instCC : ConcreteCategory.{t, w', w, u_1} D FD (CC := CD)
inst_3 : ∀ {X : C} (S : J.Cover X), PreservesLimitsOfShape (WalkingMulticospan S.shape) (forget D (FC := FD) (CC := CD))
inst_4 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst_5 : ∀ (P : Functor.{v, w', u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
P : Functor.{v, w', u, w} Cᵒᵖ D
hsep :
  ∀ (X : C) (S : J.Cover X) (x y : ToType.{t, w', w, u_1} (FC := FD) (CC := CD) (P.obj (op X))),
    (∀ (I : S.Arrow),
        Eq (α := CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              x :
            CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              y :
            CD (P.obj (op I.Y)))) →
      x = y
X : C
S : J.Cover X
s : Meq (FD := FD) (CD := CD) (J.plusObj P) S
inj :
  ∀ (X : C),
    Function.Injective.{t + 1, t + 1} (α := CD (P.obj (op X))) (β := CD ((J.plusObj P).obj (op X)))
      (⇑(ConcreteCategory.hom (FC := FD) (CC := CD) (NatTrans.app (J.toPlus P) (op X))) :
        (a : CD (P.obj (op X))) → CD ((J.plusObj P).obj (op X)))
T : (I : S.Arrow) → J.Cover I.Y
t : (I : S.Arrow) → Meq (FD := FD) (CD := CD) P (T I)
ht : ∀ (I : S.Arrow), (↑s : (I : S.Arrow) → ToType ((J.plusObj P).obj (op I.Y))) I = mk (FD := FD) (CD := CD) (t I)
B : J.Cover X := S.bind T
Z : (I : B.Arrow) → C
e1 : (I : B.Arrow) → I.Y ⟶ Z I
e2 : (I : B.Arrow) → Z I ⟶ X
he2 : ∀ (I : B.Arrow), (↑S : Sieve X).arrows (e2 I)
h :
  ∀ (I : B.Arrow),
    (fun (x : C) (x_1 : x ⟶ X) (h : (↑S : Sieve X).arrows x_1) ↦
        (Sieve.arrows
            ((fun (Y : C) (f : Y ⟶ X) (hf : (↑S : Sieve X).arrows f) ↦
                ((↑(T { Y := Y, f := f, hf := hf : S.Arrow }) : Sieve.{v, u} { Y := Y, f := f, hf := hf : S.Arrow }.Y) :
                  Sieve.{v, u} { Y := Y, f := f, hf := hf : S.Arrow }.Y))
              x x_1 h) :
          Presieve.{v, u} x))
      (Z I) (e2 I) ⋯ (e1 I)
h_1 : ∀ (I : B.Arrow), e1 I ≫ e2 I = I.f
w : Meq (FD := FD) (CD := CD) P B := meqOfSep (FD := FD) (CD := CD) P hsep X S s T t ht
I : S.Arrow
II : (T I).Arrow
Y : C
f : Y ⟶ II.Y
hf : (↑((J.pullback II.f).obj (T I)) : Sieve II.Y).arrows f
a : Sieve.arrows (↑(T { Y := I.Y, f := I.f, hf := ⋯ : S.Arrow }) : Sieve { Y := I.Y, f := I.f, hf := ⋯ }.Y) (f ≫ II.f)
⊢ (↑((J.pullback II.f).obj ((J.pullback I.f).obj B)) : Sieve II.Y).arrows f

Tactic:
apply Sieve.le_pullback_bind _ _ _ I.hf

Premises used: CategoryTheory.Sieve.le_pullback_bind, CategoryTheory.GrothendieckTopology.Cover.Arrow.hf
-- Module: Mathlib.CategoryTheory.Sites.ConcreteSheafification
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{w', w} D
FD : D → D → Type u_1
CD : D → Type t
inst_2 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
instCC : ConcreteCategory.{t, w', w, u_1} D FD (CC := CD)
inst_3 : ∀ {X : C} (S : J.Cover X), PreservesLimitsOfShape (WalkingMulticospan S.shape) (forget D (FC := FD) (CC := CD))
inst_4 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst_5 : ∀ (P : Functor.{v, w', u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
P : Functor.{v, w', u, w} Cᵒᵖ D
hsep :
  ∀ (X : C) (S : J.Cover X) (x y : ToType.{t, w', w, u_1} (FC := FD) (CC := CD) (P.obj (op X))),
    (∀ (I : S.Arrow),
        Eq (α := CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              x :
            CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              y :
            CD (P.obj (op I.Y)))) →
      x = y
X : C
S : J.Cover X
s : Meq (FD := FD) (CD := CD) (J.plusObj P) S
inj :
  ∀ (X : C),
    Function.Injective.{t + 1, t + 1} (α := CD (P.obj (op X))) (β := CD ((J.plusObj P).obj (op X)))
      (⇑(ConcreteCategory.hom (FC := FD) (CC := CD) (NatTrans.app (J.toPlus P) (op X))) :
        (a : CD (P.obj (op X))) → CD ((J.plusObj P).obj (op X)))
T : (I : S.Arrow) → J.Cover I.Y
t : (I : S.Arrow) → Meq (FD := FD) (CD := CD) P (T I)
ht : ∀ (I : S.Arrow), (↑s : (I : S.Arrow) → ToType ((J.plusObj P).obj (op I.Y))) I = mk (FD := FD) (CD := CD) (t I)
B : J.Cover X := S.bind T
Z : (I : B.Arrow) → C
e1 : (I : B.Arrow) → I.Y ⟶ Z I
e2 : (I : B.Arrow) → Z I ⟶ X
he2 : ∀ (I : B.Arrow), (↑S : Sieve X).arrows (e2 I)
h :
  ∀ (I : B.Arrow),
    (fun (x : C) (x_1 : x ⟶ X) (h : (↑S : Sieve X).arrows x_1) ↦
        (Sieve.arrows
            ((fun (Y : C) (f : Y ⟶ X) (hf : (↑S : Sieve X).arrows f) ↦
                ((↑(T { Y := Y, f := f, hf := hf : S.Arrow }) : Sieve.{v, u} { Y := Y, f := f, hf := hf : S.Arrow }.Y) :
                  Sieve.{v, u} { Y := Y, f := f, hf := hf : S.Arrow }.Y))
              x x_1 h) :
          Presieve.{v, u} x))
      (Z I) (e2 I) ⋯ (e1 I)
h_1 : ∀ (I : B.Arrow), e1 I ≫ e2 I = I.f
w : Meq (FD := FD) (CD := CD) P B := meqOfSep (FD := FD) (CD := CD) P hsep X S s T t ht
Y Y_1 : C
f_1 : Y_1 ⟶ X
hf_1 : (↑S : Sieve X).arrows f_1
II : Cover.Arrow (X := { Y := Y_1, f := f_1, hf := hf_1 : S.Arrow }.Y) (T { Y := Y_1, f := f_1, hf := hf_1 })
f : Y ⟶ II.Y
hf : (↑((J.pullback II.f).obj (T { Y := Y_1, f := f_1, hf := hf_1 : S.Arrow })) : Sieve II.Y).arrows f
⊢ Sieve.arrows
    (↑(T
          { Y := { Y := Y_1, f := f_1, hf := hf_1 : S.Arrow }.Y, f := { Y := Y_1, f := f_1, hf := hf_1 : S.Arrow }.f,
            hf := ⋯ : S.Arrow }) :
      Sieve { Y := { Y := Y_1, f := f_1, hf := hf_1 }.Y, f := { Y := Y_1, f := f_1, hf := hf_1 }.f, hf := ⋯ }.Y)
    (f ≫ II.f)

Tactic:
hf
-- Module: Mathlib.CategoryTheory.Sites.ConcreteSheafification
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{w', w} D
FD : D → D → Type u_1
CD : D → Type t
inst_2 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
instCC : ConcreteCategory.{t, w', w, u_1} D FD (CC := CD)
inst_3 : ∀ {X : C} (S : J.Cover X), PreservesLimitsOfShape (WalkingMulticospan S.shape) (forget D (FC := FD) (CC := CD))
inst_4 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst_5 : ∀ (P : Functor.{v, w', u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
P : Functor.{v, w', u, w} Cᵒᵖ D
hsep :
  ∀ (X : C) (S : J.Cover X) (x y : ToType.{t, w', w, u_1} (FC := FD) (CC := CD) (P.obj (op X))),
    (∀ (I : S.Arrow),
        Eq (α := CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              x :
            CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              y :
            CD (P.obj (op I.Y)))) →
      x = y
X : C
S : J.Cover X
s : Meq (FD := FD) (CD := CD) (J.plusObj P) S
inj :
  ∀ (X : C),
    Function.Injective.{t + 1, t + 1} (α := CD (P.obj (op X))) (β := CD ((J.plusObj P).obj (op X)))
      (⇑(ConcreteCategory.hom (FC := FD) (CC := CD) (NatTrans.app (J.toPlus P) (op X))) :
        (a : CD (P.obj (op X))) → CD ((J.plusObj P).obj (op X)))
T : (I : S.Arrow) → J.Cover I.Y
t : (I : S.Arrow) → Meq (FD := FD) (CD := CD) P (T I)
ht : ∀ (I : S.Arrow), (↑s : (I : S.Arrow) → ToType ((J.plusObj P).obj (op I.Y))) I = mk (FD := FD) (CD := CD) (t I)
B : J.Cover X := S.bind T
Z : (I : B.Arrow) → C
e1 : (I : B.Arrow) → I.Y ⟶ Z I
e2 : (I : B.Arrow) → Z I ⟶ X
he2 : ∀ (I : B.Arrow), (↑S : Sieve X).arrows (e2 I)
h :
  ∀ (I : B.Arrow),
    (fun (x : C) (x_1 : x ⟶ X) (h : (↑S : Sieve X).arrows x_1) ↦
        (Sieve.arrows
            ((fun (Y : C) (f : Y ⟶ X) (hf : (↑S : Sieve X).arrows f) ↦
                ((↑(T { Y := Y, f := f, hf := hf : S.Arrow }) : Sieve.{v, u} { Y := Y, f := f, hf := hf : S.Arrow }.Y) :
                  Sieve.{v, u} { Y := Y, f := f, hf := hf : S.Arrow }.Y))
              x x_1 h) :
          Presieve.{v, u} x))
      (Z I) (e2 I) ⋯ (e1 I)
h_1 : ∀ (I : B.Arrow), e1 I ≫ e2 I = I.f
w : Meq (FD := FD) (CD := CD) P B := meqOfSep (FD := FD) (CD := CD) P hsep X S s T t ht
Y Y_1 : C
f_1 : Y_1 ⟶ X
hf_1 : (↑S : Sieve X).arrows f_1
II : Cover.Arrow (X := { Y := Y_1, f := f_1, hf := hf_1 : S.Arrow }.Y) (T { Y := Y_1, f := f_1, hf := hf_1 })
f : Y ⟶ II.Y
hf : (↑((J.pullback II.f).obj (T { Y := Y_1, f := f_1, hf := hf_1 : S.Arrow })) : Sieve II.Y).arrows f
⊢ Sieve.arrows
    (↑(T
          { Y := { Y := Y_1, f := f_1, hf := hf_1 : S.Arrow }.Y, f := { Y := Y_1, f := f_1, hf := hf_1 : S.Arrow }.f,
            hf := ⋯ : S.Arrow }) :
      Sieve { Y := { Y := Y_1, f := f_1, hf := hf_1 }.Y, f := { Y := Y_1, f := f_1, hf := hf_1 }.f, hf := ⋯ }.Y)
    (f ≫ II.f)

Tactic:
exact hf
-- Module: Mathlib.CategoryTheory.Sites.ConcreteSheafification
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{w', w} D
FD : D → D → Type u_1
CD : D → Type t
inst_2 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
instCC : ConcreteCategory.{t, w', w, u_1} D FD (CC := CD)
inst_3 : ∀ {X : C} (S : J.Cover X), PreservesLimitsOfShape (WalkingMulticospan S.shape) (forget D (FC := FD) (CC := CD))
inst_4 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst_5 : ∀ (P : Functor.{v, w', u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : Functor.ReflectsIsomorphisms.{w', w, t, t + 1} (forget D (FC := FD) (CC := CD))
P : Functor.{v, w', u, w} Cᵒᵖ D
hsep :
  ∀ (X : C) (S : J.Cover X) (x y : ToType.{t, w', w, u_1} (FC := FD) (CC := CD) (P.obj (op X))),
    (∀ (I : S.Arrow),
        Eq (α := CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              x :
            CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              y :
            CD (P.obj (op I.Y)))) →
      x = y
rw : ∀ (X : C) (S : J.Cover X), IsIso (Y := multiequalizer (S.index (J.plusObj P))) (S.toMultiequalizer (J.plusObj P))
⊢ Presheaf.IsSheaf J (J.plusObj P)

Tactic:
rw [Presheaf.isSheaf_iff_multiequalizer]

Premises used: CategoryTheory.Presheaf.isSheaf_iff_multiequalizer
-- Module: Mathlib.CategoryTheory.Sites.ConcreteSheafification
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{w', w} D
FD : D → D → Type u_1
CD : D → Type t
inst_2 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
instCC : ConcreteCategory.{t, w', w, u_1} D FD (CC := CD)
inst_3 : ∀ {X : C} (S : J.Cover X), PreservesLimitsOfShape (WalkingMulticospan S.shape) (forget D (FC := FD) (CC := CD))
inst_4 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst_5 : ∀ (P : Functor.{v, w', u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : Functor.ReflectsIsomorphisms.{w', w, t, t + 1} (forget D (FC := FD) (CC := CD))
P : Functor.{v, w', u, w} Cᵒᵖ D
hsep :
  ∀ (X : C) (S : J.Cover X) (x y : ToType.{t, w', w, u_1} (FC := FD) (CC := CD) (P.obj (op X))),
    (∀ (I : S.Arrow),
        Eq (α := CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              x :
            CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              y :
            CD (P.obj (op I.Y)))) →
      x = y
X : C
S : J.Cover X
apply :
  IsIso (X := Functor.obj.{w', t, w, t + 1} (forget D (FC := FD) (CC := CD)) ((J.plusObj P).obj (op X))) (Y :=
    Functor.obj.{w', t, w, t + 1} (forget D (FC := FD) (CC := CD)) (multiequalizer (S.index (J.plusObj P))))
    (Functor.map (forget D (FC := FD) (CC := CD)) (S.toMultiequalizer (J.plusObj P)))
⊢ IsIso (Y := multiequalizer (S.index (J.plusObj P))) (S.toMultiequalizer (J.plusObj P))

Tactic:
apply @isIso_of_reflects_iso _ _ _ _ _ _ _ (forget D) ?_

Premises used: CategoryTheory.isIso_of_reflects_iso, CategoryTheory.forget
-- Module: Mathlib.CategoryTheory.Sites.ConcreteSheafification
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
D : Type w
inst_1 : Category.{w', w} D
FD : D → D → Type u_1
CD : D → Type t
inst_2 : (X Y : D) → FunLike.{u_1 + 1, t + 1, t + 1} (FD X Y) (CD X) (CD Y)
instCC : ConcreteCategory.{t, w', w, u_1} D FD (CC := CD)
inst_3 : ∀ {X : C} (S : J.Cover X), PreservesLimitsOfShape (WalkingMulticospan S.shape) (forget D (FC := FD) (CC := CD))
inst_4 : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst_5 : ∀ (P : Functor.{v, w', u, w} Cᵒᵖ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst_6 : ∀ (X : C), PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D (FC := FD) (CC := CD))
inst_7 : Functor.ReflectsIsomorphisms.{w', w, t, t + 1} (forget D (FC := FD) (CC := CD))
P : Functor.{v, w', u, w} Cᵒᵖ D
hsep :
  ∀ (X : C) (S : J.Cover X) (x y : ToType.{t, w', w, u_1} (FC := FD) (CC := CD) (P.obj (op X))),
    (∀ (I : S.Arrow),
        Eq (α := CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              x :
            CD (P.obj (op I.Y)))
          ((ConcreteCategory.hom (FC := FD) (CC := CD) (P.map I.f.op) : (a : CD (P.obj (op X))) → CD (P.obj (op I.Y)))
              y :
            CD (P.obj (op I.Y)))) →
      x = y
X : C
S : J.Cover X
rw :
  Function.Bijective (α :=
    (fun (X : Type t) ↦ X) (Functor.obj.{w', t, w, t + 1} (forget D (FC := FD) (CC := CD)) ((J.plusObj P).obj (op X))))
    (β :=
    (fun (X : Type t) ↦ X)
      (Functor.obj.{w', t, w, t + 1} (forget D (FC := FD) (CC := CD)) (multiequalizer (S.index (J.plusObj P)))))
    (⇑(ConcreteCategory.hom (FC := TypeCat.Fun)
          (Functor.map (forget D (FC := FD) (CC := CD)) (S.toMultiequalizer (J.plusObj P)))) :
      (a : (fun (X : Type t) ↦ X) ((forget D).obj ((J.plusObj P).obj (op X)))) →
        (fun (X : Type t) ↦ X) ((forget D).obj (multiequalizer (S.index (J.plusObj P)))))
⊢ IsIso (X := Functor.obj.{w', t, w, t + 1} (forget D (FC := FD) (CC := CD)) ((J.plusObj P).obj (op X))) (Y :=
    Functor.obj.{w', t, w, t + 1} (forget D (FC := FD) (CC := CD)) (multiequalizer (S.index (J.plusObj P))))
    (Functor.map (forget D (FC := FD) (CC := CD)) (S.toMultiequalizer (J.plusObj P)))

Tactic:
rw [isIso_iff_bijective]

Premises used: CategoryTheory.isIso_iff_bijective