Theorem: TopCat.stalkToFiber_injective
File: Mathlib/Topology/Sheaves/LocalPredicate.lean

Proof steps:
state_before: X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
w :
  ∀ (U V : OpenNhds x) (fU : (y : ↥U.obj) → T ↑y),
    P.pred fU →
      ∀ (fV : (y : ↥V.obj) → T ↑y),
        P.pred fV →
          fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩ →
            ∃ W iU iV, ∀ (w : ↥W.obj), fU ((fun x_4 => ⟨↑x_4, ⋯⟩) w) = fV ((fun x_4 => ⟨↑x_4, ⋯⟩) w)
tU tV : (subsheafToTypes P).presheaf.stalk x
h : stalkToFiber P x tU = stalkToFiber P x tV
⊢ tU = tV
state_after: case refine_2
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
w :
  ∀ (U V : OpenNhds x) (fU : (y : ↥U.obj) → T ↑y),
    P.pred fU →
      ∀ (fV : (y : ↥V.obj) → T ↑y),
        P.pred fV →
          fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩ →
            ∃ W iU iV, ∀ (w : ↥W.obj), fU ((fun x_4 => ⟨↑x_4, ⋯⟩) w) = fV ((fun x_4 => ⟨↑x_4, ⋯⟩) w)
tU tV : (subsheafToTypes P).presheaf.stalk x
h : stalkToFiber P x tU = stalkToFiber P x tV
Q : ∃ W s,
  ∃ (hW : P.pred s),
    tU = (subsheafToTypes P).presheaf.germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧ tV = (subsheafToTypes P).presheaf.germ ⟨x, ⋯⟩ ⟨s, hW⟩ :=
  ?refine_1
⊢ tU = tV

case refine_1
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
w :
  ∀ (U V : OpenNhds x) (fU : (y : ↥U.obj) → T ↑y),
    P.pred fU →
      ∀ (fV : (y : ↥V.obj) → T ↑y),
        P.pred fV →
          fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩ →
            ∃ W iU iV, ∀ (w : ↥W.obj), fU ((fun x_4 => ⟨↑x_4, ⋯⟩) w) = fV ((fun x_4 => ⟨↑x_4, ⋯⟩) w)
tU tV : (subsheafToTypes P).presheaf.stalk x
h : stalkToFiber P x tU = stalkToFiber P x tV
⊢ ∃ W s,
    ∃ (hW : P.pred s),
      tU = (subsheafToTypes P).presheaf.germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧ tV = (subsheafToTypes P).presheaf.germ ⟨x, ⋯⟩ ⟨s, hW⟩
tactic: let Q :
    ∃ (W : (OpenNhds x)ᵒᵖ) (s : ∀ w : (unop W).1, T w) (hW : P.pred s),
      tU = (subsheafToTypes P).presheaf.germ ⟨x, (unop W).2⟩ ⟨s, hW⟩ ∧
        tV = (subsheafToTypes P).presheaf.germ ⟨x, (unop W).2⟩ ⟨s, hW⟩ :=
    ?_
state_before: case refine_1
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
w :
  ∀ (U V : OpenNhds x) (fU : (y : ↥U.obj) → T ↑y),
    P.pred fU →
      ∀ (fV : (y : ↥V.obj) → T ↑y),
        P.pred fV →
          fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩ →
            ∃ W iU iV, ∀ (w : ↥W.obj), fU ((fun x_4 => ⟨↑x_4, ⋯⟩) w) = fV ((fun x_4 => ⟨↑x_4, ⋯⟩) w)
tU tV : (subsheafToTypes P).presheaf.stalk x
h : stalkToFiber P x tU = stalkToFiber P x tV
⊢ ∃ W s,
    ∃ (hW : P.pred s),
      tU = (subsheafToTypes P).presheaf.germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧ tV = (subsheafToTypes P).presheaf.germ ⟨x, ⋯⟩ ⟨s, hW⟩
