Theorem: QuotientMap.liftEquiv_apply
File: Mathlib/Topology/ContinuousFunction/Basic.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
f : C(X, Y)
hf : QuotientMap ⇑f
g✝ : C(X, Z)
h✝ : FactorsThrough ⇑g✝ ⇑f
g : C(Y, Z)
x✝¹ x✝ : X
h : f x✝¹ = f x✝
⊢ (g.comp f) x✝¹ = (g.comp f) x✝
state_after: X : Type u_1
Y : Type u_2
Z : Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
f : C(X, Y)
hf : QuotientMap ⇑f
g✝ : C(X, Z)
h✝ : FactorsThrough ⇑g✝ ⇑f
g : C(Y, Z)
x✝¹ x✝ : X
h : f x✝¹ = f x✝
⊢ g (f x✝¹) = g (f x✝)
tactic: simp only [ContinuousMap.comp_apply]
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
f : C(X, Y)
hf : QuotientMap ⇑f
g✝ : C(X, Z)
h✝ : FactorsThrough ⇑g✝ ⇑f
g : C(Y, Z)
x✝¹ x✝ : X
h : f x✝¹ = f x✝
⊢ g (f x✝¹) = g (f x✝)
state_after: no goals
tactic: rw [h]
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
f : C(X, Y)
hf : QuotientMap ⇑f
g : C(X, Z)
h : FactorsThrough ⇑g ⇑f
⊢ LeftInverse (fun g => ⟨g.comp f, ⋯⟩) fun g => hf.lift ↑g ⋯
state_after: X : Type u_1
Y : Type u_2
Z : Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
f : C(X, Y)
hf : QuotientMap ⇑f
g : C(X, Z)
h : FactorsThrough ⇑g ⇑f
x✝ : { g // FactorsThrough ⇑g ⇑f }
⊢ (fun g => ⟨g.comp f, ⋯⟩) ((fun g => hf.lift ↑g ⋯) x✝) = x✝
tactic: intro
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
f : C(X, Y)
hf : QuotientMap ⇑f
g : C(X, Z)
h : FactorsThrough ⇑g ⇑f
x✝ : { g // FactorsThrough ⇑g ⇑f }
⊢ (fun g => ⟨g.comp f, ⋯⟩) ((fun g => hf.lift ↑g ⋯) x✝) = x✝
state_after: no goals
tactic: simp
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
f : C(X, Y)
hf : QuotientMap ⇑f
g : C(X, Z)
h : FactorsThrough ⇑g ⇑f
⊢ Function.RightInverse (fun g => ⟨g.comp f, ⋯⟩) fun g => hf.lift ↑g ⋯
state_after: X : Type u_1
Y : Type u_2
Z : Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
f : C(X, Y)
hf : QuotientMap ⇑f
g✝ : C(X, Z)
h : FactorsThrough ⇑g✝ ⇑f
g : C(Y, Z)
⊢ (fun g => hf.lift ↑g ⋯) ((fun g => ⟨g.comp f, ⋯⟩) g) = g
tactic: intro g
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
f : C(X, Y)
hf : QuotientMap ⇑f
g✝ : C(X, Z)
h : FactorsThrough ⇑g✝ ⇑f
g : C(Y, Z)
⊢ (fun g => hf.lift ↑g ⋯) ((fun g => ⟨g.comp f, ⋯⟩) g) = g
state_after: case h
X : Type u_1
Y : Type u_2
Z : Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
f : C(X, Y)
hf : QuotientMap ⇑f
g✝ : C(X, Z)
h : FactorsThrough ⇑g✝ ⇑f
g : C(Y, Z)
a : Y
⊢ ((fun g => hf.lift ↑g ⋯) ((fun g => ⟨g.comp f, ⋯⟩) g)) a = g a
tactic: ext a
state_before: case h
X : Type u_1
Y : Type u_2
Z : Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
f : C(X, Y)
hf : QuotientMap ⇑f
g✝ : C(X, Z)
h : FactorsThrough ⇑g✝ ⇑f
g : C(Y, Z)
a : Y
⊢ ((fun g => hf.lift ↑g ⋯) ((fun g => ⟨g.comp f, ⋯⟩) g)) a = g a
state_after: no goals
tactic: simpa using congrArg g (Function.rightInverse_surjInv hf.surjective a)