Theorem: TopCat.GlueData.fromOpenSubsetsGlue_isOpenMap
File: Mathlib/Topology/Gluing.lean

Proof steps:
state_before: D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
⊢ IsOpenMap ⇑(fromOpenSubsetsGlue U)
state_after: D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : IsOpen s
⊢ IsOpen (⇑(fromOpenSubsetsGlue U) '' s)
tactic: intro s hs
state_before: D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : IsOpen s
⊢ IsOpen (⇑(fromOpenSubsetsGlue U) '' s)
state_after: D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : ∀ (i : (ofOpenSubsets U).J), IsOpen (⇑((ofOpenSubsets U).ι i) ⁻¹' s)
⊢ IsOpen (⇑(fromOpenSubsetsGlue U) '' s)
tactic: rw [(ofOpenSubsets U).isOpen_iff] at hs
state_before: D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : ∀ (i : (ofOpenSubsets U).J), IsOpen (⇑((ofOpenSubsets U).ι i) ⁻¹' s)
⊢ IsOpen (⇑(fromOpenSubsetsGlue U) '' s)
state_after: D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : ∀ (i : (ofOpenSubsets U).J), IsOpen (⇑((ofOpenSubsets U).ι i) ⁻¹' s)
⊢ ∀ x ∈ ⇑(fromOpenSubsetsGlue U) '' s, ∃ t ⊆ ⇑(fromOpenSubsetsGlue U) '' s, IsOpen t ∧ x ∈ t
tactic: rw [isOpen_iff_forall_mem_open]
state_before: D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : ∀ (i : (ofOpenSubsets U).J), IsOpen (⇑((ofOpenSubsets U).ι i) ⁻¹' s)
⊢ ∀ x ∈ ⇑(fromOpenSubsetsGlue U) '' s, ∃ t ⊆ ⇑(fromOpenSubsetsGlue U) '' s, IsOpen t ∧ x ∈ t
state_after: case intro.intro
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : ∀ (i : (ofOpenSubsets U).J), IsOpen (⇑((ofOpenSubsets U).ι i) ⁻¹' s)
x : ↑(ofOpenSubsets U).glued
hx : x ∈ s
⊢ ∃ t ⊆ ⇑(fromOpenSubsetsGlue U) '' s, IsOpen t ∧ (fromOpenSubsetsGlue U) x ∈ t
tactic: rintro _ ⟨x, hx, rfl⟩
state_before: case intro.intro
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : ∀ (i : (ofOpenSubsets U).J), IsOpen (⇑((ofOpenSubsets U).ι i) ⁻¹' s)
x : ↑(ofOpenSubsets U).glued
hx : x ∈ s
⊢ ∃ t ⊆ ⇑(fromOpenSubsetsGlue U) '' s, IsOpen t ∧ (fromOpenSubsetsGlue U) x ∈ t
state_after: case intro.intro.intro.intro.mk
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : ∀ (i : (ofOpenSubsets U).J), IsOpen (⇑((ofOpenSubsets U).ι i) ⁻¹' s)
i : (ofOpenSubsets U).J
x : ↑(of α)
hx' : x ∈ U i
hx : ((ofOpenSubsets U).ι i) ⟨x, hx'⟩ ∈ s
⊢ ∃ t ⊆ ⇑(fromOpenSubsetsGlue U) '' s, IsOpen t ∧ (fromOpenSubsetsGlue U) (((ofOpenSubsets U).ι i) ⟨x, hx'⟩) ∈ t
tactic: obtain ⟨i, ⟨x, hx'⟩, rfl⟩ := (ofOpenSubsets U).ι_jointly_surjective x
state_before: case intro.intro.intro.intro.mk
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : ∀ (i : (ofOpenSubsets U).J), IsOpen (⇑((ofOpenSubsets U).ι i) ⁻¹' s)
i : (ofOpenSubsets U).J
x : ↑(of α)
hx' : x ∈ U i
hx : ((ofOpenSubsets U).ι i) ⟨x, hx'⟩ ∈ s
⊢ ∃ t ⊆ ⇑(fromOpenSubsetsGlue U) '' s, IsOpen t ∧ (fromOpenSubsetsGlue U) (((ofOpenSubsets U).ι i) ⟨x, hx'⟩) ∈ t
state_after: case h
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : ∀ (i : (ofOpenSubsets U).J), IsOpen (⇑((ofOpenSubsets U).ι i) ⁻¹' s)
i : (ofOpenSubsets U).J
x : ↑(of α)
hx' : x ∈ U i
hx : ((ofOpenSubsets U).ι i) ⟨x, hx'⟩ ∈ s
⊢ ⇑(fromOpenSubsetsGlue U) '' s ∩ Set.range ⇑(U i).inclusion ⊆ ⇑(fromOpenSubsetsGlue U) '' s ∧
    IsOpen (⇑(fromOpenSubsetsGlue U) '' s ∩ Set.range ⇑(U i).inclusion) ∧
      (fromOpenSubsetsGlue U) (((ofOpenSubsets U).ι i) ⟨x, hx'⟩) ∈
        ⇑(fromOpenSubsetsGlue U) '' s ∩ Set.range ⇑(U i).inclusion
tactic: use fromOpenSubsetsGlue U '' s ∩ Set.range (@Opens.inclusion (TopCat.of α) (U i))
state_before: case h
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : ∀ (i : (ofOpenSubsets U).J), IsOpen (⇑((ofOpenSubsets U).ι i) ⁻¹' s)
i : (ofOpenSubsets U).J
x : ↑(of α)
hx' : x ∈ U i
hx : ((ofOpenSubsets U).ι i) ⟨x, hx'⟩ ∈ s
⊢ ⇑(fromOpenSubsetsGlue U) '' s ∩ Set.range ⇑(U i).inclusion ⊆ ⇑(fromOpenSubsetsGlue U) '' s ∧
    IsOpen (⇑(fromOpenSubsetsGlue U) '' s ∩ Set.range ⇑(U i).inclusion) ∧
      (fromOpenSubsetsGlue U) (((ofOpenSubsets U).ι i) ⟨x, hx'⟩) ∈
        ⇑(fromOpenSubsetsGlue U) '' s ∩ Set.range ⇑(U i).inclusion
state_after: case right
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : ∀ (i : (ofOpenSubsets U).J), IsOpen (⇑((ofOpenSubsets U).ι i) ⁻¹' s)
i : (ofOpenSubsets U).J
x : ↑(of α)
hx' : x ∈ U i
hx : ((ofOpenSubsets U).ι i) ⟨x, hx'⟩ ∈ s
⊢ IsOpen (⇑(fromOpenSubsetsGlue U) '' s ∩ Set.range ⇑(U i).inclusion) ∧
    (fromOpenSubsetsGlue U) (((ofOpenSubsets U).ι i) ⟨x, hx'⟩) ∈
      ⇑(fromOpenSubsetsGlue U) '' s ∩ Set.range ⇑(U i).inclusion
tactic: use Set.inter_subset_left
state_before: case right
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : ∀ (i : (ofOpenSubsets U).J), IsOpen (⇑((ofOpenSubsets U).ι i) ⁻¹' s)
i : (ofOpenSubsets U).J
x : ↑(of α)
hx' : x ∈ U i
hx : ((ofOpenSubsets U).ι i) ⟨x, hx'⟩ ∈ s
⊢ IsOpen (⇑(fromOpenSubsetsGlue U) '' s ∩ Set.range ⇑(U i).inclusion) ∧
    (fromOpenSubsetsGlue U) (((ofOpenSubsets U).ι i) ⟨x, hx'⟩) ∈
      ⇑(fromOpenSubsetsGlue U) '' s ∩ Set.range ⇑(U i).inclusion
state_after: case right.left
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : ∀ (i : (ofOpenSubsets U).J), IsOpen (⇑((ofOpenSubsets U).ι i) ⁻¹' s)
i : (ofOpenSubsets U).J
x : ↑(of α)
hx' : x ∈ U i
hx : ((ofOpenSubsets U).ι i) ⟨x, hx'⟩ ∈ s
⊢ IsOpen (⇑(fromOpenSubsetsGlue U) '' s ∩ Set.range ⇑(U i).inclusion)

case right.right
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
s : Set ↑(ofOpenSubsets U).glued
hs : ∀ (i : (ofOpenSubsets U).J), IsOpen (⇑((ofOpenSubsets U).ι i) ⁻¹' s)
i : (ofOpenSubsets U).J
x : ↑(of α)
hx' : x ∈ U i
hx : ((ofOpenSubsets U).ι i) ⟨x, hx'⟩ ∈ s
⊢ (fromOpenSubsetsGlue U) (((ofOpenSubsets U).ι i) ⟨x, hx'⟩) ∈
    ⇑(fromOpenSubsetsGlue U) '' s ∩ Set.range ⇑(U i).inclusion
tactic: constructor