state_after: case refine_1.intro.intro.mk
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
w :
  ∀ (U V : OpenNhds x) (fU : (y : ↥U.obj) → T ↑y),
    P.pred fU →
      ∀ (fV : (y : ↥V.obj) → T ↑y),
        P.pred fV →
          fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩ →
            ∃ W iU iV, ∀ (w : ↥W.obj), fU ((fun x_4 => ⟨↑x_4, ⋯⟩) w) = fV ((fun x_4 => ⟨↑x_4, ⋯⟩) w)
tV : (subsheafToTypes P).presheaf.stalk x
U : (OpenNhds x)ᵒᵖ
fU : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj U))) → T ↑x_1
hU : P.pred fU
h :
  stalkToFiber P x
      (colimit.ι
        (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
          (subsheafToTypes P).presheaf)
        U ⟨fU, hU⟩) =
    stalkToFiber P x tV
⊢ ∃ W s,
    ∃ (hW : P.pred s),
      colimit.ι
            (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
              (subsheafToTypes P).presheaf)
            U ⟨fU, hU⟩ =
          (subsheafToTypes P).presheaf.germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧
        tV = (subsheafToTypes P).presheaf.germ ⟨x, ⋯⟩ ⟨s, hW⟩
tactic: obtain ⟨U, ⟨fU, hU⟩, rfl⟩ := jointly_surjective'.{v, v} tU
state_before: case refine_1.intro.intro.mk
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
w :
  ∀ (U V : OpenNhds x) (fU : (y : ↥U.obj) → T ↑y),
    P.pred fU →
      ∀ (fV : (y : ↥V.obj) → T ↑y),
        P.pred fV →
          fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩ →
            ∃ W iU iV, ∀ (w : ↥W.obj), fU ((fun x_4 => ⟨↑x_4, ⋯⟩) w) = fV ((fun x_4 => ⟨↑x_4, ⋯⟩) w)
tV : (subsheafToTypes P).presheaf.stalk x
U : (OpenNhds x)ᵒᵖ
fU : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj U))) → T ↑x_1
hU : P.pred fU
h :
  stalkToFiber P x
      (colimit.ι
        (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
          (subsheafToTypes P).presheaf)
        U ⟨fU, hU⟩) =
    stalkToFiber P x tV
⊢ ∃ W s,
    ∃ (hW : P.pred s),
      colimit.ι
            (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
              (subsheafToTypes P).presheaf)
            U ⟨fU, hU⟩ =
          (subsheafToTypes P).presheaf.germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧
        tV = (subsheafToTypes P).presheaf.germ ⟨x, ⋯⟩ ⟨s, hW⟩
state_after: case refine_1.intro.intro.mk.intro.intro.mk
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
w :
  ∀ (U V : OpenNhds x) (fU : (y : ↥U.obj) → T ↑y),
    P.pred fU →
      ∀ (fV : (y : ↥V.obj) → T ↑y),
        P.pred fV →
          fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩ →
            ∃ W iU iV, ∀ (w : ↥W.obj), fU ((fun x_4 => ⟨↑x_4, ⋯⟩) w) = fV ((fun x_4 => ⟨↑x_4, ⋯⟩) w)
U : (OpenNhds x)ᵒᵖ
fU : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj U))) → T ↑x_1
hU : P.pred fU
V : (OpenNhds x)ᵒᵖ
fV : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj V))) → T ↑x_1
hV : P.pred fV
h :
  stalkToFiber P x
      (colimit.ι
        (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
          (subsheafToTypes P).presheaf)
        U ⟨fU, hU⟩) =
    stalkToFiber P x
      (colimit.ι
        (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
          (subsheafToTypes P).presheaf)
        V ⟨fV, hV⟩)
⊢ ∃ W s,
    ∃ (hW : P.pred s),
      colimit.ι
            (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
              (subsheafToTypes P).presheaf)
            U ⟨fU, hU⟩ =
          (subsheafToTypes P).presheaf.germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧
        colimit.ι
            (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
              (subsheafToTypes P).presheaf)
            V ⟨fV, hV⟩ =
          (subsheafToTypes P).presheaf.germ ⟨x, ⋯⟩ ⟨s, hW⟩
