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

Proof steps:
state_before: D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
⊢ Function.Injective ⇑(fromOpenSubsetsGlue U)
state_after: D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
x y : ↑(ofOpenSubsets U).glued
e : (fromOpenSubsetsGlue U) x = (fromOpenSubsetsGlue U) y
⊢ x = y
tactic: intro x y e
state_before: D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
x y : ↑(ofOpenSubsets U).glued
e : (fromOpenSubsetsGlue U) x = (fromOpenSubsetsGlue U) y
⊢ x = y
state_after: case intro.intro.mk
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
y : ↑(ofOpenSubsets U).glued
i : (ofOpenSubsets U).J
x : ↑(of α)
hx : x ∈ U i
e : (fromOpenSubsetsGlue U) (((ofOpenSubsets U).ι i) ⟨x, hx⟩) = (fromOpenSubsetsGlue U) y
⊢ ((ofOpenSubsets U).ι i) ⟨x, hx⟩ = y
tactic: obtain ⟨i, ⟨x, hx⟩, rfl⟩ := (ofOpenSubsets U).ι_jointly_surjective x
state_before: case intro.intro.mk
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
y : ↑(ofOpenSubsets U).glued
i : (ofOpenSubsets U).J
x : ↑(of α)
hx : x ∈ U i
e : (fromOpenSubsetsGlue U) (((ofOpenSubsets U).ι i) ⟨x, hx⟩) = (fromOpenSubsetsGlue U) y
⊢ ((ofOpenSubsets U).ι i) ⟨x, hx⟩ = y
state_after: case intro.intro.mk.intro.intro.mk
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
i : (ofOpenSubsets U).J
x : ↑(of α)
hx : x ∈ U i
j : (ofOpenSubsets U).J
y : ↑(of α)
hy : y ∈ U j
e :
  (fromOpenSubsetsGlue U) (((ofOpenSubsets U).ι i) ⟨x, hx⟩) = (fromOpenSubsetsGlue U) (((ofOpenSubsets U).ι j) ⟨y, hy⟩)
⊢ ((ofOpenSubsets U).ι i) ⟨x, hx⟩ = ((ofOpenSubsets U).ι j) ⟨y, hy⟩
tactic: obtain ⟨j, ⟨y, hy⟩, rfl⟩ := (ofOpenSubsets U).ι_jointly_surjective y
state_before: case intro.intro.mk.intro.intro.mk
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
i : (ofOpenSubsets U).J
x : ↑(of α)
hx : x ∈ U i
j : (ofOpenSubsets U).J
y : ↑(of α)
hy : y ∈ U j
e :
  (fromOpenSubsetsGlue U) (((ofOpenSubsets U).ι i) ⟨x, hx⟩) = (fromOpenSubsetsGlue U) (((ofOpenSubsets U).ι j) ⟨y, hy⟩)
