Theorem: Real.exists_extension_norm_eq
File: Mathlib/Analysis/NormedSpace/HahnBanach/Extension.lean

Proof steps:
state_before: E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
⊢ ∃ g, (∀ (x : ↥p), g ↑x = f x) ∧ ‖g‖ = ‖f‖
state_after: case intro.intro
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
g : E →ₗ[ℝ] ℝ
g_eq : ∀ (x : ↥{ domain := p, toFun := ↑f }.domain), g ↑x = ↑{ domain := p, toFun := ↑f } x
g_le : ∀ (x : E), g x ≤ ‖f‖ * ‖x‖
⊢ ∃ g, (∀ (x : ↥p), g ↑x = f x) ∧ ‖g‖ = ‖f‖
tactic: rcases exists_extension_of_le_sublinear ⟨p, f⟩ (fun x => ‖f‖ * ‖x‖)
      (fun c hc x => by simp only [norm_smul c x, Real.norm_eq_abs, abs_of_pos hc, mul_left_comm])
      (fun x y => by -- Porting note: placeholder filled here
        rw [← left_distrib]
        exact mul_le_mul_of_nonneg_left (norm_add_le x y) (@norm_nonneg _ _ f))
      fun x => le_trans (le_abs_self _) (f.le_opNorm _) with ⟨g, g_eq, g_le⟩
state_before: case intro.intro
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
g : E →ₗ[ℝ] ℝ
g_eq : ∀ (x : ↥{ domain := p, toFun := ↑f }.domain), g ↑x = ↑{ domain := p, toFun := ↑f } x
g_le : ∀ (x : E), g x ≤ ‖f‖ * ‖x‖
⊢ ∃ g, (∀ (x : ↥p), g ↑x = f x) ∧ ‖g‖ = ‖f‖
state_after: case intro.intro
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
g : E →ₗ[ℝ] ℝ
g_eq : ∀ (x : ↥{ domain := p, toFun := ↑f }.domain), g ↑x = ↑{ domain := p, toFun := ↑f } x
g_le : ∀ (x : E), g x ≤ ‖f‖ * ‖x‖
g' : E →L[ℝ] ℝ := g.mkContinuous ‖f‖ ⋯
⊢ ∃ g, (∀ (x : ↥p), g ↑x = f x) ∧ ‖g‖ = ‖f‖
tactic: set g' :=
    g.mkContinuous ‖f‖ fun x => abs_le.2 ⟨neg_le.1 <| g.map_neg x ▸ norm_neg x ▸ g_le (-x), g_le x⟩