tactic: obtain ⟨V, ⟨fV, hV⟩, rfl⟩ := jointly_surjective'.{v, v} tV
state_before: case refine_1.intro.intro.mk.intro.intro.mk
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
w :
  ∀ (U V : OpenNhds x) (fU : (y : ↥U.obj) → T ↑y),
    P.pred fU →
      ∀ (fV : (y : ↥V.obj) → T ↑y),
        P.pred fV →
          fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩ →
            ∃ W iU iV, ∀ (w : ↥W.obj), fU ((fun x_4 => ⟨↑x_4, ⋯⟩) w) = fV ((fun x_4 => ⟨↑x_4, ⋯⟩) w)
U : (OpenNhds x)ᵒᵖ
fU : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj U))) → T ↑x_1
hU : P.pred fU
V : (OpenNhds x)ᵒᵖ
fV : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj V))) → T ↑x_1
hV : P.pred fV
h :
  stalkToFiber P x
      (colimit.ι
        (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
          (subsheafToTypes P).presheaf)
        U ⟨fU, hU⟩) =
    stalkToFiber P x
      (colimit.ι
        (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
          (subsheafToTypes P).presheaf)
        V ⟨fV, hV⟩)
⊢ ∃ W s,
    ∃ (hW : P.pred s),
      colimit.ι
            (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
              (subsheafToTypes P).presheaf)
            U ⟨fU, hU⟩ =
          (subsheafToTypes P).presheaf.germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧
        colimit.ι
            (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
              (subsheafToTypes P).presheaf)
            V ⟨fV, hV⟩ =
          (subsheafToTypes P).presheaf.germ ⟨x, ⋯⟩ ⟨s, hW⟩
state_after: case refine_1.intro.intro.mk.intro.intro.mk
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
w :
  ∀ (U V : OpenNhds x) (fU : (y : ↥U.obj) → T ↑y),
    P.pred fU →
      ∀ (fV : (y : ↥V.obj) → T ↑y),
        P.pred fV →
          fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩ →
            ∃ W iU iV, ∀ (w : ↥W.obj), fU ((fun x_4 => ⟨↑x_4, ⋯⟩) w) = fV ((fun x_4 => ⟨↑x_4, ⋯⟩) w)
U : (OpenNhds x)ᵒᵖ
fU : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj U))) → T ↑x_1
hU : P.pred fU
V : (OpenNhds x)ᵒᵖ
fV : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj V))) → T ↑x_1
hV : P.pred fV
h :
  stalkToFiber P x
      (colimit.ι
        (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
          (subsheafToTypes P).presheaf)
        U ⟨fU, hU⟩) =
    stalkToFiber P x
      (colimit.ι
        (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
          (subsheafToTypes P).presheaf)
        V ⟨fV, hV⟩)
⊢ ∃ W s,
    ∃ (hW : P.pred s),
      colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) U ⟨fU, hU⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧
        colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) V ⟨fV, hV⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩
tactic: dsimp
state_before: case refine_1.intro.intro.mk.intro.intro.mk
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
w :
  ∀ (U V : OpenNhds x) (fU : (y : ↥U.obj) → T ↑y),
    P.pred fU →
      ∀ (fV : (y : ↥V.obj) → T ↑y),
        P.pred fV →
          fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩ →
            ∃ W iU iV, ∀ (w : ↥W.obj), fU ((fun x_4 => ⟨↑x_4, ⋯⟩) w) = fV ((fun x_4 => ⟨↑x_4, ⋯⟩) w)
U : (OpenNhds x)ᵒᵖ
fU : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj U))) → T ↑x_1
hU : P.pred fU
V : (OpenNhds x)ᵒᵖ
fV : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj V))) → T ↑x_1
hV : P.pred fV
h :
  stalkToFiber P x
      (colimit.ι
        (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
          (subsheafToTypes P).presheaf)
        U ⟨fU, hU⟩) =
    stalkToFiber P x
      (colimit.ι
        (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ (Type v)).obj (OpenNhds.inclusion x).op).obj
          (subsheafToTypes P).presheaf)
        V ⟨fV, hV⟩)
