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

tactic: ext x
state_before: D : GlueData
i j : D.J
⊢ Set.range ⇑(D.ι i) ∩ Set.range ⇑(D.ι j) = Set.range ⇑(D.f i j ≫ D.ι i)
state_after: case h
D : GlueData
i j : D.J
x : ↑D.glued
⊢ x ∈ Set.range ⇑(D.ι i) ∩ Set.range ⇑(D.ι j) ↔ x ∈ Set.range ⇑(D.f i j ≫ D.ι i)

tactic: constructor
state_before: case h
D : GlueData
i j : D.J
x : ↑D.glued
⊢ x ∈ Set.range ⇑(D.ι i) ∩ Set.range ⇑(D.ι j) ↔ x ∈ Set.range ⇑(D.f i j ≫ D.ι i)
state_after: case h.mp
D : GlueData
i j : D.J
x : ↑D.glued
⊢ x ∈ Set.range ⇑(D.ι i) ∩ Set.range ⇑(D.ι j) → x ∈ Set.range ⇑(D.f i j ≫ D.ι i)

case h.mpr
D : GlueData
i j : D.J
x : ↑D.glued
⊢ x ∈ Set.range ⇑(D.f i j ≫ D.ι i) → x ∈ Set.range ⇑(D.ι i) ∩ Set.range ⇑(D.ι j)

tactic: rintro ⟨⟨x₁, eq₁⟩, ⟨x₂, eq₂⟩⟩
state_before: case h.mp
D : GlueData
i j : D.J
x : ↑D.glued
⊢ x ∈ Set.range ⇑(D.ι i) ∩ Set.range ⇑(D.ι j) → x ∈ Set.range ⇑(D.f i j ≫ D.ι i)
state_after: case h.mp.intro.intro.intro
D : GlueData
i j : D.J
x : ↑D.glued
x₁ : ↑(D.U i)
eq₁ : (D.ι i) x₁ = x
x₂ : ↑(D.U j)
eq₂ : (D.ι j) x₂ = x
⊢ x ∈ Set.range ⇑(D.f i j ≫ D.ι i)

tactic: obtain ⟨⟨⟩⟩ | ⟨y, e₁, -⟩ := (D.ι_eq_iff_rel _ _ _ _).mp (eq₁.trans eq₂.symm)
state_before: case h.mp.intro.intro.intro
D : GlueData
i j : D.J
x : ↑D.glued
x₁ : ↑(D.U i)
eq₁ : (D.ι i) x₁ = x
x₂ : ↑(D.U j)
eq₂ : (D.ι j) x₂ = x
⊢ x ∈ Set.range ⇑(D.f i j ≫ D.ι i)
state_after: case h.mp.intro.intro.intro.inl.refl
D : GlueData
i : D.J
x : ↑D.glued
x₁ : ↑(D.U i)
eq₁ eq₂ : (D.ι i) x₁ = x
⊢ x ∈ Set.range ⇑(D.f i i ≫ D.ι i)

case h.mp.intro.intro.intro.inr.intro.intro
D : GlueData
i j : D.J
x : ↑D.glued
x₁ : ↑(D.U i)
eq₁ : (D.ι i) x₁ = x
x₂ : ↑(D.U j)
eq₂ : (D.ι j) x₂ = x
y : ↑(D.V (⟨i, x₁⟩.fst, ⟨j, x₂⟩.fst))
e₁ : (D.f ⟨i, x₁⟩.fst ⟨j, x₂⟩.fst) y = ⟨i, x₁⟩.snd
⊢ x ∈ Set.range ⇑(D.f i j ≫ D.ι i)

tactic: exact ⟨inv (D.f i i) x₁, by
  rw [TopCat.comp_app]
  erw [CategoryTheory.IsIso.inv_hom_id_apply]
  rw [eq₁]⟩
state_before: case h.mp.intro.intro.intro.inl.refl
D : GlueData
i : D.J
x : ↑D.glued
x₁ : ↑(D.U i)
eq₁ eq₂ : (D.ι i) x₁ = x
⊢ x ∈ Set.range ⇑(D.f i i ≫ D.ι i)
state_after: no goals

tactic: rw [TopCat.comp_app]
state_before: D : GlueData
i : D.J
x : ↑D.glued
x₁ : ↑(D.U i)
eq₁ eq₂ : (D.ι i) x₁ = x
⊢ (D.f i i ≫ D.ι i) ((inv (D.f i i)) x₁) = x
state_after: D : GlueData
i : D.J
x : ↑D.glued
x₁ : ↑(D.U i)
eq₁ eq₂ : (D.ι i) x₁ = x
⊢ (D.ι i) ((D.f i i) ((inv (D.f i i)) x₁)) = x

tactic: erw [CategoryTheory.IsIso.inv_hom_id_apply]
state_before: D : GlueData
i : D.J
x : ↑D.glued
x₁ : ↑(D.U i)
eq₁ eq₂ : (D.ι i) x₁ = x
⊢ (D.ι i) ((D.f i i) ((inv (D.f i i)) x₁)) = x
state_after: D : GlueData
i : D.J
x : ↑D.glued
x₁ : ↑(D.U i)
eq₁ eq₂ : (D.ι i) x₁ = x
⊢ (D.ι i) x₁ = x

tactic: rw [eq₁]
state_before: D : GlueData
i : D.J
x : ↑D.glued
x₁ : ↑(D.U i)
eq₁ eq₂ : (D.ι i) x₁ = x
⊢ (D.ι i) x₁ = x
state_after: no goals

