Theorem: OrthogonalFamily.inner_sum
File: Mathlib/Analysis/InnerProductSpace/Basic.lean

tactic: classical!
state_before: 𝕜 : Type u_2
E : Type u_3
F : Type ?u.3657440
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace ℝ F
dec_E : DecidableEq E
ι : Type u_1
dec_ι : DecidableEq ι
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
hV : OrthogonalFamily 𝕜 G V
dec_V : (i : ι) → (x : G i) → Decidable (x ≠ 0)
l₁ l₂ : (i : ι) → G i
s : Finset ι
⊢ inner (∑ i in s, ↑(V i) (l₁ i)) (∑ j in s, ↑(V j) (l₂ j)) = ∑ i in s, inner (l₁ i) (l₂ i)

tactic: calc
  ⟪∑ i in s, V i (l₁ i), ∑ j in s, V j (l₂ j)⟫ = ∑ j in s, ∑ i in s, ⟪V i (l₁ i), V j (l₂ j)⟫ :=
    by simp only [_root_.sum_inner, _root_.inner_sum]
  _ = ∑ j in s, ∑ i in s, ite (i = j) ⟪V i (l₁ i), V j (l₂ j)⟫ 0 := by
    congr with i
    congr with j
    apply hV.eq_ite
  _ = ∑ i in s, ⟪l₁ i, l₂ i⟫ := by
    simp only [Finset.sum_ite_of_true, Finset.sum_ite_eq', LinearIsometry.inner_map_map,
      imp_self, imp_true_iff]
state_before: 𝕜 : Type u_2
E : Type u_3
F : Type ?u.3657440
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace ℝ F
dec_E : DecidableEq E
ι : Type u_1
dec_ι : DecidableEq ι
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
hV : OrthogonalFamily 𝕜 G V
dec_V : (i : ι) → (x : G i) → Decidable (x ≠ 0)
l₁ l₂ : (i : ι) → G i
s : Finset ι
em✝ : (a : Prop) → Decidable a
⊢ inner (∑ i in s, ↑(V i) (l₁ i)) (∑ j in s, ↑(V j) (l₂ j)) = ∑ i in s, inner (l₁ i) (l₂ i)

tactic: simp only [_root_.sum_inner, _root_.inner_sum]
state_before: 𝕜 : Type u_2
E : Type u_3
F : Type ?u.3657440
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace ℝ F
dec_E : DecidableEq E
ι : Type u_1
dec_ι : DecidableEq ι
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
hV : OrthogonalFamily 𝕜 G V
dec_V : (i : ι) → (x : G i) → Decidable (x ≠ 0)
l₁ l₂ : (i : ι) → G i
s : Finset ι
em✝ : (a : Prop) → Decidable a
⊢ inner (∑ i in s, ↑(V i) (l₁ i)) (∑ j in s, ↑(V j) (l₂ j)) = ∑ j in s, ∑ i in s, inner (↑(V i) (l₁ i)) (↑(V j) (l₂ j))

tactic: congr with i
state_before: 𝕜 : Type u_2
E : Type u_3
F : Type ?u.3657440
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace ℝ F
dec_E : DecidableEq E
ι : Type u_1
dec_ι : DecidableEq ι
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
hV : OrthogonalFamily 𝕜 G V
dec_V : (i : ι) → (x : G i) → Decidable (x ≠ 0)
l₁ l₂ : (i : ι) → G i
s : Finset ι
em✝ : (a : Prop) → Decidable a
⊢ ∑ j in s, ∑ i in s, inner (↑(V i) (l₁ i)) (↑(V j) (l₂ j)) =
    ∑ j in s, ∑ i in s, if i = j then inner (↑(V i) (l₁ i)) (↑(V j) (l₂ j)) else 0

tactic: congr with j
state_before: case e_f.h
𝕜 : Type u_2
E : Type u_3
F : Type ?u.3657440
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace ℝ F
dec_E : DecidableEq E
ι : Type u_1
dec_ι : DecidableEq ι
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
hV : OrthogonalFamily 𝕜 G V
dec_V : (i : ι) → (x : G i) → Decidable (x ≠ 0)
l₁ l₂ : (i : ι) → G i
s : Finset ι
em✝ : (a : Prop) → Decidable a
i : ι
⊢ ∑ i_1 in s, inner (↑(V i_1) (l₁ i_1)) (↑(V i) (l₂ i)) =
    ∑ i_1 in s, if i_1 = i then inner (↑(V i_1) (l₁ i_1)) (↑(V i) (l₂ i)) else 0

tactic: apply hV.eq_ite
state_before: case e_f.h.e_f.h
𝕜 : Type u_2
E : Type u_3
F : Type ?u.3657440
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace ℝ F
dec_E : DecidableEq E
ι : Type u_1
dec_ι : DecidableEq ι
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
hV : OrthogonalFamily 𝕜 G V
dec_V : (i : ι) → (x : G i) → Decidable (x ≠ 0)
l₁ l₂ : (i : ι) → G i
s : Finset ι
em✝ : (a : Prop) → Decidable a
i j : ι
⊢ inner (↑(V j) (l₁ j)) (↑(V i) (l₂ i)) = if j = i then inner (↑(V j) (l₁ j)) (↑(V i) (l₂ i)) else 0

tactic: simp only [Finset.sum_ite_of_true, Finset.sum_ite_eq', LinearIsometry.inner_map_map,
  imp_self, imp_true_iff]
state_before: 𝕜 : Type u_2
E : Type u_3
F : Type ?u.3657440
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace ℝ F
dec_E : DecidableEq E
ι : Type u_1
dec_ι : DecidableEq ι
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
hV : OrthogonalFamily 𝕜 G V
dec_V : (i : ι) → (x : G i) → Decidable (x ≠ 0)
l₁ l₂ : (i : ι) → G i
s : Finset ι
em✝ : (a : Prop) → Decidable a
⊢ (∑ j in s, ∑ i in s, if i = j then inner (↑(V i) (l₁ i)) (↑(V j) (l₂ j)) else 0) = ∑ i in s, inner (l₁ i) (l₂ i)