Theorem: ContinuousMap.exists_extension
File: Mathlib/Topology/TietzeExtension.lean

tactic: let e' : X₁ ≃ₜ Set.range e := Homeomorph.ofEmbedding _ he.toEmbedding
state_before: X₁ : Type u₁
inst✝⁴ : TopologicalSpace X₁
X : Type u
inst✝³ : TopologicalSpace X
inst✝² : NormalSpace X
s : Set X
hs : IsClosed s
e : X₁ → X
he : ClosedEmbedding e
Y : Type v
inst✝¹ : TopologicalSpace Y
inst✝ : TietzeExtension Y
f : C(X₁, Y)
⊢ ∃ g, g.comp { toFun := e, continuous_toFun := ⋯ } = f
state_after: X₁ : Type u₁
inst✝⁴ : TopologicalSpace X₁
X : Type u
inst✝³ : TopologicalSpace X
inst✝² : NormalSpace X
s : Set X
hs : IsClosed s
e : X₁ → X
he : ClosedEmbedding e
Y : Type v
inst✝¹ : TopologicalSpace Y
inst✝ : TietzeExtension Y
f : C(X₁, Y)
e' : X₁ ≃ₜ ↑(Set.range e) := Homeomorph.ofEmbedding e ⋯
⊢ ∃ g, g.comp { toFun := e, continuous_toFun := ⋯ } = f

tactic: obtain ⟨g, hg⟩ := (f.comp e'.symm).exists_restrict_eq he.isClosed_range
state_before: X₁ : Type u₁
inst✝⁴ : TopologicalSpace X₁
X : Type u
inst✝³ : TopologicalSpace X
inst✝² : NormalSpace X
s : Set X
hs : IsClosed s
e : X₁ → X
he : ClosedEmbedding e
Y : Type v
inst✝¹ : TopologicalSpace Y
inst✝ : TietzeExtension Y
f : C(X₁, Y)
e' : X₁ ≃ₜ ↑(Set.range e) := Homeomorph.ofEmbedding e ⋯
⊢ ∃ g, g.comp { toFun := e, continuous_toFun := ⋯ } = f
state_after: case intro
X₁ : Type u₁
inst✝⁴ : TopologicalSpace X₁
X : Type u
inst✝³ : TopologicalSpace X
inst✝² : NormalSpace X
s : Set X
hs : IsClosed s
e : X₁ → X
he : ClosedEmbedding e
Y : Type v
inst✝¹ : TopologicalSpace Y
inst✝ : TietzeExtension Y
f : C(X₁, Y)
e' : X₁ ≃ₜ ↑(Set.range e) := Homeomorph.ofEmbedding e ⋯
g : C(X, Y)
hg : restrict (Set.range e) g = f.comp e'.symm.toContinuousMap
⊢ ∃ g, g.comp { toFun := e, continuous_toFun := ⋯ } = f

tactic: exact ⟨g, by ext x; simpa using congr($(hg) ⟨e' x, x, rfl⟩)⟩
state_before: case intro
X₁ : Type u₁
inst✝⁴ : TopologicalSpace X₁
X : Type u
inst✝³ : TopologicalSpace X
inst✝² : NormalSpace X
s : Set X
hs : IsClosed s
e : X₁ → X
he : ClosedEmbedding e
Y : Type v
inst✝¹ : TopologicalSpace Y
inst✝ : TietzeExtension Y
f : C(X₁, Y)
e' : X₁ ≃ₜ ↑(Set.range e) := Homeomorph.ofEmbedding e ⋯
g : C(X, Y)
hg : restrict (Set.range e) g = f.comp e'.symm.toContinuousMap
⊢ ∃ g, g.comp { toFun := e, continuous_toFun := ⋯ } = f
state_after: no goals

tactic: ext x
state_before: X₁ : Type u₁
inst✝⁴ : TopologicalSpace X₁
X : Type u
inst✝³ : TopologicalSpace X
inst✝² : NormalSpace X
s : Set X
hs : IsClosed s
e : X₁ → X
he : ClosedEmbedding e
Y : Type v
inst✝¹ : TopologicalSpace Y
inst✝ : TietzeExtension Y
f : C(X₁, Y)
e' : X₁ ≃ₜ ↑(Set.range e) := Homeomorph.ofEmbedding e ⋯
g : C(X, Y)
hg : restrict (Set.range e) g = f.comp e'.symm.toContinuousMap
⊢ g.comp { toFun := e, continuous_toFun := ⋯ } = f
state_after: case h
X₁ : Type u₁
inst✝⁴ : TopologicalSpace X₁
X : Type u
inst✝³ : TopologicalSpace X
inst✝² : NormalSpace X
s : Set X
hs : IsClosed s
e : X₁ → X
he : ClosedEmbedding e
Y : Type v
inst✝¹ : TopologicalSpace Y
inst✝ : TietzeExtension Y
f : C(X₁, Y)
e' : X₁ ≃ₜ ↑(Set.range e) := Homeomorph.ofEmbedding e ⋯
g : C(X, Y)
hg : restrict (Set.range e) g = f.comp e'.symm.toContinuousMap
x : X₁
⊢ (g.comp { toFun := e, continuous_toFun := ⋯ }) x = f x

tactic: simpa using congr($(hg) ⟨e' x, x, rfl⟩)
state_before: case h
X₁ : Type u₁
inst✝⁴ : TopologicalSpace X₁
X : Type u
inst✝³ : TopologicalSpace X
inst✝² : NormalSpace X
s : Set X
hs : IsClosed s
e : X₁ → X
he : ClosedEmbedding e
Y : Type v
inst✝¹ : TopologicalSpace Y
inst✝ : TietzeExtension Y
f : C(X₁, Y)
e' : X₁ ≃ₜ ↑(Set.range e) := Homeomorph.ofEmbedding e ⋯
g : C(X, Y)
hg : restrict (Set.range e) g = f.comp e'.symm.toContinuousMap
x : X₁
⊢ (g.comp { toFun := e, continuous_toFun := ⋯ }) x = f x
state_after: no goals