Theorem: PartialHomeomorph.subtypeRestr_symm_trans_subtypeRestr
File: Mathlib/Topology/PartialHomeomorph.lean

Proof steps:
state_before: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
⊢ (f.subtypeRestr hs).symm.trans (f'.subtypeRestr hs) ≈ (f.symm.trans f').restr (f.target ∩ ↑f.symm ⁻¹' ↑s)
state_after: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
⊢ (f.symm.trans (s.partialHomeomorphSubtypeCoe hs).symm).trans ((s.partialHomeomorphSubtypeCoe hs).trans f') ≈
    (f.symm.trans f').restr (f.target ∩ ↑f.symm ⁻¹' ↑s)
tactic: simp only [subtypeRestr_def, trans_symm_eq_symm_trans_symm]
state_before: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
⊢ (f.symm.trans (s.partialHomeomorphSubtypeCoe hs).symm).trans ((s.partialHomeomorphSubtypeCoe hs).trans f') ≈
    (f.symm.trans f').restr (f.target ∩ ↑f.symm ⁻¹' ↑s)
state_after: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
⊢ (f.symm.trans (s.partialHomeomorphSubtypeCoe hs).symm).trans ((s.partialHomeomorphSubtypeCoe hs).trans f') ≈
    (f.symm.trans f').restr (f.target ∩ ↑f.symm ⁻¹' ↑s)
tactic: have openness₁ : IsOpen (f.target ∩ f.symm ⁻¹' s) := f.isOpen_inter_preimage_symm s.2
state_before: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
⊢ (f.symm.trans (s.partialHomeomorphSubtypeCoe hs).symm).trans ((s.partialHomeomorphSubtypeCoe hs).trans f') ≈
    (f.symm.trans f').restr (f.target ∩ ↑f.symm ⁻¹' ↑s)
state_after: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
⊢ ((f.symm.trans (s.partialHomeomorphSubtypeCoe hs).symm).trans (s.partialHomeomorphSubtypeCoe hs)).trans f' ≈
    ((ofSet (f.target ∩ ↑f.symm ⁻¹' ↑s) openness₁).trans f.symm).trans f'
tactic: rw [← ofSet_trans _ openness₁, ← trans_assoc, ← trans_assoc]
state_before: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
⊢ ((f.symm.trans (s.partialHomeomorphSubtypeCoe hs).symm).trans (s.partialHomeomorphSubtypeCoe hs)).trans f' ≈
    ((ofSet (f.target ∩ ↑f.symm ⁻¹' ↑s) openness₁).trans f.symm).trans f'
state_after: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
⊢ (f.symm.trans (s.partialHomeomorphSubtypeCoe hs).symm).trans (s.partialHomeomorphSubtypeCoe hs) ≈
    (ofSet (f.target ∩ ↑f.symm ⁻¹' ↑s) openness₁).trans f.symm
tactic: refine EqOnSource.trans' ?_ (eqOnSource_refl _)
state_before: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
⊢ (f.symm.trans (s.partialHomeomorphSubtypeCoe hs).symm).trans (s.partialHomeomorphSubtypeCoe hs) ≈
    (ofSet (f.target ∩ ↑f.symm ⁻¹' ↑s) openness₁).trans f.symm
state_after: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
set_identity : f.symm.source ∩ (f.target ∩ ↑f.symm ⁻¹' ↑s) = f.symm.source ∩ ↑f.symm ⁻¹' ↑s
⊢ (f.symm.trans (s.partialHomeomorphSubtypeCoe hs).symm).trans (s.partialHomeomorphSubtypeCoe hs) ≈
    (ofSet (f.target ∩ ↑f.symm ⁻¹' ↑s) openness₁).trans f.symm
tactic: have set_identity : f.symm.source ∩ (f.target ∩ f.symm ⁻¹' s) = f.symm.source ∩ f.symm ⁻¹' s := by
    mfld_set_tac
state_before: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
set_identity : f.symm.source ∩ (f.target ∩ ↑f.symm ⁻¹' ↑s) = f.symm.source ∩ ↑f.symm ⁻¹' ↑s
⊢ (f.symm.trans (s.partialHomeomorphSubtypeCoe hs).symm).trans (s.partialHomeomorphSubtypeCoe hs) ≈
    (ofSet (f.target ∩ ↑f.symm ⁻¹' ↑s) openness₁).trans f.symm
state_after: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
set_identity : f.symm.source ∩ (f.target ∩ ↑f.symm ⁻¹' ↑s) = f.symm.source ∩ ↑f.symm ⁻¹' ↑s
openness₂ : IsOpen ↑s
⊢ (f.symm.trans (s.partialHomeomorphSubtypeCoe hs).symm).trans (s.partialHomeomorphSubtypeCoe hs) ≈
    (ofSet (f.target ∩ ↑f.symm ⁻¹' ↑s) openness₁).trans f.symm
tactic: have openness₂ : IsOpen (s : Set X) := s.2
state_before: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
set_identity : f.symm.source ∩ (f.target ∩ ↑f.symm ⁻¹' ↑s) = f.symm.source ∩ ↑f.symm ⁻¹' ↑s
openness₂ : IsOpen ↑s
⊢ (f.symm.trans (s.partialHomeomorphSubtypeCoe hs).symm).trans (s.partialHomeomorphSubtypeCoe hs) ≈
    (ofSet (f.target ∩ ↑f.symm ⁻¹' ↑s) openness₁).trans f.symm
state_after: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
set_identity : f.symm.source ∩ (f.target ∩ ↑f.symm ⁻¹' ↑s) = f.symm.source ∩ ↑f.symm ⁻¹' ↑s
openness₂ : IsOpen ↑s
⊢ f.symm.trans ((s.partialHomeomorphSubtypeCoe hs).symm.trans (s.partialHomeomorphSubtypeCoe hs)) ≈
    f.symm.trans (ofSet (↑s) openness₂)
tactic: rw [ofSet_trans', set_identity, ← trans_of_set' _ openness₂, trans_assoc]
state_before: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
set_identity : f.symm.source ∩ (f.target ∩ ↑f.symm ⁻¹' ↑s) = f.symm.source ∩ ↑f.symm ⁻¹' ↑s
openness₂ : IsOpen ↑s
⊢ f.symm.trans ((s.partialHomeomorphSubtypeCoe hs).symm.trans (s.partialHomeomorphSubtypeCoe hs)) ≈
    f.symm.trans (ofSet (↑s) openness₂)
state_after: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
set_identity : f.symm.source ∩ (f.target ∩ ↑f.symm ⁻¹' ↑s) = f.symm.source ∩ ↑f.symm ⁻¹' ↑s
openness₂ : IsOpen ↑s
⊢ (s.partialHomeomorphSubtypeCoe hs).symm.trans (s.partialHomeomorphSubtypeCoe hs) ≈ ofSet (↑s) openness₂
tactic: refine EqOnSource.trans' (eqOnSource_refl _) ?_
state_before: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
set_identity : f.symm.source ∩ (f.target ∩ ↑f.symm ⁻¹' ↑s) = f.symm.source ∩ ↑f.symm ⁻¹' ↑s
openness₂ : IsOpen ↑s
⊢ (s.partialHomeomorphSubtypeCoe hs).symm.trans (s.partialHomeomorphSubtypeCoe hs) ≈ ofSet (↑s) openness₂
state_after: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
set_identity : f.symm.source ∩ (f.target ∩ ↑f.symm ⁻¹' ↑s) = f.symm.source ∩ ↑f.symm ⁻¹' ↑s
openness₂ : IsOpen ↑s
⊢ ofSet (s.partialHomeomorphSubtypeCoe hs).target ⋯ ≈ ofSet (↑s) openness₂
tactic: refine Setoid.trans (symm_trans_self (s.partialHomeomorphSubtypeCoe hs)) ?_
state_before: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Opens X
hs : Nonempty ↥s
f f' : PartialHomeomorph X Y
openness₁ : IsOpen (f.target ∩ ↑f.symm ⁻¹' ↑s)
set_identity : f.symm.source ∩ (f.target ∩ ↑f.symm ⁻¹' ↑s) = f.symm.source ∩ ↑f.symm ⁻¹' ↑s
openness₂ : IsOpen ↑s
⊢ ofSet (s.partialHomeomorphSubtypeCoe hs).target ⋯ ≈ ofSet (↑s) openness₂
state_after: no goals
tactic: simp only [mfld_simps, Setoid.refl]