Theorem: BoundedContinuousFunction.exists_norm_eq_restrict_eq
File: Mathlib/Analysis/Complex/Tietze.lean

Proof steps:
state_before: X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
⊢ ∃ g, ‖g‖ = ‖f‖ ∧ g.restrict s = f
state_after: case pos
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ‖f‖ = 0
⊢ ∃ g, ‖g‖ = ‖f‖ ∧ g.restrict s = f

case neg
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
⊢ ∃ g, ‖g‖ = ‖f‖ ∧ g.restrict s = f
tactic: by_cases hf : ‖f‖ = 0
state_before: case neg
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
⊢ ∃ g, ‖g‖ = ‖f‖ ∧ g.restrict s = f
state_after: case neg
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
⊢ ∃ g, ‖g‖ = ‖f‖ ∧ g.restrict s = f
tactic: have := Metric.instTietzeExtensionClosedBall.{u, v} 𝕜 (0 : E) (by aesop : 0 < ‖f‖)
state_before: case neg
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
⊢ ∃ g, ‖g‖ = ‖f‖ ∧ g.restrict s = f
state_after: case neg
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
⊢ ∃ g, ‖g‖ = ‖f‖ ∧ g.restrict s = f
tactic: have hf' x : f x ∈ Metric.closedBall 0 ‖f‖ := by simpa using f.norm_coe_le_norm x
state_before: case neg
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
⊢ ∃ g, ‖g‖ = ‖f‖ ∧ g.restrict s = f
state_after: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg_mem : ∀ (x : X), g x ∈ Metric.closedBall 0 ‖f‖
hg : ContinuousMap.restrict s g = ↑f
⊢ ∃ g, ‖g‖ = ‖f‖ ∧ g.restrict s = f
tactic: obtain ⟨g, hg_mem, hg⟩ := (f : C(s, E)).exists_forall_mem_restrict_eq hs hf'
state_before: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg_mem : ∀ (x : X), g x ∈ Metric.closedBall 0 ‖f‖
hg : ContinuousMap.restrict s g = ↑f
⊢ ∃ g, ‖g‖ = ‖f‖ ∧ g.restrict s = f
state_after: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg : ContinuousMap.restrict s g = ↑f
hg_mem : ∀ (x : X), ‖g x‖ ≤ ‖f‖
⊢ ∃ g, ‖g‖ = ‖f‖ ∧ g.restrict s = f
tactic: simp only [Metric.mem_closedBall, dist_zero_right] at hg_mem
state_before: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg : ContinuousMap.restrict s g = ↑f
hg_mem : ∀ (x : X), ‖g x‖ ≤ ‖f‖
⊢ ∃ g, ‖g‖ = ‖f‖ ∧ g.restrict s = f
state_after: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg : ContinuousMap.restrict s g = ↑f
hg_mem : ∀ (x : X), ‖g x‖ ≤ ‖f‖
g' : X →ᵇ E := ofNormedAddCommGroup ⇑g ⋯ ‖f‖ hg_mem
⊢ ∃ g, ‖g‖ = ‖f‖ ∧ g.restrict s = f
tactic: let g' : X →ᵇ E := .ofNormedAddCommGroup g (map_continuous g) ‖f‖ hg_mem
state_before: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg : ContinuousMap.restrict s g = ↑f
hg_mem : ∀ (x : X), ‖g x‖ ≤ ‖f‖
g' : X →ᵇ E := ofNormedAddCommGroup ⇑g ⋯ ‖f‖ hg_mem
⊢ ∃ g, ‖g‖ = ‖f‖ ∧ g.restrict s = f
state_after: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg : ContinuousMap.restrict s g = ↑f
hg_mem : ∀ (x : X), ‖g x‖ ≤ ‖f‖
g' : X →ᵇ E := ofNormedAddCommGroup ⇑g ⋯ ‖f‖ hg_mem
⊢ ‖g'‖ = ‖f‖
tactic: refine ⟨g', ?_, by ext x; congrm($(hg) x)⟩
state_before: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg : ContinuousMap.restrict s g = ↑f
hg_mem : ∀ (x : X), ‖g x‖ ≤ ‖f‖
g' : X →ᵇ E := ofNormedAddCommGroup ⇑g ⋯ ‖f‖ hg_mem
⊢ ‖g'‖ = ‖f‖
state_after: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg : ContinuousMap.restrict s g = ↑f
hg_mem : ∀ (x : X), ‖g x‖ ≤ ‖f‖
g' : X →ᵇ E := ofNormedAddCommGroup ⇑g ⋯ ‖f‖ hg_mem
⊢ ‖f‖ ≤ ‖g'‖
tactic: apply le_antisymm ((g'.norm_le <| by positivity).mpr hg_mem)
state_before: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg : ContinuousMap.restrict s g = ↑f
hg_mem : ∀ (x : X), ‖g x‖ ≤ ‖f‖
g' : X →ᵇ E := ofNormedAddCommGroup ⇑g ⋯ ‖f‖ hg_mem
⊢ ‖f‖ ≤ ‖g'‖
state_after: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg : ContinuousMap.restrict s g = ↑f
hg_mem : ∀ (x : X), ‖g x‖ ≤ ‖f‖
g' : X →ᵇ E := ofNormedAddCommGroup ⇑g ⋯ ‖f‖ hg_mem
x : ↑s
⊢ ‖f x‖ ≤ ‖g'‖
tactic: refine (f.norm_le <| by positivity).mpr fun x ↦ ?_
state_before: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg : ContinuousMap.restrict s g = ↑f
hg_mem : ∀ (x : X), ‖g x‖ ≤ ‖f‖
g' : X →ᵇ E := ofNormedAddCommGroup ⇑g ⋯ ‖f‖ hg_mem
x : ↑s
⊢ ‖f x‖ ≤ ‖g'‖
state_after: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg : ContinuousMap.restrict s g = ↑f
hg_mem : ∀ (x : X), ‖g x‖ ≤ ‖f‖
g' : X →ᵇ E := ofNormedAddCommGroup ⇑g ⋯ ‖f‖ hg_mem
x : ↑s
hx : f x = g' ↑x
⊢ ‖f x‖ ≤ ‖g'‖
tactic: have hx : f x = g' x := by simpa using congr($(hg) x).symm
state_before: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg : ContinuousMap.restrict s g = ↑f
hg_mem : ∀ (x : X), ‖g x‖ ≤ ‖f‖
g' : X →ᵇ E := ofNormedAddCommGroup ⇑g ⋯ ‖f‖ hg_mem
x : ↑s
hx : f x = g' ↑x
⊢ ‖f x‖ ≤ ‖g'‖
state_after: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg : ContinuousMap.restrict s g = ↑f
hg_mem : ∀ (x : X), ‖g x‖ ≤ ‖f‖
g' : X →ᵇ E := ofNormedAddCommGroup ⇑g ⋯ ‖f‖ hg_mem
x : ↑s
hx : f x = g' ↑x
⊢ ‖g' ↑x‖ ≤ ‖g'‖
tactic: rw [hx]
state_before: case neg.intro.intro
X : Type u
inst✝⁶ : TopologicalSpace X
inst✝⁵ : NormalSpace X
s : Set X
hs : IsClosed s
𝕜 : Type v
inst✝⁴ : RCLike 𝕜
inst✝³ : TietzeExtension 𝕜
E : Type w
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
f : ↑s →ᵇ E
hf : ¬‖f‖ = 0
this : TietzeExtension ↑(Metric.closedBall 0 ‖f‖)
hf' : ∀ (x : ↑s), f x ∈ Metric.closedBall 0 ‖f‖
g : C(X, E)
hg : ContinuousMap.restrict s g = ↑f
hg_mem : ∀ (x : X), ‖g x‖ ≤ ‖f‖
g' : X →ᵇ E := ofNormedAddCommGroup ⇑g ⋯ ‖f‖ hg_mem
x : ↑s
hx : f x = g' ↑x
⊢ ‖g' ↑x‖ ≤ ‖g'‖
state_after: no goals
tactic: exact g'.norm_le (norm_nonneg g') |>.mp le_rfl x