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

tactic: obtain ⟨⟨x, y⟩, -⟩ := id h
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
eX eX' : PartialHomeomorph X X'
eY eY' : PartialHomeomorph Y Y'
h : (eX.prod eY).source.Nonempty
⊢ eX.prod eY = eX'.prod eY' ↔ eX = eX' ∧ eY = eY'
state_after: case intro.mk
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
eX eX' : PartialHomeomorph X X'
eY eY' : PartialHomeomorph Y Y'
h : (eX.prod eY).source.Nonempty
x : X
y : Y
⊢ eX.prod eY = eX'.prod eY' ↔ eX = eX' ∧ eY = eY'

tactic: haveI : Nonempty X := ⟨x⟩
state_before: case intro.mk
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
eX eX' : PartialHomeomorph X X'
eY eY' : PartialHomeomorph Y Y'
h : (eX.prod eY).source.Nonempty
x : X
y : Y
⊢ eX.prod eY = eX'.prod eY' ↔ eX = eX' ∧ eY = eY'
state_after: case intro.mk
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
eX eX' : PartialHomeomorph X X'
eY eY' : PartialHomeomorph Y Y'
h : (eX.prod eY).source.Nonempty
x : X
y : Y
this : Nonempty X
⊢ eX.prod eY = eX'.prod eY' ↔ eX = eX' ∧ eY = eY'

tactic: haveI : Nonempty X' := ⟨eX x⟩
state_before: case intro.mk
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
eX eX' : PartialHomeomorph X X'
eY eY' : PartialHomeomorph Y Y'
h : (eX.prod eY).source.Nonempty
x : X
y : Y
this : Nonempty X
⊢ eX.prod eY = eX'.prod eY' ↔ eX = eX' ∧ eY = eY'
state_after: case intro.mk
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
eX eX' : PartialHomeomorph X X'
eY eY' : PartialHomeomorph Y Y'
h : (eX.prod eY).source.Nonempty
x : X
y : Y
this✝ : Nonempty X
this : Nonempty X'
⊢ eX.prod eY = eX'.prod eY' ↔ eX = eX' ∧ eY = eY'

tactic: haveI : Nonempty Y := ⟨y⟩
state_before: case intro.mk
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
eX eX' : PartialHomeomorph X X'
eY eY' : PartialHomeomorph Y Y'
h : (eX.prod eY).source.Nonempty
x : X
y : Y
this✝ : Nonempty X
this : Nonempty X'
⊢ eX.prod eY = eX'.prod eY' ↔ eX = eX' ∧ eY = eY'
state_after: case intro.mk
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
eX eX' : PartialHomeomorph X X'
eY eY' : PartialHomeomorph Y Y'
h : (eX.prod eY).source.Nonempty
x : X
y : Y
this✝¹ : Nonempty X
this✝ : Nonempty X'
this : Nonempty Y
⊢ eX.prod eY = eX'.prod eY' ↔ eX = eX' ∧ eY = eY'

tactic: haveI : Nonempty Y' := ⟨eY y⟩
state_before: case intro.mk
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
eX eX' : PartialHomeomorph X X'
eY eY' : PartialHomeomorph Y Y'
h : (eX.prod eY).source.Nonempty
x : X
y : Y
this✝¹ : Nonempty X
this✝ : Nonempty X'
this : Nonempty Y
⊢ eX.prod eY = eX'.prod eY' ↔ eX = eX' ∧ eY = eY'
state_after: case intro.mk
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
eX eX' : PartialHomeomorph X X'
eY eY' : PartialHomeomorph Y Y'
h : (eX.prod eY).source.Nonempty
x : X
y : Y
this✝² : Nonempty X
this✝¹ : Nonempty X'
this✝ : Nonempty Y
this : Nonempty Y'
⊢ eX.prod eY = eX'.prod eY' ↔ eX = eX' ∧ eY = eY'

tactic: simp_rw [PartialHomeomorph.ext_iff, prod_apply, prod_symm_apply, prod_source, Prod.ext_iff,
  Set.prod_eq_prod_iff_of_nonempty h, forall_and, Prod.forall, forall_const,
  and_assoc, and_left_comm]
state_before: case intro.mk
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
eX eX' : PartialHomeomorph X X'
eY eY' : PartialHomeomorph Y Y'
h : (eX.prod eY).source.Nonempty
x : X
y : Y
this✝² : Nonempty X
this✝¹ : Nonempty X'
this✝ : Nonempty Y
this : Nonempty Y'
⊢ eX.prod eY = eX'.prod eY' ↔ eX = eX' ∧ eY = eY'
state_after: no goals