state_before: case intro.intro
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
g : E →ₗ[ℝ] ℝ
g_eq : ∀ (x : ↥{ domain := p, toFun := ↑f }.domain), g ↑x = ↑{ domain := p, toFun := ↑f } x
g_le : ∀ (x : E), g x ≤ ‖f‖ * ‖x‖
g' : E →L[ℝ] ℝ := g.mkContinuous ‖f‖ ⋯
⊢ ∃ g, (∀ (x : ↥p), g ↑x = f x) ∧ ‖g‖ = ‖f‖
state_after: case intro.intro
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
g : E →ₗ[ℝ] ℝ
g_eq : ∀ (x : ↥{ domain := p, toFun := ↑f }.domain), g ↑x = ↑{ domain := p, toFun := ↑f } x
g_le : ∀ (x : E), g x ≤ ‖f‖ * ‖x‖
g' : E →L[ℝ] ℝ := g.mkContinuous ‖f‖ ⋯
⊢ ‖g'‖ = ‖f‖
tactic: refine ⟨g', g_eq, ?_⟩
state_before: case intro.intro
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
g : E →ₗ[ℝ] ℝ
g_eq : ∀ (x : ↥{ domain := p, toFun := ↑f }.domain), g ↑x = ↑{ domain := p, toFun := ↑f } x
g_le : ∀ (x : E), g x ≤ ‖f‖ * ‖x‖
g' : E →L[ℝ] ℝ := g.mkContinuous ‖f‖ ⋯
⊢ ‖g'‖ = ‖f‖
state_after: case intro.intro
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
g : E →ₗ[ℝ] ℝ
g_eq : ∀ (x : ↥{ domain := p, toFun := ↑f }.domain), g ↑x = ↑{ domain := p, toFun := ↑f } x
g_le : ∀ (x : E), g x ≤ ‖f‖ * ‖x‖
g' : E →L[ℝ] ℝ := g.mkContinuous ‖f‖ ⋯
⊢ ‖f‖ ≤ ‖g.mkContinuous ‖f‖ ⋯‖
tactic: apply le_antisymm (g.mkContinuous_norm_le (norm_nonneg f) _)
state_before: case intro.intro
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
g : E →ₗ[ℝ] ℝ
g_eq : ∀ (x : ↥{ domain := p, toFun := ↑f }.domain), g ↑x = ↑{ domain := p, toFun := ↑f } x
g_le : ∀ (x : E), g x ≤ ‖f‖ * ‖x‖
g' : E →L[ℝ] ℝ := g.mkContinuous ‖f‖ ⋯
⊢ ‖f‖ ≤ ‖g.mkContinuous ‖f‖ ⋯‖
state_after: case intro.intro
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
g : E →ₗ[ℝ] ℝ
g_eq : ∀ (x : ↥{ domain := p, toFun := ↑f }.domain), g ↑x = ↑{ domain := p, toFun := ↑f } x
g_le : ∀ (x : E), g x ≤ ‖f‖ * ‖x‖
g' : E →L[ℝ] ℝ := g.mkContinuous ‖f‖ ⋯
x : ↥p
⊢ ‖f x‖ ≤ ‖g.mkContinuous ‖f‖ ⋯‖ * ‖x‖
tactic: refine f.opNorm_le_bound (norm_nonneg _) fun x => ?_
state_before: case intro.intro
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
g : E →ₗ[ℝ] ℝ
g_eq : ∀ (x : ↥{ domain := p, toFun := ↑f }.domain), g ↑x = ↑{ domain := p, toFun := ↑f } x
g_le : ∀ (x : E), g x ≤ ‖f‖ * ‖x‖
g' : E →L[ℝ] ℝ := g.mkContinuous ‖f‖ ⋯
x : ↥p
⊢ ‖f x‖ ≤ ‖g.mkContinuous ‖f‖ ⋯‖ * ‖x‖
state_after: case intro.intro
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
g : E →ₗ[ℝ] ℝ
g_eq : ∀ (x : ↥p), g ↑x = f x
g_le : ∀ (x : E), g x ≤ ‖f‖ * ‖x‖
g' : E →L[ℝ] ℝ := g.mkContinuous ‖f‖ ⋯
x : ↥p
⊢ ‖f x‖ ≤ ‖g.mkContinuous ‖f‖ ⋯‖ * ‖x‖
tactic: dsimp at g_eq
state_before: case intro.intro
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
g : E →ₗ[ℝ] ℝ
g_eq : ∀ (x : ↥p), g ↑x = f x
g_le : ∀ (x : E), g x ≤ ‖f‖ * ‖x‖
g' : E →L[ℝ] ℝ := g.mkContinuous ‖f‖ ⋯
x : ↥p
⊢ ‖f x‖ ≤ ‖g.mkContinuous ‖f‖ ⋯‖ * ‖x‖
state_after: case intro.intro
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
g : E →ₗ[ℝ] ℝ
g_eq : ∀ (x : ↥p), g ↑x = f x
g_le : ∀ (x : E), g x ≤ ‖f‖ * ‖x‖
g' : E →L[ℝ] ℝ := g.mkContinuous ‖f‖ ⋯
x : ↥p
⊢ ‖g ↑x‖ ≤ ‖g.mkContinuous ‖f‖ ⋯‖ * ‖x‖
tactic: rw [← g_eq]
state_before: case intro.intro
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
p : Subspace ℝ E
f : ↥p →L[ℝ] ℝ
g : E →ₗ[ℝ] ℝ
g_eq : ∀ (x : ↥p), g ↑x = f x
g_le : ∀ (x : E), g x ≤ ‖f‖ * ‖x‖
g' : E →L[ℝ] ℝ := g.mkContinuous ‖f‖ ⋯
x : ↥p
⊢ ‖g ↑x‖ ≤ ‖g.mkContinuous ‖f‖ ⋯‖ * ‖x‖
state_after: no goals
tactic: apply g'.le_opNorm