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

tactic: obtain ⟨g, hg⟩ := mk _ (map_continuous f |>.codRestrict hf) |>.exists_restrict_eq hs
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(↑s, Y)
t : Set Y
hf : ∀ (x : ↑s), f x ∈ t
ht : TietzeExtension ↑t
⊢ ∃ g, (∀ (x : X), g x ∈ t) ∧ restrict s g = 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(↑s, Y)
t : Set Y
hf : ∀ (x : ↑s), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : restrict s g = { toFun := Set.codRestrict (⇑f) t hf, continuous_toFun := ⋯ }
⊢ ∃ g, (∀ (x : X), g x ∈ t) ∧ restrict s g = 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(↑s, Y)
t : Set Y
hf : ∀ (x : ↑s), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : restrict s g = { toFun := Set.codRestrict (⇑f) t hf, continuous_toFun := ⋯ }
⊢ ∃ g, (∀ (x : X), g x ∈ t) ∧ restrict s g = 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(↑s, Y)
t : Set Y
hf : ∀ (x : ↑s), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : restrict s g = { 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(↑s, Y)
t : Set Y
hf : ∀ (x : ↑s), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : restrict s g = { 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(↑s, Y)
t : Set Y
hf : ∀ (x : ↑s), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : restrict s g = { toFun := Set.codRestrict (⇑f) t hf, continuous_toFun := ⋯ }
⊢ restrict s ({ toFun := Subtype.val, continuous_toFun := ⋯ }.comp g) = 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(↑s, Y)
t : Set Y
hf : ∀ (x : ↑s), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : restrict s g = { toFun := Set.codRestrict (⇑f) t hf, continuous_toFun := ⋯ }
x : ↑s
⊢ (restrict s ({ toFun := Subtype.val, continuous_toFun := ⋯ }.comp g)) 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(↑s, Y)
t : Set Y
hf : ∀ (x : ↑s), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : restrict s g = { toFun := Set.codRestrict (⇑f) t hf, continuous_toFun := ⋯ }
x : ↑s
⊢ (restrict s ({ toFun := Subtype.val, continuous_toFun := ⋯ }.comp g)) x = f x
state_after: no goals