⊢ ((ofOpenSubsets U).ι i) ⟨x, hx⟩ = ((ofOpenSubsets U).ι j) ⟨y, hy⟩
state_after: case intro.intro.mk.intro.intro.mk
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
i : (ofOpenSubsets U).J
x : ↑(of α)
hx : x ∈ U i
j : (ofOpenSubsets U).J
y : ↑(of α)
hy : y ∈ U j
e : (U i).inclusion ⟨x, hx⟩ = (U j).inclusion ⟨y, hy⟩
⊢ ((ofOpenSubsets U).ι i) ⟨x, hx⟩ = ((ofOpenSubsets U).ι j) ⟨y, hy⟩
tactic: erw [ι_fromOpenSubsetsGlue_apply, ι_fromOpenSubsetsGlue_apply] at e
state_before: case intro.intro.mk.intro.intro.mk
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
i : (ofOpenSubsets U).J
x : ↑(of α)
hx : x ∈ U i
j : (ofOpenSubsets U).J
y : ↑(of α)
hy : y ∈ U j
e : (U i).inclusion ⟨x, hx⟩ = (U j).inclusion ⟨y, hy⟩
⊢ ((ofOpenSubsets U).ι i) ⟨x, hx⟩ = ((ofOpenSubsets U).ι j) ⟨y, hy⟩
state_after: case intro.intro.mk.intro.intro.mk
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
i : (ofOpenSubsets U).J
x : ↑(of α)
hx : x ∈ U i
j : (ofOpenSubsets U).J
y : ↑(of α)
hy : y ∈ U j
e : x = y
⊢ ((ofOpenSubsets U).ι i) ⟨x, hx⟩ = ((ofOpenSubsets U).ι j) ⟨y, hy⟩
tactic: change x = y at e
state_before: case intro.intro.mk.intro.intro.mk
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
i : (ofOpenSubsets U).J
x : ↑(of α)
hx : x ∈ U i
j : (ofOpenSubsets U).J
y : ↑(of α)
hy : y ∈ U j
e : x = y
⊢ ((ofOpenSubsets U).ι i) ⟨x, hx⟩ = ((ofOpenSubsets U).ι j) ⟨y, hy⟩
state_after: case intro.intro.mk.intro.intro.mk
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
i : (ofOpenSubsets U).J
x : ↑(of α)
hx : x ∈ U i
j : (ofOpenSubsets U).J
hy : x ∈ U j
⊢ ((ofOpenSubsets U).ι i) ⟨x, hx⟩ = ((ofOpenSubsets U).ι j) ⟨x, hy⟩
tactic: subst e
state_before: case intro.intro.mk.intro.intro.mk
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
i : (ofOpenSubsets U).J
x : ↑(of α)
hx : x ∈ U i
j : (ofOpenSubsets U).J
hy : x ∈ U j
⊢ ((ofOpenSubsets U).ι i) ⟨x, hx⟩ = ((ofOpenSubsets U).ι j) ⟨x, hy⟩
state_after: case intro.intro.mk.intro.intro.mk
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
i : (ofOpenSubsets U).J
x : ↑(of α)
hx : x ∈ U i
j : (ofOpenSubsets U).J
hy : x ∈ U j
⊢ (ofOpenSubsets U).Rel ⟨i, ⟨x, hx⟩⟩ ⟨j, ⟨x, hy⟩⟩
tactic: rw [(ofOpenSubsets U).ι_eq_iff_rel]
state_before: case intro.intro.mk.intro.intro.mk
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
i : (ofOpenSubsets U).J
x : ↑(of α)
hx : x ∈ U i
j : (ofOpenSubsets U).J
hy : x ∈ U j
⊢ (ofOpenSubsets U).Rel ⟨i, ⟨x, hx⟩⟩ ⟨j, ⟨x, hy⟩⟩
state_after: case intro.intro.mk.intro.intro.mk.h
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
i : (ofOpenSubsets U).J
x : ↑(of α)
hx : x ∈ U i
j : (ofOpenSubsets U).J
hy : x ∈ U j
⊢ ∃ x_1,
    ((ofOpenSubsets U).f ⟨i, ⟨x, hx⟩⟩.fst ⟨j, ⟨x, hy⟩⟩.fst) x_1 = ⟨i, ⟨x, hx⟩⟩.snd ∧
      ((ofOpenSubsets U).f ⟨j, ⟨x, hy⟩⟩.fst ⟨i, ⟨x, hx⟩⟩.fst)
          (((ofOpenSubsets U).t ⟨i, ⟨x, hx⟩⟩.fst ⟨j, ⟨x, hy⟩⟩.fst) x_1) =
        ⟨j, ⟨x, hy⟩⟩.snd
tactic: right
state_before: case intro.intro.mk.intro.intro.mk.h
D : GlueData
α : Type u
inst✝ : TopologicalSpace α
J : Type u
U : J → Opens α
i : (ofOpenSubsets U).J
x : ↑(of α)
hx : x ∈ U i
j : (ofOpenSubsets U).J
hy : x ∈ U j
⊢ ∃ x_1,
    ((ofOpenSubsets U).f ⟨i, ⟨x, hx⟩⟩.fst ⟨j, ⟨x, hy⟩⟩.fst) x_1 = ⟨i, ⟨x, hx⟩⟩.snd ∧
      ((ofOpenSubsets U).f ⟨j, ⟨x, hy⟩⟩.fst ⟨i, ⟨x, hx⟩⟩.fst)
          (((ofOpenSubsets U).t ⟨i, ⟨x, hx⟩⟩.fst ⟨j, ⟨x, hy⟩⟩.fst) x_1) =
        ⟨j, ⟨x, hy⟩⟩.snd
state_after: no goals
tactic: exact ⟨⟨⟨x, hx⟩, hy⟩, rfl, rfl⟩