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.{v, u} C
inst✝⁵ : HasColimits C
X Y Z : TopCat
inst✝⁴ : ConcreteCategory C
inst✝³ : PreservesFilteredColimits (forget C)
inst✝² : HasLimits C
inst✝¹ : PreservesLimits (forget C)
inst✝ : (forget C).ReflectsIsomorphisms
F : Sheaf C X
U : Opens ↑X
s t : (forget C).obj (F.val.obj { unop := U })
h : ∀ (x : ↥U), (F.presheaf.germ x) s = (F.presheaf.germ x) t
⊢ s = t
state_after: C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : HasColimits C
X Y Z : TopCat
inst✝⁴ : ConcreteCategory C
inst✝³ : PreservesFilteredColimits (forget C)
inst✝² : HasLimits C
inst✝¹ : PreservesLimits (forget C)
inst✝ : (forget C).ReflectsIsomorphisms
F : Sheaf C X
U : Opens ↑X
s t : (forget C).obj (F.val.obj { unop := U })
h : ∀ (x : ↥U), (F.presheaf.germ x) s = (F.presheaf.germ x) t
V : ↥U → Opens ↑X
m : ∀ (x : ↥U), ↑x ∈ V x
i₁ i₂ : (x : ↥U) → V x ⟶ U
heq : ∀ (x : ↥U), (F.presheaf.map (i₁ x).op) s = (F.presheaf.map (i₂ x).op) t
⊢ s = t

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

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

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

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

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

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

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