tactic: dsimp only at *
state_before: case h.mp.intro.intro.intro.inr.intro.intro
D : GlueData
i j : D.J
x : ↑D.glued
x₁ : ↑(D.U i)
eq₁ : (D.ι i) x₁ = x
x₂ : ↑(D.U j)
eq₂ : (D.ι j) x₂ = x
y : ↑(D.V (⟨i, x₁⟩.fst, ⟨j, x₂⟩.fst))
e₁ : (D.f ⟨i, x₁⟩.fst ⟨j, x₂⟩.fst) y = ⟨i, x₁⟩.snd
⊢ x ∈ Set.range ⇑(D.f i j ≫ D.ι i)
state_after: case h.mp.intro.intro.intro.inr.intro.intro
D : GlueData
i j : D.J
x : ↑D.glued
x₁ : ↑(D.U i)
eq₁ : (D.ι i) x₁ = x
x₂ : ↑(D.U j)
eq₂ : (D.ι j) x₂ = x
y : ↑(D.V (⟨i, x₁⟩.fst, ⟨j, x₂⟩.fst))
e₁ : (D.f i j) y = x₁
⊢ x ∈ Set.range ⇑(D.f i j ≫ D.ι i)

tactic: substs eq₁
state_before: case h.mp.intro.intro.intro.inr.intro.intro
D : GlueData
i j : D.J
x : ↑D.glued
x₁ : ↑(D.U i)
eq₁ : (D.ι i) x₁ = x
x₂ : ↑(D.U j)
eq₂ : (D.ι j) x₂ = x
y : ↑(D.V (⟨i, x₁⟩.fst, ⟨j, x₂⟩.fst))
e₁ : (D.f i j) y = x₁
⊢ x ∈ Set.range ⇑(D.f i j ≫ D.ι i)
state_after: case h.mp.intro.intro.intro.inr.intro.intro
D : GlueData
i j : D.J
x₁ : ↑(D.U i)
x₂ : ↑(D.U j)
y : ↑(D.V (⟨i, x₁⟩.fst, ⟨j, x₂⟩.fst))
e₁ : (D.f i j) y = x₁
eq₂ : (D.ι j) x₂ = (D.ι i) x₁
⊢ (D.ι i) x₁ ∈ Set.range ⇑(D.f i j ≫ D.ι i)

tactic: exact ⟨y, by simp [e₁]⟩
state_before: case h.mp.intro.intro.intro.inr.intro.intro
D : GlueData
i j : D.J
x₁ : ↑(D.U i)
x₂ : ↑(D.U j)
y : ↑(D.V (⟨i, x₁⟩.fst, ⟨j, x₂⟩.fst))
e₁ : (D.f i j) y = x₁
eq₂ : (D.ι j) x₂ = (D.ι i) x₁
⊢ (D.ι i) x₁ ∈ Set.range ⇑(D.f i j ≫ D.ι i)
state_after: no goals

tactic: simp [e₁]
state_before: D : GlueData
i j : D.J
x₁ : ↑(D.U i)
x₂ : ↑(D.U j)
y : ↑(D.V (⟨i, x₁⟩.fst, ⟨j, x₂⟩.fst))
e₁ : (D.f i j) y = x₁
eq₂ : (D.ι j) x₂ = (D.ι i) x₁
⊢ (D.f i j ≫ D.ι i) y = (D.ι i) x₁
state_after: no goals

tactic: rintro ⟨x, hx⟩
state_before: case h.mpr
D : GlueData
i j : D.J
x : ↑D.glued
⊢ x ∈ Set.range ⇑(D.f i j ≫ D.ι i) → x ∈ Set.range ⇑(D.ι i) ∩ Set.range ⇑(D.ι j)
state_after: case h.mpr.intro
D : GlueData
i j : D.J
x✝ : ↑D.glued
x : ↑(D.V (i, j))
hx : (D.f i j ≫ D.ι i) x = x✝
⊢ x✝ ∈ Set.range ⇑(D.ι i) ∩ Set.range ⇑(D.ι j)

tactic: refine ⟨⟨D.f i j x, hx⟩, ⟨D.f j i (D.t _ _ x), ?_⟩⟩
state_before: case h.mpr.intro
D : GlueData
i j : D.J
x✝ : ↑D.glued
x : ↑(D.V (i, j))
hx : (D.f i j ≫ D.ι i) x = x✝
⊢ x✝ ∈ Set.range ⇑(D.ι i) ∩ Set.range ⇑(D.ι j)
state_after: case h.mpr.intro
D : GlueData
i j : D.J
x✝ : ↑D.glued
x : ↑(D.V (i, j))
hx : (D.f i j ≫ D.ι i) x = x✝
⊢ (D.ι j) ((D.f j i) ((D.t i j) x)) = x✝

tactic: erw [D.glue_condition_apply]
state_before: case h.mpr.intro
D : GlueData
i j : D.J
x✝ : ↑D.glued
x : ↑(D.V (i, j))
hx : (D.f i j ≫ D.ι i) x = x✝
⊢ (D.ι j) ((D.f j i) ((D.t i j) x)) = x✝
state_after: case h.mpr.intro
D : GlueData
i j : D.J
x✝ : ↑D.glued
x : ↑(D.V (i, j))
hx : (D.f i j ≫ D.ι i) x = x✝
⊢ (D.ι i) ((D.f i j) x) = x✝

tactic: exact hx
state_before: case h.mpr.intro
D : GlueData
i j : D.J
x✝ : ↑D.glued
x : ↑(D.V (i, j))
hx : (D.f i j ≫ D.ι i) x = x✝
⊢ (D.ι i) ((D.f i j) x) = x✝
state_after: no goals