Theorem: norm_eq_iInf_iff_inner_eq_zero
File: Mathlib/Analysis/InnerProductSpace/Projection.lean

tactic: letI : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
⊢ (‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖) ↔ ∀ (w : E), w ∈ K → inner (u - v) w = 0

tactic: letI : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
⊢ (‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖) ↔ ∀ (w : E), w ∈ K → inner (u - v) w = 0

tactic: let K' : Submodule ℝ E := K.restrictScalars ℝ
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
⊢ (‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖) ↔ ∀ (w : E), w ∈ K → inner (u - v) w = 0

tactic: constructor
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
⊢ (‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖) ↔ ∀ (w : E), w ∈ K → inner (u - v) w = 0

tactic: intro H
state_before: case mp
𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
⊢ (‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖) → ∀ (w : E), w ∈ K → inner (u - v) w = 0

tactic: have A : ∀ w ∈ K, re ⟪u - v, w⟫ = 0 := (norm_eq_iInf_iff_real_inner_eq_zero K' hv).1 H
state_before: case mp
𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
⊢ ∀ (w : E), w ∈ K → inner (u - v) w = 0

tactic: intro w hw
state_before: case mp
𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
A : ∀ (w : E), w ∈ K → ↑re (inner (u - v) w) = 0
⊢ ∀ (w : E), w ∈ K → inner (u - v) w = 0

tactic: apply ext
state_before: case mp
𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
A : ∀ (w : E), w ∈ K → ↑re (inner (u - v) w) = 0
w : E
hw : w ∈ K
⊢ inner (u - v) w = 0

tactic: simp [A w hw]
state_before: case mp.hre
𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
A : ∀ (w : E), w ∈ K → ↑re (inner (u - v) w) = 0
w : E
hw : w ∈ K
⊢ ↑re (inner (u - v) w) = ↑re 0

tactic: symm
state_before: case mp.him
𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
A : ∀ (w : E), w ∈ K → ↑re (inner (u - v) w) = 0
w : E
hw : w ∈ K
⊢ ↑im (inner (u - v) w) = ↑im 0

tactic: calc
  im (0 : 𝕜) = 0 := im.map_zero
  _ = re ⟪u - v, (-I : 𝕜) • w⟫ := (A _ (K.smul_mem (-I) hw)).symm
  _ = re (-I * ⟪u - v, w⟫) := by rw [inner_smul_right]
  _ = im ⟪u - v, w⟫ := by simp
state_before: case mp.him
𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
A : ∀ (w : E), w ∈ K → ↑re (inner (u - v) w) = 0
w : E
hw : w ∈ K
⊢ ↑im 0 = ↑im (inner (u - v) w)

tactic: rw [inner_smul_right]
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
A : ∀ (w : E), w ∈ K → ↑re (inner (u - v) w) = 0
w : E
hw : w ∈ K
⊢ ↑re (inner (u - v) (-I • w)) = ↑re (-I * inner (u - v) w)

tactic: simp
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
A : ∀ (w : E), w ∈ K → ↑re (inner (u - v) w) = 0
w : E
hw : w ∈ K
⊢ ↑re (-I * inner (u - v) w) = ↑im (inner (u - v) w)

tactic: intro H
state_before: case mpr
𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
⊢ (∀ (w : E), w ∈ K → inner (u - v) w = 0) → ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖

tactic: have : ∀ w ∈ K', ⟪u - v, w⟫_ℝ = 0 := by
  intro w hw
  rw [real_inner_eq_re_inner, H w hw]
  exact zero_re'
state_before: case mpr
𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ∀ (w : E), w ∈ K → inner (u - v) w = 0
⊢ ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖

tactic: exact (norm_eq_iInf_iff_real_inner_eq_zero K' hv).2 this
state_before: case mpr
𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝¹ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this✝ : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ∀ (w : E), w ∈ K → inner (u - v) w = 0
this : ∀ (w : E), w ∈ K' → inner (u - v) w = 0
⊢ ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖

tactic: intro w hw
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ∀ (w : E), w ∈ K → inner (u - v) w = 0
⊢ ∀ (w : E), w ∈ K' → inner (u - v) w = 0

tactic: rw [real_inner_eq_re_inner, H w hw]
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ∀ (w : E), w ∈ K → inner (u - v) w = 0
w : E
hw : w ∈ K'
⊢ inner (u - v) w = 0

tactic: exact zero_re'
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.265347
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ∀ (w : E), w ∈ K → inner (u - v) w = 0
w : E
hw : w ∈ K'
⊢ ↑re 0 = 0