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

tactic: rw [← sub_eq_zero, ← @inner_self_eq_zero 𝕜]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ w ∈ K, ⟪u - v, w⟫_𝕜 = 0
⊢ orthogonalProjectionFn K u = v
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ w ∈ K, ⟪u - v, w⟫_𝕜 = 0
⊢ ⟪orthogonalProjectionFn K u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0

tactic: have hvs : orthogonalProjectionFn K u - v ∈ K :=
  Submodule.sub_mem K (orthogonalProjectionFn_mem u) hvm
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ w ∈ K, ⟪u - v, w⟫_𝕜 = 0
⊢ ⟪orthogonalProjectionFn K u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ w ∈ K, ⟪u - v, w⟫_𝕜 = 0
hvs : orthogonalProjectionFn K u - v ∈ K
⊢ ⟪orthogonalProjectionFn K u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0

tactic: have huo : ⟪u - orthogonalProjectionFn K u, orthogonalProjectionFn K u - v⟫ = 0 :=
  orthogonalProjectionFn_inner_eq_zero u _ hvs
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ w ∈ K, ⟪u - v, w⟫_𝕜 = 0
hvs : orthogonalProjectionFn K u - v ∈ K
⊢ ⟪orthogonalProjectionFn K u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ w ∈ K, ⟪u - v, w⟫_𝕜 = 0
hvs : orthogonalProjectionFn K u - v ∈ K
huo : ⟪u - orthogonalProjectionFn K u, orthogonalProjectionFn K u - v⟫_𝕜 = 0
⊢ ⟪orthogonalProjectionFn K u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0

tactic: have huv : ⟪u - v, orthogonalProjectionFn K u - v⟫ = 0 := hvo _ hvs
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ w ∈ K, ⟪u - v, w⟫_𝕜 = 0
hvs : orthogonalProjectionFn K u - v ∈ K
huo : ⟪u - orthogonalProjectionFn K u, orthogonalProjectionFn K u - v⟫_𝕜 = 0
⊢ ⟪orthogonalProjectionFn K u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ w ∈ K, ⟪u - v, w⟫_𝕜 = 0
hvs : orthogonalProjectionFn K u - v ∈ K
huo : ⟪u - orthogonalProjectionFn K u, orthogonalProjectionFn K u - v⟫_𝕜 = 0
huv : ⟪u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0
⊢ ⟪orthogonalProjectionFn K u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0

tactic: have houv : ⟪u - v - (u - orthogonalProjectionFn K u), orthogonalProjectionFn K u - v⟫ = 0 := by
  rw [inner_sub_left, huo, huv, sub_zero]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ w ∈ K, ⟪u - v, w⟫_𝕜 = 0
hvs : orthogonalProjectionFn K u - v ∈ K
huo : ⟪u - orthogonalProjectionFn K u, orthogonalProjectionFn K u - v⟫_𝕜 = 0
huv : ⟪u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0
⊢ ⟪orthogonalProjectionFn K u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ w ∈ K, ⟪u - v, w⟫_𝕜 = 0
hvs : orthogonalProjectionFn K u - v ∈ K
huo : ⟪u - orthogonalProjectionFn K u, orthogonalProjectionFn K u - v⟫_𝕜 = 0
huv : ⟪u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0
houv : ⟪u - v - (u - orthogonalProjectionFn K u), orthogonalProjectionFn K u - v⟫_𝕜 = 0
⊢ ⟪orthogonalProjectionFn K u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0

tactic: rwa [sub_sub_sub_cancel_left] at houv
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ w ∈ K, ⟪u - v, w⟫_𝕜 = 0
hvs : orthogonalProjectionFn K u - v ∈ K
huo : ⟪u - orthogonalProjectionFn K u, orthogonalProjectionFn K u - v⟫_𝕜 = 0
huv : ⟪u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0
houv : ⟪u - v - (u - orthogonalProjectionFn K u), orthogonalProjectionFn K u - v⟫_𝕜 = 0
⊢ ⟪orthogonalProjectionFn K u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0
state_after: no goals

tactic: rw [inner_sub_left, huo, huv, sub_zero]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ w ∈ K, ⟪u - v, w⟫_𝕜 = 0
hvs : orthogonalProjectionFn K u - v ∈ K
huo : ⟪u - orthogonalProjectionFn K u, orthogonalProjectionFn K u - v⟫_𝕜 = 0
huv : ⟪u - v, orthogonalProjectionFn K u - v⟫_𝕜 = 0
⊢ ⟪u - v - (u - orthogonalProjectionFn K u), orthogonalProjectionFn K u - v⟫_𝕜 = 0
state_after: no goals