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

tactic: ext ⟨x, h⟩
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 : CoeSort.coe X
h : x ∈ ⇑f ⁻¹' 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 : CoeSort.coe 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 : CoeSort.coe 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: obtain ⟨y, hy⟩ := 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 : CoeSort.coe 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 : CoeSort.coe X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : CoeSort.coe Y
hy : i y = f x
⊢ (fst f hi ≫ f) ⟨x, h⟩ = (snd f hi ≫ i) ⟨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 : CoeSort.coe X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : CoeSort.coe 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 : CoeSort.coe X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : CoeSort.coe 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: 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 : CoeSort.coe X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : CoeSort.coe 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 : CoeSort.coe X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : CoeSort.coe 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: erw [← hy, @ContinuousMap.coe_mk _ _ (Stonean.instTopologicalSpace (pullback f hi)) _ _ _]
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 : CoeSort.coe X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : CoeSort.coe 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 : CoeSort.coe X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : CoeSort.coe Y
hy : i y = f x
⊢ i y =
    i ((⇑(Homeomorph.ofEmbedding ⇑i ⋯).symm ∘ Set.MapsTo.restrict (⇑f) (⇑f ⁻¹' Set.range ⇑i) (Set.range ⇑i) ⋯) ⟨x, h⟩)

tactic: congr
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 : CoeSort.coe X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : CoeSort.coe Y
hy : i y = f x
⊢ i y =
    i ((⇑(Homeomorph.ofEmbedding ⇑i ⋯).symm ∘ Set.MapsTo.restrict (⇑f) (⇑f ⁻¹' Set.range ⇑i) (Set.range ⇑i) ⋯) ⟨x, h⟩)
state_after: case w.mk.intro.h.e_6.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 : CoeSort.coe X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : CoeSort.coe Y
hy : i y = f x
⊢ y = (⇑(Homeomorph.ofEmbedding ⇑i ⋯).symm ∘ Set.MapsTo.restrict (⇑f) (⇑f ⁻¹' Set.range ⇑i) (Set.range ⇑i) ⋯) ⟨x, h⟩

tactic: apply_fun (Homeomorph.ofEmbedding i hi.toEmbedding)
state_before: case w.mk.intro.h.e_6.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 : CoeSort.coe X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : CoeSort.coe Y
hy : i y = f x
⊢ y = (⇑(Homeomorph.ofEmbedding ⇑i ⋯).symm ∘ Set.MapsTo.restrict (⇑f) (⇑f ⁻¹' Set.range ⇑i) (Set.range ⇑i) ⋯) ⟨x, h⟩
state_after: case w.mk.intro.h.e_6.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 : CoeSort.coe X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : CoeSort.coe Y
hy : i y = f x
⊢ (Homeomorph.ofEmbedding ⇑i ⋯) y =
    (Homeomorph.ofEmbedding ⇑i ⋯)
      ((⇑(Homeomorph.ofEmbedding ⇑i ⋯).symm ∘ Set.MapsTo.restrict (⇑f) (⇑f ⁻¹' Set.range ⇑i) (Set.range ⇑i) ⋯) ⟨x, h⟩)

tactic: simpa only [Homeomorph.ofEmbedding, Homeomorph.homeomorph_mk_coe, Equiv.ofInjective_apply,
  Homeomorph.homeomorph_mk_coe_symm, Set.MapsTo.restrict, Subtype.map, Function.comp_apply,
  Equiv.apply_symm_apply, Subtype.mk.injEq]
state_before: case w.mk.intro.h.e_6.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 : CoeSort.coe X
h : x ∈ ⇑f ⁻¹' Set.range ⇑i
y : CoeSort.coe Y
hy : i y = f x
⊢ (Homeomorph.ofEmbedding ⇑i ⋯) y =
    (Homeomorph.ofEmbedding ⇑i ⋯)
      ((⇑(Homeomorph.ofEmbedding ⇑i ⋯).symm ∘ Set.MapsTo.restrict (⇑f) (⇑f ⁻¹' Set.range ⇑i) (Set.range ⇑i) ⋯) ⟨x, h⟩)
state_after: no goals