Theorem: eq_of_norm_le_re_inner_eq_norm_sq
File: Mathlib/Analysis/InnerProductSpace/Basic.lean

tactic: suffices H : re ⟪x - y, x - y⟫ ≤ 0 by rwa [inner_self_nonpos, sub_eq_zero] at H
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : E
hle : ‖x‖ ≤ ‖y‖
h : re ⟪x, y⟫_𝕜 = ‖y‖ ^ 2
⊢ x = y
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : E
hle : ‖x‖ ≤ ‖y‖
h : re ⟪x, y⟫_𝕜 = ‖y‖ ^ 2
⊢ re ⟪x - y, x - y⟫_𝕜 ≤ 0

tactic: have H₁ : ‖x‖ ^ 2 ≤ ‖y‖ ^ 2 := by gcongr
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : E
hle : ‖x‖ ≤ ‖y‖
h : re ⟪x, y⟫_𝕜 = ‖y‖ ^ 2
⊢ re ⟪x - y, x - y⟫_𝕜 ≤ 0
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : E
hle : ‖x‖ ≤ ‖y‖
h : re ⟪x, y⟫_𝕜 = ‖y‖ ^ 2
H₁ : ‖x‖ ^ 2 ≤ ‖y‖ ^ 2
⊢ re ⟪x - y, x - y⟫_𝕜 ≤ 0

tactic: have H₂ : re ⟪y, x⟫ = ‖y‖ ^ 2 := by rwa [← inner_conj_symm, conj_re]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : E
hle : ‖x‖ ≤ ‖y‖
h : re ⟪x, y⟫_𝕜 = ‖y‖ ^ 2
H₁ : ‖x‖ ^ 2 ≤ ‖y‖ ^ 2
⊢ re ⟪x - y, x - y⟫_𝕜 ≤ 0
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : E
hle : ‖x‖ ≤ ‖y‖
h : re ⟪x, y⟫_𝕜 = ‖y‖ ^ 2
H₁ : ‖x‖ ^ 2 ≤ ‖y‖ ^ 2
H₂ : re ⟪y, x⟫_𝕜 = ‖y‖ ^ 2
⊢ re ⟪x - y, x - y⟫_𝕜 ≤ 0

tactic: simpa [inner_sub_left, inner_sub_right, ← norm_sq_eq_inner, h, H₂] using H₁
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : E
hle : ‖x‖ ≤ ‖y‖
h : re ⟪x, y⟫_𝕜 = ‖y‖ ^ 2
H₁ : ‖x‖ ^ 2 ≤ ‖y‖ ^ 2
H₂ : re ⟪y, x⟫_𝕜 = ‖y‖ ^ 2
⊢ re ⟪x - y, x - y⟫_𝕜 ≤ 0
state_after: no goals

tactic: rwa [inner_self_nonpos, sub_eq_zero] at H
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : E
hle : ‖x‖ ≤ ‖y‖
h : re ⟪x, y⟫_𝕜 = ‖y‖ ^ 2
H : re ⟪x - y, x - y⟫_𝕜 ≤ 0
⊢ x = y
state_after: no goals

tactic: gcongr
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : E
hle : ‖x‖ ≤ ‖y‖
h : re ⟪x, y⟫_𝕜 = ‖y‖ ^ 2
⊢ ‖x‖ ^ 2 ≤ ‖y‖ ^ 2
state_after: no goals

tactic: rwa [← inner_conj_symm, conj_re]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : E
hle : ‖x‖ ≤ ‖y‖
h : re ⟪x, y⟫_𝕜 = ‖y‖ ^ 2
H₁ : ‖x‖ ^ 2 ≤ ‖y‖ ^ 2
⊢ re ⟪y, x⟫_𝕜 = ‖y‖ ^ 2
state_after: no goals