⊢ ∃ W s,
    ∃ (hW : P.pred s),
      colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) U ⟨fU, hU⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧
        colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) V ⟨fV, hV⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩
state_after: case refine_1.intro.intro.mk.intro.intro.mk
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
w :
  ∀ (U V : OpenNhds x) (fU : (y : ↥U.obj) → T ↑y),
    P.pred fU →
      ∀ (fV : (y : ↥V.obj) → T ↑y),
        P.pred fV →
          fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩ →
            ∃ W iU iV, ∀ (w : ↥W.obj), fU ((fun x_4 => ⟨↑x_4, ⋯⟩) w) = fV ((fun x_4 => ⟨↑x_4, ⋯⟩) w)
U : (OpenNhds x)ᵒᵖ
fU : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj U))) → T ↑x_1
hU : P.pred fU
V : (OpenNhds x)ᵒᵖ
fV : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj V))) → T ↑x_1
hV : P.pred fV
h : fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩
⊢ ∃ W s,
    ∃ (hW : P.pred s),
      colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) U ⟨fU, hU⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧
        colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) V ⟨fV, hV⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩
tactic: simp only [stalkToFiber, Types.Colimit.ι_desc_apply'] at h
state_before: case refine_1.intro.intro.mk.intro.intro.mk
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
w :
  ∀ (U V : OpenNhds x) (fU : (y : ↥U.obj) → T ↑y),
    P.pred fU →
      ∀ (fV : (y : ↥V.obj) → T ↑y),
        P.pred fV →
          fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩ →
            ∃ W iU iV, ∀ (w : ↥W.obj), fU ((fun x_4 => ⟨↑x_4, ⋯⟩) w) = fV ((fun x_4 => ⟨↑x_4, ⋯⟩) w)
U : (OpenNhds x)ᵒᵖ
fU : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj U))) → T ↑x_1
hU : P.pred fU
V : (OpenNhds x)ᵒᵖ
fV : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj V))) → T ↑x_1
hV : P.pred fV
h : fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩
⊢ ∃ W s,
    ∃ (hW : P.pred s),
      colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) U ⟨fU, hU⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧
        colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) V ⟨fV, hV⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩
state_after: case refine_1.intro.intro.mk.intro.intro.mk
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
U : (OpenNhds x)ᵒᵖ
fU : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj U))) → T ↑x_1
hU : P.pred fU
V : (OpenNhds x)ᵒᵖ
fV : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj V))) → T ↑x_1
hV : P.pred fV
h : fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩
w : ∃ W iU iV, ∀ (w : ↥W.obj), fU ((fun x_1 => ⟨↑x_1, ⋯⟩) w) = fV ((fun x_1 => ⟨↑x_1, ⋯⟩) w)
⊢ ∃ W s,
    ∃ (hW : P.pred s),
      colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) U ⟨fU, hU⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧
        colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) V ⟨fV, hV⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩
tactic: specialize w (unop U) (unop V) fU hU fV hV h
state_before: case refine_1.intro.intro.mk.intro.intro.mk
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
U : (OpenNhds x)ᵒᵖ
fU : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj U))) → T ↑x_1
hU : P.pred fU
V : (OpenNhds x)ᵒᵖ
fV : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj V))) → T ↑x_1
hV : P.pred fV
h : fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩
w : ∃ W iU iV, ∀ (w : ↥W.obj), fU ((fun x_1 => ⟨↑x_1, ⋯⟩) w) = fV ((fun x_1 => ⟨↑x_1, ⋯⟩) w)
⊢ ∃ W s,
    ∃ (hW : P.pred s),
      colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) U ⟨fU, hU⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧
        colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) V ⟨fV, hV⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩
