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

tactic: ext z
state_before: X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a : W ⟶ X
b : W ⟶ Y
w : a ≫ f = b ≫ i
⊢ lift f hi a b w ≫ snd f hi = b
state_after: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a : W ⟶ X
b : W ⟶ Y
w : a ≫ f = b ≫ i
z : (forget Stonean).obj W
⊢ (lift f hi a b w ≫ snd f hi) z = b z

tactic: have := congr_fun (DFunLike.ext'_iff.mp w.symm) z
state_before: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a : W ⟶ X
b : W ⟶ Y
w : a ≫ f = b ≫ i
z : (forget Stonean).obj W
⊢ (lift f hi a b w ≫ snd f hi) z = b z
state_after: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a : W ⟶ X
b : W ⟶ Y
w : a ≫ f = b ≫ i
z : (forget Stonean).obj W
this : (b ≫ i) z = (a ≫ f) z
⊢ (lift f hi a b w ≫ snd f hi) z = b z

tactic: have h : i (b z) = f (a z) := this
state_before: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a : W ⟶ X
b : W ⟶ Y
w : a ≫ f = b ≫ i
z : (forget Stonean).obj W
this : (b ≫ i) z = (a ≫ f) z
⊢ (lift f hi a b w ≫ snd f hi) z = b z
state_after: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a : W ⟶ X
b : W ⟶ Y
w : a ≫ f = b ≫ i
z : (forget Stonean).obj W
this : (b ≫ i) z = (a ≫ f) z
h : i (b z) = f (a z)
⊢ (lift f hi a b w ≫ snd f hi) z = b z

tactic: suffices b z = (Homeomorph.ofEmbedding i hi.toEmbedding).symm (⟨f (a z), by rw [← h]; simp⟩) from
  this.symm
state_before: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a : W ⟶ X
b : W ⟶ Y
w : a ≫ f = b ≫ i
z : (forget Stonean).obj W
this : (b ≫ i) z = (a ≫ f) z
h : i (b z) = f (a z)
⊢ (lift f hi a b w ≫ snd f hi) z = b z
state_after: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a : W ⟶ X
b : W ⟶ Y
w : a ≫ f = b ≫ i
z : (forget Stonean).obj W
this : (b ≫ i) z = (a ≫ f) z
h : i (b z) = f (a z)
⊢ b z = (Homeomorph.ofEmbedding ⇑i ⋯).symm ⟨f (a z), ⋯⟩

tactic: apply_fun (Homeomorph.ofEmbedding i hi.toEmbedding)
state_before: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a : W ⟶ X
b : W ⟶ Y
w : a ≫ f = b ≫ i
z : (forget Stonean).obj W
this : (b ≫ i) z = (a ≫ f) z
h : i (b z) = f (a z)
⊢ b z = (Homeomorph.ofEmbedding ⇑i ⋯).symm ⟨f (a z), ⋯⟩
state_after: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a : W ⟶ X
b : W ⟶ Y
w : a ≫ f = b ≫ i
z : (forget Stonean).obj W
this : (b ≫ i) z = (a ≫ f) z
h : i (b z) = f (a z)
⊢ (Homeomorph.ofEmbedding ⇑i ⋯) (b z) = (Homeomorph.ofEmbedding ⇑i ⋯) ((Homeomorph.ofEmbedding ⇑i ⋯).symm ⟨f (a z), ⋯⟩)

tactic: simpa only [Homeomorph.ofEmbedding, Homeomorph.homeomorph_mk_coe, Equiv.ofInjective_apply,
  Homeomorph.homeomorph_mk_coe_symm, Equiv.apply_symm_apply, Subtype.mk.injEq]
state_before: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a : W ⟶ X
b : W ⟶ Y
w : a ≫ f = b ≫ i
z : (forget Stonean).obj W
this : (b ≫ i) z = (a ≫ f) z
h : i (b z) = f (a z)
⊢ (Homeomorph.ofEmbedding ⇑i ⋯) (b z) = (Homeomorph.ofEmbedding ⇑i ⋯) ((Homeomorph.ofEmbedding ⇑i ⋯).symm ⟨f (a z), ⋯⟩)
state_after: no goals

tactic: rw [← h]
state_before: X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a : W ⟶ X
b : W ⟶ Y
w : a ≫ f = b ≫ i
z : (forget Stonean).obj W
this : (b ≫ i) z = (a ≫ f) z
h : i (b z) = f (a z)
⊢ f (a z) ∈ Set.range ⇑i
state_after: X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a : W ⟶ X
b : W ⟶ Y
w : a ≫ f = b ≫ i
z : (forget Stonean).obj W
this : (b ≫ i) z = (a ≫ f) z
h : i (b z) = f (a z)
⊢ i (b z) ∈ Set.range ⇑i

tactic: simp
state_before: X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a : W ⟶ X
b : W ⟶ Y
w : a ≫ f = b ≫ i
z : (forget Stonean).obj W
this : (b ≫ i) z = (a ≫ f) z
h : i (b z) = f (a z)
⊢ i (b z) ∈ Set.range ⇑i
state_after: no goals