Theorem: TopCat.Presheaf.section_ext
File: Mathlib/Topology/Sheaves/Stalks.lean

tactic: choose V m i₁ i₂ heq using fun x : U => F.presheaf.germ_eq x.1 x.2 x.2 s t (h x)
state_before: C : Type u
inst✝⁶ : Category C
inst✝⁵ : HasColimits C
X Y Z : TopCat
inst✝⁴ : ConcreteCategory C
inst✝³ : PreservesFilteredColimits (forget C)
inst✝² : HasLimits C
inst✝¹ : PreservesLimits (forget C)
inst✝ : ReflectsIsomorphisms (forget C)
F : Sheaf C X
U : Opens ↑X
s t : (forget C).obj (F.val.obj U.op)
h : ∀ (x : { x // x ∈ U }), (forget C).map (germ (Sheaf.presheaf F) x) s = (forget C).map (germ (Sheaf.presheaf F) x) t
⊢ s = t

tactic: apply F.eq_of_locally_eq' V U i₁
state_before: C : Type u
inst✝⁶ : Category C
inst✝⁵ : HasColimits C
X Y Z : TopCat
inst✝⁴ : ConcreteCategory C
inst✝³ : PreservesFilteredColimits (forget C)
inst✝² : HasLimits C
inst✝¹ : PreservesLimits (forget C)
inst✝ : ReflectsIsomorphisms (forget C)
F : Sheaf C X
U : Opens ↑X
s t : (forget C).obj (F.val.obj U.op)
h : ∀ (x : { x // x ∈ U }), (forget C).map (germ (Sheaf.presheaf F) x) s = (forget C).map (germ (Sheaf.presheaf F) x) t
V : { x // x ∈ U } → Opens ↑X
m : ∀ (x : { x // x ∈ U }), ↑x ∈ V x
i₁ i₂ : (x : { x // x ∈ U }) → V x ⟶ U
heq :
  ∀ (x : { x // x ∈ U }),
    (forget C).map ((Sheaf.presheaf F).map (i₁ x).op) s = (forget C).map ((Sheaf.presheaf F).map (i₂ x).op) t
⊢ s = t

tactic: intro x hxU
state_before: case hcover
C : Type u
inst✝⁶ : Category C
inst✝⁵ : HasColimits C
X Y Z : TopCat
inst✝⁴ : ConcreteCategory C
inst✝³ : PreservesFilteredColimits (forget C)
inst✝² : HasLimits C
inst✝¹ : PreservesLimits (forget C)
inst✝ : ReflectsIsomorphisms (forget C)
F : Sheaf C X
U : Opens ↑X
s t : (forget C).obj (F.val.obj U.op)
h : ∀ (x : { x // x ∈ U }), (forget C).map (germ (Sheaf.presheaf F) x) s = (forget C).map (germ (Sheaf.presheaf F) x) t
V : { x // x ∈ U } → Opens ↑X
m : ∀ (x : { x // x ∈ U }), ↑x ∈ V x
i₁ i₂ : (x : { x // x ∈ U }) → V x ⟶ U
heq :
  ∀ (x : { x // x ∈ U }),
    (forget C).map ((Sheaf.presheaf F).map (i₁ x).op) s = (forget C).map ((Sheaf.presheaf F).map (i₂ x).op) t
⊢ U ≤ iSup V

tactic: erw [Opens.mem_iSup]
state_before: case hcover
C : Type u
inst✝⁶ : Category C
inst✝⁵ : HasColimits C
X Y Z : TopCat
inst✝⁴ : ConcreteCategory C
inst✝³ : PreservesFilteredColimits (forget C)
inst✝² : HasLimits C
inst✝¹ : PreservesLimits (forget C)
inst✝ : ReflectsIsomorphisms (forget C)
F : Sheaf C X
U : Opens ↑X
s t : (forget C).obj (F.val.obj U.op)
h : ∀ (x : { x // x ∈ U }), (forget C).map (germ (Sheaf.presheaf F) x) s = (forget C).map (germ (Sheaf.presheaf F) x) t
V : { x // x ∈ U } → Opens ↑X
m : ∀ (x : { x // x ∈ U }), ↑x ∈ V x
i₁ i₂ : (x : { x // x ∈ U }) → V x ⟶ U
heq :
  ∀ (x : { x // x ∈ U }),
    (forget C).map ((Sheaf.presheaf F).map (i₁ x).op) s = (forget C).map ((Sheaf.presheaf F).map (i₂ x).op) t
x : ↑X
hxU : x ∈ ↑U
⊢ x ∈ ↑(iSup V)

tactic: exact ⟨⟨x, hxU⟩, m ⟨x, hxU⟩⟩
state_before: case hcover
C : Type u
inst✝⁶ : Category C
inst✝⁵ : HasColimits C
X Y Z : TopCat
inst✝⁴ : ConcreteCategory C
inst✝³ : PreservesFilteredColimits (forget C)
inst✝² : HasLimits C
inst✝¹ : PreservesLimits (forget C)
inst✝ : ReflectsIsomorphisms (forget C)
F : Sheaf C X
U : Opens ↑X
s t : (forget C).obj (F.val.obj U.op)
h : ∀ (x : { x // x ∈ U }), (forget C).map (germ (Sheaf.presheaf F) x) s = (forget C).map (germ (Sheaf.presheaf F) x) t
V : { x // x ∈ U } → Opens ↑X
m : ∀ (x : { x // x ∈ U }), ↑x ∈ V x
i₁ i₂ : (x : { x // x ∈ U }) → V x ⟶ U
heq :
  ∀ (x : { x // x ∈ U }),
    (forget C).map ((Sheaf.presheaf F).map (i₁ x).op) s = (forget C).map ((Sheaf.presheaf F).map (i₂ x).op) t
x : ↑X
hxU : x ∈ ↑U
⊢ ∃ i, x ∈ V i

tactic: intro x
state_before: case h
C : Type u
inst✝⁶ : Category C
inst✝⁵ : HasColimits C
X Y Z : TopCat
inst✝⁴ : ConcreteCategory C
inst✝³ : PreservesFilteredColimits (forget C)
inst✝² : HasLimits C
inst✝¹ : PreservesLimits (forget C)
inst✝ : ReflectsIsomorphisms (forget C)
F : Sheaf C X
U : Opens ↑X
s t : (forget C).obj (F.val.obj U.op)
h : ∀ (x : { x // x ∈ U }), (forget C).map (germ (Sheaf.presheaf F) x) s = (forget C).map (germ (Sheaf.presheaf F) x) t
V : { x // x ∈ U } → Opens ↑X
m : ∀ (x : { x // x ∈ U }), ↑x ∈ V x
i₁ i₂ : (x : { x // x ∈ U }) → V x ⟶ U
heq :
  ∀ (x : { x // x ∈ U }),
    (forget C).map ((Sheaf.presheaf F).map (i₁ x).op) s = (forget C).map ((Sheaf.presheaf F).map (i₂ x).op) t
⊢ ∀ (i : { x // x ∈ U }), (forget C).map (F.val.map (i₁ i).op) s = (forget C).map (F.val.map (i₁ i).op) t

tactic: rw [heq, Subsingleton.elim (i₁ x) (i₂ x)]
state_before: case h
C : Type u
inst✝⁶ : Category C
inst✝⁵ : HasColimits C
X Y Z : TopCat
inst✝⁴ : ConcreteCategory C
inst✝³ : PreservesFilteredColimits (forget C)
inst✝² : HasLimits C
inst✝¹ : PreservesLimits (forget C)
inst✝ : ReflectsIsomorphisms (forget C)
F : Sheaf C X
U : Opens ↑X
s t : (forget C).obj (F.val.obj U.op)
h : ∀ (x : { x // x ∈ U }), (forget C).map (germ (Sheaf.presheaf F) x) s = (forget C).map (germ (Sheaf.presheaf F) x) t
V : { x // x ∈ U } → Opens ↑X
m : ∀ (x : { x // x ∈ U }), ↑x ∈ V x
i₁ i₂ : (x : { x // x ∈ U }) → V x ⟶ U
heq :
  ∀ (x : { x // x ∈ U }),
    (forget C).map ((Sheaf.presheaf F).map (i₁ x).op) s = (forget C).map ((Sheaf.presheaf F).map (i₂ x).op) t
x : { x // x ∈ U }
⊢ (forget C).map (F.val.map (i₁ x).op) s = (forget C).map (F.val.map (i₁ x).op) t