state_after: case refine_1.intro.intro.mk.intro.intro.mk.intro.intro.intro
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
U : (OpenNhds x)ᵒᵖ
fU : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj U))) → T ↑x_1
hU : P.pred fU
V : (OpenNhds x)ᵒᵖ
fV : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj V))) → T ↑x_1
hV : P.pred fV
h : fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩
W : OpenNhds x
iU : W ⟶ unop U
iV : W ⟶ unop V
w : ∀ (w : ↥W.obj), fU ((fun x_1 => ⟨↑x_1, ⋯⟩) w) = fV ((fun x_1 => ⟨↑x_1, ⋯⟩) w)
⊢ ∃ W s,
    ∃ (hW : P.pred s),
      colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) U ⟨fU, hU⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧
        colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) V ⟨fV, hV⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩
tactic: rcases w with ⟨W, iU, iV, w⟩
state_before: case refine_1.intro.intro.mk.intro.intro.mk.intro.intro.intro
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
U : (OpenNhds x)ᵒᵖ
fU : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj U))) → T ↑x_1
hU : P.pred fU
V : (OpenNhds x)ᵒᵖ
fV : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj V))) → T ↑x_1
hV : P.pred fV
h : fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩
W : OpenNhds x
iU : W ⟶ unop U
iV : W ⟶ unop V
w : ∀ (w : ↥W.obj), fU ((fun x_1 => ⟨↑x_1, ⋯⟩) w) = fV ((fun x_1 => ⟨↑x_1, ⋯⟩) w)
⊢ ∃ W s,
    ∃ (hW : P.pred s),
      colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) U ⟨fU, hU⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩ ∧
        colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) V ⟨fV, hV⟩ =
          (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨s, hW⟩
state_after: case refine_1.intro.intro.mk.intro.intro.mk.intro.intro.intro.refine_1
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
U : (OpenNhds x)ᵒᵖ
fU : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj U))) → T ↑x_1
hU : P.pred fU
V : (OpenNhds x)ᵒᵖ
fV : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj V))) → T ↑x_1
hV : P.pred fV
h : fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩
W : OpenNhds x
iU : W ⟶ unop U
iV : W ⟶ unop V
w : ∀ (w : ↥W.obj), fU ((fun x_1 => ⟨↑x_1, ⋯⟩) w) = fV ((fun x_1 => ⟨↑x_1, ⋯⟩) w)
⊢ (unop (op W)).obj ⟶ (unop U).obj

case refine_1.intro.intro.mk.intro.intro.mk.intro.intro.intro.refine_2
X : TopCat
T : ↑X → Type v
P : LocalPredicate T
x : ↑X
U : (OpenNhds x)ᵒᵖ
fU : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj U))) → T ↑x_1
hU : P.pred fU
V : (OpenNhds x)ᵒᵖ
fV : (x_1 : ↥(unop ((OpenNhds.inclusion x).op.obj V))) → T ↑x_1
hV : P.pred fV
h : fU ⟨x, ⋯⟩ = fV ⟨x, ⋯⟩
W : OpenNhds x
iU : W ⟶ unop U
iV : W ⟶ unop V
w : ∀ (w : ↥W.obj), fU ((fun x_1 => ⟨↑x_1, ⋯⟩) w) = fV ((fun x_1 => ⟨↑x_1, ⋯⟩) w)
⊢ colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) U ⟨fU, hU⟩ =
      (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨fun w => fU ((fun x_1 => ⟨↑x_1, ⋯⟩) w), ⋯⟩ ∧
    colimit.ι ((OpenNhds.inclusion x).op ⋙ subpresheafToTypes P.toPrelocalPredicate) V ⟨fV, hV⟩ =
      (subpresheafToTypes P.toPrelocalPredicate).germ ⟨x, ⋯⟩ ⟨fun w => fU ((fun x_1 => ⟨↑x_1, ⋯⟩) w), ⋯⟩
tactic: refine ⟨op W, fun w => fU (iU w : (unop U).1), P.res ?_ _ hU, ?_⟩