-- Lean 4 proof step from Mathlib.CategoryTheory.Sites.Subcanonical (goal)
Goal:
C : Type u
inst : Category.{v, u} C
J : GrothendieckTopology.{v, u} C
inst_1 : J.Subcanonical
ι : Type u_1
X : ι → C
c : Cofan.{u_1, v, u} X
H : Membership.mem (γ := Set (Sieve.{v, u} c.pt)) ((J : (a : C) → Set (Sieve a)) c.pt) (Sieve.ofArrows X c.inj)
inst_2 : ∀ (i : ι), Mono (c.inj i)
hempty : ∀ (Y : C) (a : IsInitial.{v, u} Y), ⊥ ∈ (J : (a : C) → Set (Sieve a)) Y
hdisj :
  ∀ {i j : ι}, i ≠ j → ∀ {Y : C} (a : Y ⟶ X i) (b : Y ⟶ X j), a ≫ c.inj i = b ≫ c.inj j → Nonempty (IsInitial.{v, u} Y)
heq :
  ∀ (s : Cofan (C := Sheaf J (Type v)) fun (i : ι) ↦ J.yoneda.obj (X i)) {Y : C} {i j : ι} (a : Y ⟶ X i) (b : Y ⟶ X j)
    (hab : a ≫ c.inj i = b ≫ c.inj j),
    Eq (α := (fun (X : Type v) ↦ X) (s.pt.obj (P := Presheaf.IsSheaf J).obj (op Y)))
      ((ConcreteCategory.hom (FC := TypeCat.Fun) ((s.inj i).hom.app (op Y)) :
            (a : (fun (X : Type v) ↦ X) ((J.yoneda.obj (X i)).obj.obj (op Y))) →
              (fun (X : Type v) ↦ X) (s.pt.obj.obj (op Y)))
          a :
        (fun (X : Type v) ↦ X) (s.pt.obj (P := Presheaf.IsSheaf J).obj (op Y)))
      ((ConcreteCategory.hom (FC := TypeCat.Fun) ((s.inj j).hom.app (op Y)) :
            (a : (fun (X : Type v) ↦ X) ((J.yoneda.obj (X j)).obj.obj (op Y))) →
              (fun (X : Type v) ↦ X) (s.pt.obj.obj (op Y)))
          b :
        (fun (X : Type v) ↦ X) (s.pt.obj (P := Presheaf.IsSheaf J).obj (op Y)))
s : Cofan (C := Sheaf J (Type v)) fun (i : ι) ↦ J.yoneda.obj (X i)
m :
  Cocone.pt (J := Discrete ι) (F := Discrete.functor fun (i : ι) ↦ J.yoneda.obj (X i))
      (Cofan.mk (J.yoneda.obj c.pt) fun (i : ι) ↦ J.yoneda.map (c.inj i)) ⟶
    s.pt
hm :
  ∀ (j : ι),
    Cofan.inj (f := fun (i : ι) ↦ J.yoneda.obj (X i))
          (Cofan.mk (J.yoneda.obj c.pt) fun (i : ι) ↦ J.yoneda.map (c.inj i)) j ≫
        m =
      s.inj j
⊢ (Sieve.ofArrows X c.inj).functorInclusion ≫ m.hom =
    {
      app := fun (Y : Cᵒᵖ) ↦
        ↾fun
            (g :
              { g : unop Y ⟶ c.pt //
                ∃ (Y_1 : C) (h : unop Y ⟶ Y_1) (g_1 : Y_1 ⟶ c.pt), Presieve.ofArrows X c.inj g_1 ∧ h ≫ g_1 = g }) ↦
          (ConcreteCategory.hom (FC := TypeCat.Fun)
                (NatTrans.app (InducedCategory.Hom.hom (s.inj (Sieve.ofArrows.i ⋯))) Y) :
              (a : unop Y ⟶ X (Sieve.ofArrows.i ⋯)) → s.pt.obj.obj Y)
            (Sieve.ofArrows.h ⋯),
      naturality := ⋯ }
have refine_3 : ∀ (Y : Cᵒᵖ) (g : unop Y ⟶ c.pt) (hg : (Sieve.ofArrows X c.inj).arrows g),
  (ConcreteCategory.hom (FC := TypeCat.Fun) (((Sieve.ofArrows X c.inj).functorInclusion ≫ m.hom).app Y)).toFun
      (Subtype.mk (p := fun (g : unop Y ⟶ c.pt) ↦ (Sieve.ofArrows X c.inj).arrows g) g hg) =
    TypeCat.Fun.toFun
      (ConcreteCategory.hom (FC := TypeCat.Fun)
        (NatTrans.app
          {
            app := fun (Y : Cᵒᵖ) ↦
              ↾fun
                  (g :
                    { g : unop Y ⟶ c.pt //
                      ∃ (Y_1 : C) (h : unop Y ⟶ Y_1) (g_1 : Y_1 ⟶ c.pt),
                        Presieve.ofArrows X c.inj g_1 ∧ h ≫ g_1 = g }) ↦
                (ConcreteCategory.hom (FC := TypeCat.Fun)
                      (NatTrans.app (InducedCategory.Hom.hom (s.inj (Sieve.ofArrows.i sorry))) Y) :
                    (a : unop Y ⟶ X (Sieve.ofArrows.i sorry)) → s.pt.obj.obj Y)
                  (Sieve.ofArrows.h sorry),
            naturality := sorry : NatTrans (Sieve.ofArrows X c.inj).functor (s.pt.obj (P := Presheaf.IsSheaf J)) }
          Y))
      (Subtype.mk (p := fun (g : unop Y ⟶ c.pt) ↦ (Sieve.ofArrows X c.inj).arrows g) g hg)
Tactic: ext Y ⟨g, hg⟩