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

tactic: intro s hs
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: 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 : 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 [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)
⊢ 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: rintro _ ⟨x, hx, rfl⟩
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: obtain ⟨i, ⟨x, hx'⟩, rfl⟩ := (ofOpenSubsets U).ι_jointly_surjective x
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: use fromOpenSubsetsGlue U '' s ∩ Set.range (@Opens.inclusion (TopCat.of α) (U i))
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 Set.inter_subset_left
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: constructor
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: erw [← Set.image_preimage_eq_inter_range]
state_before: 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)
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 (⇑(U i).inclusion '' (⇑(U i).inclusion ⁻¹' (⇑(fromOpenSubsetsGlue U) '' s)))

tactic: apply (Opens.openEmbedding (X := TopCat.of α) (U i)).isOpenMap
state_before: 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 (⇑(U i).inclusion '' (⇑(U i).inclusion ⁻¹' (⇑(fromOpenSubsetsGlue U) '' s)))
state_after: case right.left.a
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 (⇑(U i).inclusion ⁻¹' (⇑(fromOpenSubsetsGlue U) '' s))

tactic: convert hs i using 1
state_before: case right.left.a
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 (⇑(U i).inclusion ⁻¹' (⇑(fromOpenSubsetsGlue U) '' s))
state_after: case h.e'_3.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
e_1✝ : ↑((Opens.toTopCat (of α)).obj (U i)) = ↑((ofOpenSubsets U).U i)
⊢ ⇑(U i).inclusion ⁻¹' (⇑(fromOpenSubsetsGlue U) '' s) = ⇑((ofOpenSubsets U).ι i) ⁻¹' s

tactic: erw [← ι_fromOpenSubsetsGlue, coe_comp, Set.preimage_comp]
state_before: case h.e'_3.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
e_1✝ : ↑((Opens.toTopCat (of α)).obj (U i)) = ↑((ofOpenSubsets U).U i)
⊢ ⇑(U i).inclusion ⁻¹' (⇑(fromOpenSubsetsGlue U) '' s) = ⇑((ofOpenSubsets U).ι i) ⁻¹' s
state_after: case h.e'_3.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
e_1✝ : ↑((Opens.toTopCat (of α)).obj (U i)) = ↑((ofOpenSubsets U).U i)
⊢ ⇑((ofOpenSubsets U).ι i) ⁻¹' (⇑(fromOpenSubsetsGlue U) ⁻¹' (⇑(fromOpenSubsetsGlue U) '' s)) =
    ⇑((ofOpenSubsets U).ι i) ⁻¹' s

tactic: apply congr_arg
state_before: case h.e'_3.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
e_1✝ : ↑((Opens.toTopCat (of α)).obj (U i)) = ↑((ofOpenSubsets U).U i)
⊢ ⇑((ofOpenSubsets U).ι i) ⁻¹' (⇑(fromOpenSubsetsGlue U) ⁻¹' (⇑(fromOpenSubsetsGlue U) '' s)) =
    ⇑((ofOpenSubsets U).ι i) ⁻¹' s
state_after: case h.e'_3.h.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
e_1✝ : ↑((Opens.toTopCat (of α)).obj (U i)) = ↑((ofOpenSubsets U).U i)
⊢ ⇑(fromOpenSubsetsGlue U) ⁻¹' (⇑(fromOpenSubsetsGlue U) '' s) = s

tactic: exact Set.preimage_image_eq _ (fromOpenSubsetsGlue_injective U)
state_before: case h.e'_3.h.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
e_1✝ : ↑((Opens.toTopCat (of α)).obj (U i)) = ↑((ofOpenSubsets U).U i)
⊢ ⇑(fromOpenSubsetsGlue U) ⁻¹' (⇑(fromOpenSubsetsGlue U) '' s) = s
state_after: no goals

tactic: refine ⟨Set.mem_image_of_mem _ hx, ?_⟩
state_before: 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
state_after: 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'⟩) ∈ Set.range ⇑(U i).inclusion

tactic: erw [ι_fromOpenSubsetsGlue_apply]
state_before: 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'⟩) ∈ Set.range ⇑(U i).inclusion
state_after: 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
⊢ (U i).inclusion ⟨x, hx'⟩ ∈ Set.range ⇑(U i).inclusion

tactic: exact Set.mem_range_self _
state_before: 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
⊢ (U i).inclusion ⟨x, hx'⟩ ∈ Set.range ⇑(U i).inclusion
state_after: no goals