Theorem: Stonean.pullback.condition
File: Mathlib/Topology/Category/Stonean/Limits.lean

Proof steps:
state_before: X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
⊢ fst f hi ≫ f = snd f hi ≫ i
state_after: case w.mk
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
x : (forget Stonean).obj X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
⊢ (fst f hi ≫ f) ⟨x, h⟩ = (snd f hi ≫ i) ⟨x, h⟩
tactic: ext ⟨x, h⟩
state_before: case w.mk
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
x : (forget Stonean).obj X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
⊢ (fst f hi ≫ f) ⟨x, h⟩ = (snd f hi ≫ i) ⟨x, h⟩
state_after: case w.mk
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
x : (forget Stonean).obj X
h✝ : x ∈ ⇑f ⁻¹' Set.range ⇑i
h : f x ∈ Set.range ⇑i
⊢ (fst f hi ≫ f) ⟨x, h✝⟩ = (snd f hi ≫ i) ⟨x, h✝⟩
tactic: simp only [Set.mem_preimage] at h
state_before: case w.mk
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
x : (forget Stonean).obj X
h✝ : x ∈ ⇑f ⁻¹' Set.range ⇑i
h : f x ∈ Set.range ⇑i
⊢ (fst f hi ≫ f) ⟨x, h✝⟩ = (snd f hi ≫ i) ⟨x, h✝⟩
state_after: case w.mk.intro
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
x : (forget Stonean).obj X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : (forget Stonean).obj Y
hy : i y = f x
⊢ (fst f hi ≫ f) ⟨x, h⟩ = (snd f hi ≫ i) ⟨x, h⟩
tactic: obtain ⟨y, hy⟩ := h
state_before: case w.mk.intro
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
x : (forget Stonean).obj X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : (forget Stonean).obj Y
hy : i y = f x
⊢ (fst f hi ≫ f) ⟨x, h⟩ = (snd f hi ≫ i) ⟨x, h⟩
state_after: case w.mk.intro
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
x : (forget Stonean).obj X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : (forget Stonean).obj Y
hy : i y = f x
⊢ f ({ toFun := Subtype.val, continuous_toFun := ⋯ } ⟨x, h⟩) =
    i
      ({ toFun := ⇑(Homeomorph.ofEmbedding ⇑i ⋯).symm ∘ Set.MapsTo.restrict (⇑f) (⇑f ⁻¹' Set.range ⇑i) (Set.range ⇑i) ⋯,
          continuous_toFun := ⋯ }
        ⟨x, h⟩)
tactic: simp only [fst, snd, comp_apply]
state_before: case w.mk.intro
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
x : (forget Stonean).obj X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : (forget Stonean).obj Y
hy : i y = f x
⊢ f ({ toFun := Subtype.val, continuous_toFun := ⋯ } ⟨x, h⟩) =
    i
      ({ toFun := ⇑(Homeomorph.ofEmbedding ⇑i ⋯).symm ∘ Set.MapsTo.restrict (⇑f) (⇑f ⁻¹' Set.range ⇑i) (Set.range ⇑i) ⋯,
          continuous_toFun := ⋯ }
        ⟨x, h⟩)
state_after: case w.mk.intro
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
x : (forget Stonean).obj X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : (forget Stonean).obj Y
hy : i y = f x
⊢ f x =
    i
      ({ toFun := ⇑(Homeomorph.ofEmbedding ⇑i ⋯).symm ∘ Set.MapsTo.restrict (⇑f) (⇑f ⁻¹' Set.range ⇑i) (Set.range ⇑i) ⋯,
          continuous_toFun := ⋯ }
        ⟨x, h⟩)
tactic: change f x = _
state_before: case w.mk.intro
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
x : (forget Stonean).obj X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : (forget Stonean).obj Y
hy : i y = f x
⊢ f x =
    i
      ({ toFun := ⇑(Homeomorph.ofEmbedding ⇑i ⋯).symm ∘ Set.MapsTo.restrict (⇑f) (⇑f ⁻¹' Set.range ⇑i) (Set.range ⇑i) ⋯,
          continuous_toFun := ⋯ }
        ⟨x, h⟩)
state_after: case w.mk.intro
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
x : (forget Stonean).obj X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : (forget Stonean).obj Y
hy : i y = f x
t : TopologicalSpace ↑(pullback f hi).toTop := inferInstance
⊢ f x =
    i
      ({ toFun := ⇑(Homeomorph.ofEmbedding ⇑i ⋯).symm ∘ Set.MapsTo.restrict (⇑f) (⇑f ⁻¹' Set.range ⇑i) (Set.range ⇑i) ⋯,
          continuous_toFun := ⋯ }
        ⟨x, h⟩)
tactic: let t : TopologicalSpace (pullback f hi) := inferInstance
state_before: case w.mk.intro
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
x : (forget Stonean).obj X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : (forget Stonean).obj Y
hy : i y = f x
t : TopologicalSpace ↑(pullback f hi).toTop := inferInstance
⊢ f x =
    i
      ({ toFun := ⇑(Homeomorph.ofEmbedding ⇑i ⋯).symm ∘ Set.MapsTo.restrict (⇑f) (⇑f ⁻¹' Set.range ⇑i) (Set.range ⇑i) ⋯,
          continuous_toFun := ⋯ }
        ⟨x, h⟩)
state_after: case w.mk.intro
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
x : (forget Stonean).obj X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : (forget Stonean).obj Y
hy : i y = f x
t : TopologicalSpace ↑(pullback f hi).toTop := inferInstance
⊢ i y =
    i ((⇑(Homeomorph.ofEmbedding ⇑i ⋯).symm ∘ Set.MapsTo.restrict (⇑f) (⇑f ⁻¹' Set.range ⇑i) (Set.range ⇑i) ⋯) ⟨x, h⟩)

X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
x : (forget Stonean).obj X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : (forget Stonean).obj Y
hy : i y = f x
t : TopologicalSpace ↑(pullback f hi).toTop := inferInstance
⊢ Continuous (⇑(Homeomorph.ofEmbedding ⇑i ⋯).symm ∘ Set.MapsTo.restrict (⇑f) (⇑f ⁻¹' Set.range ⇑i) (Set.range ⇑i) ⋯)
tactic: erw [← hy, @ContinuousMap.coe_mk _ _ t _ _ ?_]