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

tactic: obtain ⟨g, hg⟩ := mk _ (map_continuous f |>.codRestrict hf) |>.exists_extension he
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✝
Y : Type v
inst✝ : TopologicalSpace Y
f : C(X₁, Y)
t : Set Y
hf : ∀ (x : X₁), f x ∈ t
ht : TietzeExtension ↑t
⊢ ∃ g, (∀ (x : X), g x ∈ t) ∧ 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✝
Y : Type v
inst✝ : TopologicalSpace Y
f : C(X₁, Y)
t : Set Y
hf : ∀ (x : X₁), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : g.comp { toFun := e, continuous_toFun := ⋯ } = { toFun := Set.codRestrict (⇑f) t hf, continuous_toFun := ⋯ }
⊢ ∃ g, (∀ (x : X), g x ∈ t) ∧ g.comp { toFun := e, continuous_toFun := ⋯ } = f

tactic: exact ⟨comp ⟨Subtype.val, by continuity⟩ g, by simp, by ext x; congrm(($(hg) x : Y))⟩
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✝
Y : Type v
inst✝ : TopologicalSpace Y
f : C(X₁, Y)
t : Set Y
hf : ∀ (x : X₁), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : g.comp { toFun := e, continuous_toFun := ⋯ } = { toFun := Set.codRestrict (⇑f) t hf, continuous_toFun := ⋯ }
⊢ ∃ g, (∀ (x : X), g x ∈ t) ∧ g.comp { toFun := e, continuous_toFun := ⋯ } = f
state_after: no goals

tactic: continuity
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✝
Y : Type v
inst✝ : TopologicalSpace Y
f : C(X₁, Y)
t : Set Y
hf : ∀ (x : X₁), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : g.comp { toFun := e, continuous_toFun := ⋯ } = { toFun := Set.codRestrict (⇑f) t hf, continuous_toFun := ⋯ }
⊢ Continuous Subtype.val
state_after: no goals

tactic: simp
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✝
Y : Type v
inst✝ : TopologicalSpace Y
f : C(X₁, Y)
t : Set Y
hf : ∀ (x : X₁), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : g.comp { toFun := e, continuous_toFun := ⋯ } = { toFun := Set.codRestrict (⇑f) t hf, continuous_toFun := ⋯ }
⊢ ∀ (x : X), ({ toFun := Subtype.val, continuous_toFun := ⋯ }.comp g) x ∈ t
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✝
Y : Type v
inst✝ : TopologicalSpace Y
f : C(X₁, Y)
t : Set Y
hf : ∀ (x : X₁), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : g.comp { toFun := e, continuous_toFun := ⋯ } = { toFun := Set.codRestrict (⇑f) t hf, continuous_toFun := ⋯ }
⊢ ({ toFun := Subtype.val, continuous_toFun := ⋯ }.comp 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✝
Y : Type v
inst✝ : TopologicalSpace Y
f : C(X₁, Y)
t : Set Y
hf : ∀ (x : X₁), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : g.comp { toFun := e, continuous_toFun := ⋯ } = { toFun := Set.codRestrict (⇑f) t hf, continuous_toFun := ⋯ }
x : X₁
⊢ (({ toFun := Subtype.val, continuous_toFun := ⋯ }.comp g).comp { toFun := e, continuous_toFun := ⋯ }) x = f x

tactic: congrm(($(hg) x : Y))
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✝
Y : Type v
inst✝ : TopologicalSpace Y
f : C(X₁, Y)
t : Set Y
hf : ∀ (x : X₁), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : g.comp { toFun := e, continuous_toFun := ⋯ } = { toFun := Set.codRestrict (⇑f) t hf, continuous_toFun := ⋯ }
x : X₁
⊢ (({ toFun := Subtype.val, continuous_toFun := ⋯ }.comp g).comp { toFun := e, continuous_toFun := ⋯ }) x = f x
state_after: no goals