case w
X : TopCat
F : Presheaf (Type v) X
x : ↑X
⊢ ∀ (U V : OpenNhds x) (fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y),
    PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU →
      ∀ (fV : (y : { x_2 // x_2 ∈ V.obj }) → stalk F ↑y),
        PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV →
          fU { val := x, property := (_ : x ∈ U.obj) } = fV { val := x, property := (_ : x ∈ V.obj) } →
            ∃ W iU iV,
              ∀ (w : { x_4 // x_4 ∈ W.obj }),
                fU ((fun x_4 => { val := ↑x_4, property := (_ : ↑x_4 ∈ ↑U.obj) }) w) =
                  fV ((fun x_4 => { val := ↑x_4, property := (_ : ↑x_4 ∈ ↑V.obj) }) w)
X : TopCat
F : Presheaf (Type v) X
x : ↑X
⊢ Function.Injective (stalkToFiber F x)
apply TopCat.stalkToFiber_injective
case w
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
e : fU { val := x, property := (_ : x ∈ U.obj) } = fV { val := x, property := (_ : x ∈ V.obj) }
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w
X : TopCat
F : Presheaf (Type v) X
x : ↑X
⊢ ∀ (U V : OpenNhds x) (fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y),
    PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU →
      ∀ (fV : (y : { x_2 // x_2 ∈ V.obj }) → stalk F ↑y),
        PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV →
          fU { val := x, property := (_ : x ∈ U.obj) } = fV { val := x, property := (_ : x ∈ V.obj) } →
            ∃ W iU iV,
              ∀ (w : { x_4 // x_4 ∈ W.obj }),
                fU ((fun x_4 => { val := ↑x_4, property := (_ : ↑x_4 ∈ ↑U.obj) }) w) =
                  fV ((fun x_4 => { val := ↑x_4, property := (_ : ↑x_4 ∈ ↑V.obj) }) w)
intro U V fU hU fV hV e
case w.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
e : fU { val := x, property := (_ : x ∈ U.obj) } = fV { val := x, property := (_ : x ∈ V.obj) }
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
e : fU { val := x, property := (_ : x ∈ U.obj) } = fV { val := x, property := (_ : x ∈ V.obj) }
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
rcases hU ⟨x, U.2⟩ with ⟨U', mU, iU, gU, wU⟩
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
e : fU { val := x, property := (_ : x ∈ U.obj) } = fV { val := x, property := (_ : x ∈ V.obj) }
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
e : fU { val := x, property := (_ : x ∈ U.obj) } = fV { val := x, property := (_ : x ∈ V.obj) }
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
rcases hV ⟨x, V.2⟩ with ⟨V', mV, iV, gV, wV⟩
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
e : fU { val := x, property := (_ : x ∈ U.obj) } = fV { val := x, property := (_ : x ∈ V.obj) }
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
wUx :
  (fun x_1 => fU ((fun x_2 => { val := ↑x_2, property := (_ : ↑x_2 ∈ ↑U.obj) }) x_1)) { val := x, property := mU } =
    germ F { val := x, property := mU } gU
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
e : fU { val := x, property := (_ : x ∈ U.obj) } = fV { val := x, property := (_ : x ∈ V.obj) }
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
have wUx := wU ⟨x, mU⟩
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
e : fU { val := x, property := (_ : x ∈ U.obj) } = fV { val := x, property := (_ : x ∈ V.obj) }
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
wUx : fU { val := x, property := (_ : ↑{ val := x, property := mU } ∈ ↑U.obj) } = germ F { val := x, property := mU } gU
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
e : fU { val := x, property := (_ : x ∈ U.obj) } = fV { val := x, property := (_ : x ∈ V.obj) }
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
wUx :
  (fun x_1 => fU ((fun x_2 => { val := ↑x_2, property := (_ : ↑x_2 ∈ ↑U.obj) }) x_1)) { val := x, property := mU } =
    germ F { val := x, property := mU } gU
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
dsimp at wUx
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
e : germ F { val := x, property := mU } gU = fV { val := x, property := (_ : x ∈ V.obj) }
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
wUx : fU { val := x, property := (_ : ↑{ val := x, property := mU } ∈ ↑U.obj) } = germ F { val := x, property := mU } gU
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
e : fU { val := x, property := (_ : x ∈ U.obj) } = fV { val := x, property := (_ : x ∈ V.obj) }
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
wUx : fU { val := x, property := (_ : ↑{ val := x, property := mU } ∈ ↑U.obj) } = germ F { val := x, property := mU } gU
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
erw [wUx] at e
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
e : germ F { val := x, property := mU } gU = fV { val := x, property := (_ : x ∈ V.obj) }
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
e : germ F { val := x, property := mU } gU = fV { val := x, property := (_ : x ∈ V.obj) }
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
wUx : fU { val := x, property := (_ : ↑{ val := x, property := mU } ∈ ↑U.obj) } = germ F { val := x, property := mU } gU
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
clear wUx
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
e : germ F { val := x, property := mU } gU = fV { val := x, property := (_ : x ∈ V.obj) }
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
wVx :
  (fun x_1 => fV ((fun x_2 => { val := ↑x_2, property := (_ : ↑x_2 ∈ ↑V.obj) }) x_1)) { val := x, property := mV } =
    germ F { val := x, property := mV } gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
e : germ F { val := x, property := mU } gU = fV { val := x, property := (_ : x ∈ V.obj) }
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
have wVx := wV ⟨x, mV⟩
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
e : germ F { val := x, property := mU } gU = fV { val := x, property := (_ : x ∈ V.obj) }
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
wVx : fV { val := x, property := (_ : ↑{ val := x, property := mV } ∈ ↑V.obj) } = germ F { val := x, property := mV } gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
e : germ F { val := x, property := mU } gU = fV { val := x, property := (_ : x ∈ V.obj) }
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
wVx :
  (fun x_1 => fV ((fun x_2 => { val := ↑x_2, property := (_ : ↑x_2 ∈ ↑V.obj) }) x_1)) { val := x, property := mV } =
    germ F { val := x, property := mV } gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
dsimp at wVx
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
wVx : fV { val := x, property := (_ : ↑{ val := x, property := mV } ∈ ↑V.obj) } = germ F { val := x, property := mV } gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
e : germ F { val := x, property := mU } gU = fV { val := x, property := (_ : x ∈ V.obj) }
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
wVx : fV { val := x, property := (_ : ↑{ val := x, property := mV } ∈ ↑V.obj) } = germ F { val := x, property := mV } gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
erw [wVx] at e
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
wVx : fV { val := x, property := (_ : ↑{ val := x, property := mV } ∈ ↑V.obj) } = germ F { val := x, property := mV } gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
clear wVx
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
rcases F.germ_eq x mU mV gU gV e with ⟨W, mW, iU', iV', e'⟩
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
dsimp at e'
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ ∃ iU iV,
    ∀ (w : { x_1 // x_1 ∈ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) }.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ ∃ W iU iV,
    ∀ (w : { x_1 // x_1 ∈ W.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
use ⟨W ⊓ (U' ⊓ V'), ⟨mW, mU, mV⟩⟩
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) } ⟶ U

case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) } ⟶ V

case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ ∀ (w : { x_1 // x_1 ∈ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) }.obj }),
    fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
      fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ ∃ iU iV,
    ∀ (w : { x_1 // x_1 ∈ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) }.obj }),
      fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
        fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
refine' ⟨_, _, _⟩
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ W ⊓ (U' ⊓ V') ⟶ U.obj
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) } ⟶ U
change W ⊓ (U' ⊓ V') ⟶ U.obj
no goals
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ W ⊓ (U' ⊓ V') ⟶ U.obj
exact Opens.infLERight _ _ ≫ Opens.infLELeft _ _ ≫ iU
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ W ⊓ (U' ⊓ V') ⟶ V.obj
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) } ⟶ V
change W ⊓ (U' ⊓ V') ⟶ V.obj
no goals
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ W ⊓ (U' ⊓ V') ⟶ V.obj
exact Opens.infLERight _ _ ≫ Opens.infLERight _ _ ≫ iV
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
w : { x_1 // x_1 ∈ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) }.obj }
⊢ fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
    fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
⊢ ∀ (w : { x_1 // x_1 ∈ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) }.obj }),
    fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
      fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
intro w
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
w : { x_1 // x_1 ∈ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) }.obj }
wU :
  (fun x_1 => fU ((fun x_2 => { val := ↑x_2, property := (_ : ↑x_2 ∈ ↑U.obj) }) x_1))
      { val := ↑w, property := (_ : ↑w ∈ ↑U') } =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑U') } gU
⊢ fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
    fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
wU :
  ∀ (x_1 : { x // x ∈ U' }),
    (fun x_2 => fU ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑U.obj) }) x_2)) x_1 = germ F x_1 gU
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
w : { x_1 // x_1 ∈ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) }.obj }
⊢ fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
    fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
specialize wU ⟨w.1, w.2.2.1⟩
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
w : { x_1 // x_1 ∈ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) }.obj }
wU :
  (fun x_1 => fU ((fun x_2 => { val := ↑x_2, property := (_ : ↑x_2 ∈ ↑U.obj) }) x_1))
      { val := ↑w, property := (_ : ↑w ∈ ↑U') } =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑U') } gU
wV :
  (fun x_1 => fV ((fun x_2 => { val := ↑x_2, property := (_ : ↑x_2 ∈ ↑V.obj) }) x_1))
      { val := ↑w, property := (_ : ↑w ∈ ↑V') } =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑V') } gV
⊢ fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
    fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
wV :
  ∀ (x_1 : { x // x ∈ V' }),
    (fun x_2 => fV ((fun x_3 => { val := ↑x_3, property := (_ : ↑x_3 ∈ ↑V.obj) }) x_2)) x_1 = germ F x_1 gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
w : { x_1 // x_1 ∈ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) }.obj }
wU :
  (fun x_1 => fU ((fun x_2 => { val := ↑x_2, property := (_ : ↑x_2 ∈ ↑U.obj) }) x_1))
      { val := ↑w, property := (_ : ↑w ∈ ↑U') } =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑U') } gU
⊢ fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
    fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
specialize wV ⟨w.1, w.2.2.2⟩
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
w : { x_1 // x_1 ∈ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) }.obj }
wU :
  fU { val := ↑w, property := (_ : ↑{ val := ↑w, property := (_ : ↑w ∈ ↑U') } ∈ ↑U.obj) } =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑U') } gU
wV :
  fV { val := ↑w, property := (_ : ↑{ val := ↑w, property := (_ : ↑w ∈ ↑V') } ∈ ↑V.obj) } =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑V') } gV
⊢ fU { val := ↑w, property := (_ : ↑w ∈ ↑U.obj) } = fV { val := ↑w, property := (_ : ↑w ∈ ↑V.obj) }
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
w : { x_1 // x_1 ∈ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) }.obj }
wU :
  (fun x_1 => fU ((fun x_2 => { val := ↑x_2, property := (_ : ↑x_2 ∈ ↑U.obj) }) x_1))
      { val := ↑w, property := (_ : ↑w ∈ ↑U') } =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑U') } gU
wV :
  (fun x_1 => fV ((fun x_2 => { val := ↑x_2, property := (_ : ↑x_2 ∈ ↑V.obj) }) x_1))
      { val := ↑w, property := (_ : ↑w ∈ ↑V') } =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑V') } gV
⊢ fU ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑U.obj) }) w) =
    fV ((fun x_1 => { val := ↑x_1, property := (_ : ↑x_1 ∈ ↑V.obj) }) w)
dsimp at wU wV ⊢
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
w : { x_1 // x_1 ∈ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) }.obj }
wU :
  fU { val := ↑w, property := (_ : ↑{ val := ↑w, property := (_ : ↑w ∈ ↑U') } ∈ ↑U.obj) } =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑U') } gU
wV :
  fV { val := ↑w, property := (_ : ↑{ val := ↑w, property := (_ : ↑w ∈ ↑V') } ∈ ↑V.obj) } =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑V') } gV
⊢ germ F { val := ↑w, property := (_ : ↑w ∈ ↑W) } ((CategoryTheory.forget (Type v)).map (F.map iV'.op) gV) =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑W) } (F.map iV'.op gV)
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
w : { x_1 // x_1 ∈ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) }.obj }
wU :
  fU { val := ↑w, property := (_ : ↑{ val := ↑w, property := (_ : ↑w ∈ ↑U') } ∈ ↑U.obj) } =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑U') } gU
wV :
  fV { val := ↑w, property := (_ : ↑{ val := ↑w, property := (_ : ↑w ∈ ↑V') } ∈ ↑V.obj) } =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑V') } gV
⊢ fU { val := ↑w, property := (_ : ↑w ∈ ↑U.obj) } = fV { val := ↑w, property := (_ : ↑w ∈ ↑V.obj) }
erw [wU, ← F.germ_res iU' ⟨w, w.2.1⟩, wV, ← F.germ_res iV' ⟨w, w.2.1⟩,
  CategoryTheory.types_comp_apply, CategoryTheory.types_comp_apply, e']
no goals
case w.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
X : TopCat
F : Presheaf (Type v) X
x : ↑X
U V : OpenNhds x
fU : (y : { x_1 // x_1 ∈ U.obj }) → stalk F ↑y
hU : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fU
fV : (y : { x_1 // x_1 ∈ V.obj }) → stalk F ↑y
hV : PrelocalPredicate.pred (Sheafify.isLocallyGerm F).toPrelocalPredicate fV
U' : Opens ↑X
mU : ↑{ val := x, property := (_ : x ∈ U.obj) } ∈ U'
iU : U' ⟶ U.obj
gU : F.obj U'.op
V' : Opens ↑X
mV : ↑{ val := x, property := (_ : x ∈ V.obj) } ∈ V'
iV : V' ⟶ V.obj
gV : F.obj V'.op
e : germ F { val := x, property := mU } gU = germ F { val := x, property := mV } gV
W : Opens ↑X
mW : x ∈ W
iU' : W ⟶ U'
iV' : W ⟶ V'
e' : (CategoryTheory.forget (Type v)).map (F.map iU'.op) gU = (CategoryTheory.forget (Type v)).map (F.map iV'.op) gV
w : { x_1 // x_1 ∈ { obj := W ⊓ (U' ⊓ V'), property := (_ : x ∈ ↑W ∧ x ∈ ↑(U' ⊓ V')) }.obj }
wU :
  fU { val := ↑w, property := (_ : ↑{ val := ↑w, property := (_ : ↑w ∈ ↑U') } ∈ ↑U.obj) } =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑U') } gU
wV :
  fV { val := ↑w, property := (_ : ↑{ val := ↑w, property := (_ : ↑w ∈ ↑V') } ∈ ↑V.obj) } =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑V') } gV
⊢ germ F { val := ↑w, property := (_ : ↑w ∈ ↑W) } ((CategoryTheory.forget (Type v)).map (F.map iV'.op) gV) =
    germ F { val := ↑w, property := (_ : ↑w ∈ ↑W) } (F.map iV'.op gV)
rfl