Theorem: QuotientMap.continuous_lift_prod_left
File: Mathlib/Topology/CompactOpen.lean

Proof steps:
state_before: X₀ : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁴ : TopologicalSpace X₀
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : LocallyCompactSpace Y
f : X₀ → X
hf : QuotientMap f
g : X × Y → Z
hg : Continuous fun p => g (f p.1, p.2)
⊢ Continuous g
state_after: X₀ : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁴ : TopologicalSpace X₀
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : LocallyCompactSpace Y
f : X₀ → X
hf : QuotientMap f
g : X × Y → Z
hg : Continuous fun p => g (f p.1, p.2)
Gf : C(X₀, C(Y, Z)) := { toFun := fun p => g (f p.1, p.2), continuous_toFun := hg }.curry
⊢ Continuous g
tactic: let Gf : C(X₀, C(Y, Z)) := ContinuousMap.curry ⟨_, hg⟩
state_before: X₀ : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁴ : TopologicalSpace X₀
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : LocallyCompactSpace Y
f : X₀ → X
hf : QuotientMap f
g : X × Y → Z
hg : Continuous fun p => g (f p.1, p.2)
Gf : C(X₀, C(Y, Z)) := { toFun := fun p => g (f p.1, p.2), continuous_toFun := hg }.curry
⊢ Continuous g
state_after: X₀ : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁴ : TopologicalSpace X₀
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : LocallyCompactSpace Y
f : X₀ → X
hf : QuotientMap f
g : X × Y → Z
hg : Continuous fun p => g (f p.1, p.2)
Gf : C(X₀, C(Y, Z)) := { toFun := fun p => g (f p.1, p.2), continuous_toFun := hg }.curry
h : ∀ (x : X), Continuous fun y => g (x, y)
⊢ Continuous g
tactic: have h : ∀ x : X, Continuous fun y => g (x, y) := by
    intro x
    obtain ⟨x₀, rfl⟩ := hf.surjective x
    exact (Gf x₀).continuous
state_before: X₀ : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁴ : TopologicalSpace X₀
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : LocallyCompactSpace Y
f : X₀ → X
hf : QuotientMap f
g : X × Y → Z
hg : Continuous fun p => g (f p.1, p.2)
Gf : C(X₀, C(Y, Z)) := { toFun := fun p => g (f p.1, p.2), continuous_toFun := hg }.curry
h : ∀ (x : X), Continuous fun y => g (x, y)
⊢ Continuous g
state_after: X₀ : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁴ : TopologicalSpace X₀
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : LocallyCompactSpace Y
f : X₀ → X
hf : QuotientMap f
g : X × Y → Z
hg : Continuous fun p => g (f p.1, p.2)
Gf : C(X₀, C(Y, Z)) := { toFun := fun p => g (f p.1, p.2), continuous_toFun := hg }.curry
h : ∀ (x : X), Continuous fun y => g (x, y)
G : X → C(Y, Z) := fun x => { toFun := fun y => g (x, y), continuous_toFun := ⋯ }
⊢ Continuous g
tactic: let G : X → C(Y, Z) := fun x => ⟨_, h x⟩
state_before: X₀ : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁴ : TopologicalSpace X₀
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : LocallyCompactSpace Y
f : X₀ → X
hf : QuotientMap f
g : X × Y → Z
hg : Continuous fun p => g (f p.1, p.2)
Gf : C(X₀, C(Y, Z)) := { toFun := fun p => g (f p.1, p.2), continuous_toFun := hg }.curry
h : ∀ (x : X), Continuous fun y => g (x, y)
G : X → C(Y, Z) := fun x => { toFun := fun y => g (x, y), continuous_toFun := ⋯ }
⊢ Continuous g
state_after: X₀ : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁴ : TopologicalSpace X₀
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : LocallyCompactSpace Y
f : X₀ → X
hf : QuotientMap f
g : X × Y → Z
hg : Continuous fun p => g (f p.1, p.2)
Gf : C(X₀, C(Y, Z)) := { toFun := fun p => g (f p.1, p.2), continuous_toFun := hg }.curry
h : ∀ (x : X), Continuous fun y => g (x, y)
G : X → C(Y, Z) := fun x => { toFun := fun y => g (x, y), continuous_toFun := ⋯ }
this : Continuous G
⊢ Continuous g
tactic: have : Continuous G := by
    rw [hf.continuous_iff]
    exact Gf.continuous
state_before: X₀ : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁴ : TopologicalSpace X₀
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : LocallyCompactSpace Y
f : X₀ → X
hf : QuotientMap f
g : X × Y → Z
hg : Continuous fun p => g (f p.1, p.2)
Gf : C(X₀, C(Y, Z)) := { toFun := fun p => g (f p.1, p.2), continuous_toFun := hg }.curry
h : ∀ (x : X), Continuous fun y => g (x, y)
G : X → C(Y, Z) := fun x => { toFun := fun y => g (x, y), continuous_toFun := ⋯ }
this : Continuous G
⊢ Continuous g
state_after: no goals
tactic: exact ContinuousMap.continuous_uncurry_of_continuous ⟨G, this⟩