-- Mathlib/Topology/PartialHomeomorph.lean
@[simp, mfld_simps]
lemma lift_openEmbedding_trans (e e' : PartialHomeomorph X Z) (hf : IsOpenEmbedding f) :
    (e.lift_openEmbedding hf).symm.trans (e'.lift_openEmbedding hf) = e.symm.trans e'

Proof state:
case hs.h
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
z : Z
⊢ z ∈ e.target ∩ f ∘ ↑e.symm ⁻¹' (f '' e'.source) ↔ z ∈ e.target ∩ ↑e.symm ⁻¹' e'.source

Tactic:
refine ⟨fun ⟨hx, ⟨y, hy, hxy⟩⟩ ↦ ⟨hx, ?_⟩, fun ⟨hx, hx'⟩ ↦ ⟨hx, mem_image_of_mem f hx'⟩⟩

Result:
case hs.h
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
z : Z
x✝ : z ∈ e.target ∩ f ∘ ↑e.symm ⁻¹' (f '' e'.source)
hx : z ∈ e.target
y : X
hy : y ∈ e'.source
hxy : f y = (f ∘ ↑e.symm) z
⊢ z ∈ ↑e.symm ⁻¹' e'.source

Proof state:
case hs.h
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
z : Z
x✝ : z ∈ e.target ∩ f ∘ ↑e.symm ⁻¹' (f '' e'.source)
hx : z ∈ e.target
y : X
hy : y ∈ e'.source
hxy : f y = f (↑e.symm z)
⊢ ↑e.symm z ∈ e'.source

Tactic:
exact (hf.injective hxy) ▸ hy

Result:
no goals

Proof state:
case hinv
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
z : Z
⊢ ↑((e.lift_openEmbedding hf).symm.trans (e'.lift_openEmbedding hf)).symm z = ↑(e.symm.trans e').symm z

Tactic:
simp [hf.injective.extend_apply e]

Result:
no goals

Proof state:
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
⊢ (e.lift_openEmbedding hf).symm.trans (e'.lift_openEmbedding hf) = e.symm.trans e'

Tactic:
ext z

Result:
case h
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
z : Z
⊢ ↑((e.lift_openEmbedding hf).symm.trans (e'.lift_openEmbedding hf)) z = ↑(e.symm.trans e') z

case hinv
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
z : Z
⊢ ↑((e.lift_openEmbedding hf).symm.trans (e'.lift_openEmbedding hf)).symm z = ↑(e.symm.trans e').symm z

case hs.h
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
z : Z
⊢ z ∈ ((e.lift_openEmbedding hf).symm.trans (e'.lift_openEmbedding hf)).source ↔ z ∈ (e.symm.trans e').source

Proof state:
case hs.h
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
z : Z
x✝ : z ∈ e.target ∩ f ∘ ↑e.symm ⁻¹' (f '' e'.source)
hx : z ∈ e.target
y : X
hy : y ∈ e'.source
hxy : f y = (f ∘ ↑e.symm) z
⊢ z ∈ ↑e.symm ⁻¹' e'.source

Tactic:
rw [mem_preimage]

Result:
case hs.h
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
z : Z
x✝ : z ∈ e.target ∩ f ∘ ↑e.symm ⁻¹' (f '' e'.source)
hx : z ∈ e.target
y : X
hy : y ∈ e'.source
hxy : f y = (f ∘ ↑e.symm) z
⊢ ↑e.symm z ∈ e'.source

Proof state:
case hs.h
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
z : Z
x✝ : z ∈ e.target ∩ f ∘ ↑e.symm ⁻¹' (f '' e'.source)
hx : z ∈ e.target
y : X
hy : y ∈ e'.source
hxy : f y = (f ∘ ↑e.symm) z
⊢ ↑e.symm z ∈ e'.source

Tactic:
rw [comp_apply] at hxy

Result:
case hs.h
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
z : Z
x✝ : z ∈ e.target ∩ f ∘ ↑e.symm ⁻¹' (f '' e'.source)
hx : z ∈ e.target
y : X
hy : y ∈ e'.source
hxy : f y = f (↑e.symm z)
⊢ ↑e.symm z ∈ e'.source

Proof state:
case hs.h
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
z : Z
⊢ z ∈ ((e.lift_openEmbedding hf).symm.trans (e'.lift_openEmbedding hf)).source ↔ z ∈ (e.symm.trans e').source

Tactic:
simp_rw [PartialHomeomorph.trans_source, e.lift_openEmbedding_symm_source, e.symm_source,
  e.lift_openEmbedding_symm, e'.lift_openEmbedding_source]

Result:
case hs.h
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
z : Z
⊢ z ∈ e.target ∩ f ∘ ↑e.symm ⁻¹' (f '' e'.source) ↔ z ∈ e.target ∩ ↑e.symm ⁻¹' e'.source

Proof state:
case h
X : Type u_7
X' : Type u_8
Z : Type u_9
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace X'
inst✝¹ : TopologicalSpace Z
inst✝ : Nonempty Z
f : X → X'
e e' : PartialHomeomorph X Z
hf : IsOpenEmbedding f
z : Z
⊢ ↑((e.lift_openEmbedding hf).symm.trans (e'.lift_openEmbedding hf)) z = ↑(e.symm.trans e') z

Tactic:
exact e.lift_openEmbedding_trans_apply e' hf z

Result:
no goals