[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
ι : Type u_8
inst✝² : Fintype ι
f : ι → Type u_9
inst✝¹ : (i : ι) → NormedAddCommGroup (f i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (f i)
x : PiLp 2 f
⊢ ‖x‖ ^ 2 = ↑re (inner x x)
[PROOFSTEP]
simp only [PiLp.norm_sq_eq_of_L2, map_sum, ← norm_sq_eq_inner, one_div]
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
ι : Type u_8
inst✝² : Fintype ι
f : ι → Type u_9
inst✝¹ : (i : ι) → NormedAddCommGroup (f i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (f i)
⊢ ∀ (x y : PiLp 2 f), ↑(starRingEnd 𝕜) (inner y x) = inner x y
[PROOFSTEP]
intro x y
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
ι : Type u_8
inst✝² : Fintype ι
f : ι → Type u_9
inst✝¹ : (i : ι) → NormedAddCommGroup (f i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (f i)
x y : PiLp 2 f
⊢ ↑(starRingEnd 𝕜) (inner y x) = inner x y
[PROOFSTEP]
unfold inner
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
ι : Type u_8
inst✝² : Fintype ι
f : ι → Type u_9
inst✝¹ : (i : ι) → NormedAddCommGroup (f i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (f i)
x y : PiLp 2 f
⊢ ↑(starRingEnd 𝕜) ({ inner := fun x y => ∑ i : ι, InnerProductSpace.toInner.1 (x i) (y i) }.1 y x) =
    { inner := fun x y => ∑ i : ι, InnerProductSpace.toInner.1 (x i) (y i) }.1 x y
[PROOFSTEP]
rw [map_sum]
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
ι : Type u_8
inst✝² : Fintype ι
f : ι → Type u_9
inst✝¹ : (i : ι) → NormedAddCommGroup (f i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (f i)
x y : PiLp 2 f
⊢ ∑ x_1 : ι, ↑(starRingEnd 𝕜) (InnerProductSpace.toInner.1 (y x_1) (x x_1)) =
    { inner := fun x y => ∑ i : ι, InnerProductSpace.toInner.1 (x i) (y i) }.1 x y
[PROOFSTEP]
apply Finset.sum_congr rfl
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
ι : Type u_8
inst✝² : Fintype ι
f : ι → Type u_9
inst✝¹ : (i : ι) → NormedAddCommGroup (f i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (f i)
x y : PiLp 2 f
⊢ ∀ (x_1 : ι),
    x_1 ∈ Finset.univ →
      ↑(starRingEnd 𝕜) (InnerProductSpace.toInner.1 (y x_1) (x x_1)) = InnerProductSpace.toInner.1 (x x_1) (y x_1)
[PROOFSTEP]
rintro z -
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
ι : Type u_8
inst✝² : Fintype ι
f : ι → Type u_9
inst✝¹ : (i : ι) → NormedAddCommGroup (f i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (f i)
x y : PiLp 2 f
z : ι
⊢ ↑(starRingEnd 𝕜) (InnerProductSpace.toInner.1 (y z) (x z)) = InnerProductSpace.toInner.1 (x z) (y z)
[PROOFSTEP]
apply inner_conj_symm
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
ι : Type u_8
inst✝² : Fintype ι
f : ι → Type u_9
inst✝¹ : (i : ι) → NormedAddCommGroup (f i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (f i)
x y z : PiLp 2 f
⊢ ∑ i : ι, inner (x i + y i) (z i) = ∑ i : ι, inner (x i) (z i) + ∑ i : ι, inner (y i) (z i)
[PROOFSTEP]
simp only [inner_add_left, Finset.sum_add_distrib]
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
ι : Type u_8
inst✝² : Fintype ι
f : ι → Type u_9
inst✝¹ : (i : ι) → NormedAddCommGroup (f i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (f i)
x y : PiLp 2 f
r : 𝕜
⊢ ∑ i : ι, inner (r • x i) (y i) = ↑(starRingEnd 𝕜) r * ∑ i : ι, inner (x i) (y i)
[PROOFSTEP]
simp only [Finset.mul_sum, inner_smul_left]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜✝ : Type u_3
inst✝¹⁰ : IsROrC 𝕜✝
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜✝ E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜✝ E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
𝕜 : Type u_8
inst✝¹ : IsROrC 𝕜
n : Type u_9
inst✝ : Fintype n
x : EuclideanSpace 𝕜 n
⊢ ‖x‖ = Real.sqrt (∑ i : n, ‖x i‖ ^ 2)
[PROOFSTEP]
simpa only [Real.coe_sqrt, NNReal.coe_sum] using congr_arg ((↑) : ℝ≥0 → ℝ) x.nnnorm_eq
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
⊢ FiniteDimensional 𝕜 (EuclideanSpace 𝕜 ι)
[PROOFSTEP]
infer_instance
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
⊢ InnerProductSpace 𝕜 (EuclideanSpace 𝕜 ι)
[PROOFSTEP]
infer_instance
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
⊢ FiniteDimensional.finrank 𝕜 (EuclideanSpace 𝕜 ι) = Fintype.card ι
[PROOFSTEP]
simp [EuclideanSpace, PiLp, WithLp]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
n : ℕ
⊢ FiniteDimensional.finrank 𝕜 (EuclideanSpace 𝕜 (Fin n)) = n
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
⊢ E ≃ₗᵢ[𝕜] PiLp 2 fun i => { x // x ∈ V i }
[PROOFSTEP]
let e₁ := DirectSum.linearEquivFunOnFintype 𝕜 ι fun i => V i
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
⊢ E ≃ₗᵢ[𝕜] PiLp 2 fun i => { x // x ∈ V i }
[PROOFSTEP]
let e₂ := LinearEquiv.ofBijective (DirectSum.coeLinearMap V) hV
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
⊢ E ≃ₗᵢ[𝕜] PiLp 2 fun i => { x // x ∈ V i }
[PROOFSTEP]
refine' LinearEquiv.isometryOfInner (e₂.symm.trans e₁) _
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
⊢ ∀ (x y : E),
    inner (↑(LinearEquiv.trans (LinearEquiv.symm e₂) e₁) x) (↑(LinearEquiv.trans (LinearEquiv.symm e₂) e₁) y) =
      inner x y
[PROOFSTEP]
suffices ∀ (v w : PiLp 2 fun i => V i), ⟪v, w⟫ = ⟪e₂ (e₁.symm v), e₂ (e₁.symm w)⟫
  by
  intro v₀ w₀
  convert this (e₁ (e₂.symm v₀)) (e₁ (e₂.symm w₀)) <;>
    simp only [LinearEquiv.symm_apply_apply, LinearEquiv.apply_symm_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
this :
  ∀ (v w : PiLp 2 fun i => { x // x ∈ V i }),
    inner v w = inner (↑e₂ (↑(LinearEquiv.symm e₁) v)) (↑e₂ (↑(LinearEquiv.symm e₁) w))
⊢ ∀ (x y : E),
    inner (↑(LinearEquiv.trans (LinearEquiv.symm e₂) e₁) x) (↑(LinearEquiv.trans (LinearEquiv.symm e₂) e₁) y) =
      inner x y
[PROOFSTEP]
intro v₀ w₀
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
this :
  ∀ (v w : PiLp 2 fun i => { x // x ∈ V i }),
    inner v w = inner (↑e₂ (↑(LinearEquiv.symm e₁) v)) (↑e₂ (↑(LinearEquiv.symm e₁) w))
v₀ w₀ : E
⊢ inner (↑(LinearEquiv.trans (LinearEquiv.symm e₂) e₁) v₀) (↑(LinearEquiv.trans (LinearEquiv.symm e₂) e₁) w₀) =
    inner v₀ w₀
[PROOFSTEP]
convert this (e₁ (e₂.symm v₀)) (e₁ (e₂.symm w₀))
[GOAL]
case h.e'_3.h.e'_4
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
this :
  ∀ (v w : PiLp 2 fun i => { x // x ∈ V i }),
    inner v w = inner (↑e₂ (↑(LinearEquiv.symm e₁) v)) (↑e₂ (↑(LinearEquiv.symm e₁) w))
v₀ w₀ : E
⊢ v₀ = ↑e₂ (↑(LinearEquiv.symm e₁) (↑e₁ (↑(LinearEquiv.symm e₂) v₀)))
[PROOFSTEP]
simp only [LinearEquiv.symm_apply_apply, LinearEquiv.apply_symm_apply]
[GOAL]
case h.e'_3.h.e'_5
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
this :
  ∀ (v w : PiLp 2 fun i => { x // x ∈ V i }),
    inner v w = inner (↑e₂ (↑(LinearEquiv.symm e₁) v)) (↑e₂ (↑(LinearEquiv.symm e₁) w))
v₀ w₀ : E
⊢ w₀ = ↑e₂ (↑(LinearEquiv.symm e₁) (↑e₁ (↑(LinearEquiv.symm e₂) w₀)))
[PROOFSTEP]
simp only [LinearEquiv.symm_apply_apply, LinearEquiv.apply_symm_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
⊢ ∀ (v w : PiLp 2 fun i => { x // x ∈ V i }),
    inner v w = inner (↑e₂ (↑(LinearEquiv.symm e₁) v)) (↑e₂ (↑(LinearEquiv.symm e₁) w))
[PROOFSTEP]
intro v w
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
v w : PiLp 2 fun i => { x // x ∈ V i }
⊢ inner v w = inner (↑e₂ (↑(LinearEquiv.symm e₁) v)) (↑e₂ (↑(LinearEquiv.symm e₁) w))
[PROOFSTEP]
trans ⟪∑ i, (V i).subtypeₗᵢ (v i), ∑ i, (V i).subtypeₗᵢ (w i)⟫
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
v w : PiLp 2 fun i => { x // x ∈ V i }
⊢ inner v w = inner (∑ i : ι, ↑(subtypeₗᵢ (V i)) (v i)) (∑ i : ι, ↑(subtypeₗᵢ (V i)) (w i))
[PROOFSTEP]
simp only [sum_inner, hV'.inner_right_fintype, PiLp.inner_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
v w : PiLp 2 fun i => { x // x ∈ V i }
⊢ inner (∑ i : ι, ↑(subtypeₗᵢ (V i)) (v i)) (∑ i : ι, ↑(subtypeₗᵢ (V i)) (w i)) =
    inner (↑e₂ (↑(LinearEquiv.symm e₁) v)) (↑e₂ (↑(LinearEquiv.symm e₁) w))
[PROOFSTEP]
congr
[GOAL]
case e_a.e_s
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
v w : PiLp 2 fun i => { x // x ∈ V i }
⊢ Finset.univ =
    Multiset.toFinset ↑{ val := Finset.univ.val, property := (_ : ∀ (x : ι), x ∈ Finset.univ.val ∨ v x = 0) }
[PROOFSTEP]
simp
[GOAL]
case e_a.e_s
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
v w : PiLp 2 fun i => { x // x ∈ V i }
⊢ Finset.univ =
    Multiset.toFinset ↑{ val := Finset.univ.val, property := (_ : ∀ (x : ι), x ∈ Finset.univ.val ∨ w x = 0) }
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
w : PiLp 2 fun i => { x // x ∈ V i }
⊢ ↑(LinearIsometryEquiv.symm (isometryL2OfOrthogonalFamily hV hV')) w = ∑ i : ι, ↑(w i)
[PROOFSTEP]
classical
let e₁ := DirectSum.linearEquivFunOnFintype 𝕜 ι fun i => V i
let e₂ := LinearEquiv.ofBijective (DirectSum.coeLinearMap V) hV
suffices ∀ v : ⨁ i, V i, e₂ v = ∑ i, e₁ v i by exact this (e₁.symm w)
intro v
simp [DirectSum.coeLinearMap, DirectSum.toModule, DFinsupp.lsum, DFinsupp.sumAddHom_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
w : PiLp 2 fun i => { x // x ∈ V i }
⊢ ↑(LinearIsometryEquiv.symm (isometryL2OfOrthogonalFamily hV hV')) w = ∑ i : ι, ↑(w i)
[PROOFSTEP]
let e₁ := DirectSum.linearEquivFunOnFintype 𝕜 ι fun i => V i
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
w : PiLp 2 fun i => { x // x ∈ V i }
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
⊢ ↑(LinearIsometryEquiv.symm (isometryL2OfOrthogonalFamily hV hV')) w = ∑ i : ι, ↑(w i)
[PROOFSTEP]
let e₂ := LinearEquiv.ofBijective (DirectSum.coeLinearMap V) hV
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
w : PiLp 2 fun i => { x // x ∈ V i }
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
⊢ ↑(LinearIsometryEquiv.symm (isometryL2OfOrthogonalFamily hV hV')) w = ∑ i : ι, ↑(w i)
[PROOFSTEP]
suffices ∀ v : ⨁ i, V i, e₂ v = ∑ i, e₁ v i by exact this (e₁.symm w)
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
w : PiLp 2 fun i => { x // x ∈ V i }
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
this : ∀ (v : ⨁ (i : ι), { x // x ∈ V i }), ↑e₂ v = ∑ i : ι, ↑(↑e₁ v i)
⊢ ↑(LinearIsometryEquiv.symm (isometryL2OfOrthogonalFamily hV hV')) w = ∑ i : ι, ↑(w i)
[PROOFSTEP]
exact this (e₁.symm w)
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
w : PiLp 2 fun i => { x // x ∈ V i }
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
⊢ ∀ (v : ⨁ (i : ι), { x // x ∈ V i }), ↑e₂ v = ∑ i : ι, ↑(↑e₁ v i)
[PROOFSTEP]
intro v
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
w : PiLp 2 fun i => { x // x ∈ V i }
e₁ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] (i : ι) → { x // x ∈ V i } :=
  linearEquivFunOnFintype 𝕜 ι fun i => { x // x ∈ V i }
e₂ : (⨁ (i : ι), { x // x ∈ V i }) ≃ₗ[𝕜] E := LinearEquiv.ofBijective (coeLinearMap V) hV
v : ⨁ (i : ι), { x // x ∈ V i }
⊢ ↑e₂ v = ∑ i : ι, ↑(↑e₁ v i)
[PROOFSTEP]
simp [DirectSum.coeLinearMap, DirectSum.toModule, DFinsupp.lsum, DFinsupp.sumAddHom_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
i : ι
a : 𝕜
j : ι
⊢ single i a j = if j = i then a else 0
[PROOFSTEP]
rw [EuclideanSpace.single, PiLp.equiv_symm_apply, ← Pi.single_apply i a j]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
i : ι
a : 𝕜
v : EuclideanSpace 𝕜 ι
⊢ inner (single i a) v = ↑(starRingEnd 𝕜) a * v i
[PROOFSTEP]
simp [apply_ite conj]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
i : ι
a : 𝕜
v : EuclideanSpace 𝕜 ι
⊢ inner v (single i a) = a * ↑(starRingEnd ((fun x => 𝕜) i)) (v i)
[PROOFSTEP]
simp [apply_ite conj, mul_comm]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
⊢ Orthonormal 𝕜 fun i => single i 1
[PROOFSTEP]
simp_rw [orthonormal_iff_ite, EuclideanSpace.inner_single_left, map_one, one_mul, EuclideanSpace.single_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
⊢ ι → ι → True
[PROOFSTEP]
intros
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
i✝ j✝ : ι
⊢ True
[PROOFSTEP]
trivial
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
f g : OrthonormalBasis ι 𝕜 E
h : f.repr = g.repr
⊢ f = g
[PROOFSTEP]
cases f
[GOAL]
case ofRepr
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
g : OrthonormalBasis ι 𝕜 E
repr✝ : E ≃ₗᵢ[𝕜] EuclideanSpace 𝕜 ι
h : { repr := repr✝ }.repr = g.repr
⊢ { repr := repr✝ } = g
[PROOFSTEP]
cases g
[GOAL]
case ofRepr.ofRepr
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
repr✝¹ repr✝ : E ≃ₗᵢ[𝕜] EuclideanSpace 𝕜 ι
h : { repr := repr✝¹ }.repr = { repr := repr✝ }.repr
⊢ { repr := repr✝¹ } = { repr := repr✝ }
[PROOFSTEP]
congr
  -- Porting note: `CoeFun` → `FunLike`
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
i : ι
⊢ E
[PROOFSTEP]
classical exact b.repr.symm (EuclideanSpace.single i (1 : 𝕜))
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
i : ι
⊢ E
[PROOFSTEP]
exact b.repr.symm (EuclideanSpace.single i (1 : 𝕜))
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b b' : OrthonormalBasis ι 𝕜 E
h :
  (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b =
    (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b'
⊢ ↑(LinearEquiv.symm b.repr.toLinearEquiv) = ↑(LinearEquiv.symm b'.repr.toLinearEquiv)
[PROOFSTEP]
classical
rw [← LinearMap.cancel_right (PiLp.linearEquiv 2 𝕜 (fun _ => 𝕜)).symm.surjective]
simp only [LinearIsometryEquiv.toLinearEquiv_symm]
refine LinearMap.pi_ext fun i k => ?_
have : k = k • (1 : 𝕜) := by rw [smul_eq_mul, mul_one]
rw [this, Pi.single_smul]
replace h := congr_fun h i
simp only [LinearEquiv.comp_coe, SMulHomClass.map_smul, LinearEquiv.coe_coe, LinearEquiv.trans_apply,
  WithLp.linearEquiv_symm_apply, PiLp.equiv_symm_single, LinearIsometryEquiv.coe_toLinearEquiv] at h ⊢
rw [h]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b b' : OrthonormalBasis ι 𝕜 E
h :
  (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b =
    (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b'
⊢ ↑(LinearEquiv.symm b.repr.toLinearEquiv) = ↑(LinearEquiv.symm b'.repr.toLinearEquiv)
[PROOFSTEP]
rw [← LinearMap.cancel_right (PiLp.linearEquiv 2 𝕜 (fun _ => 𝕜)).symm.surjective]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b b' : OrthonormalBasis ι 𝕜 E
h :
  (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b =
    (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b'
⊢ LinearMap.comp ↑(LinearEquiv.symm b.repr.toLinearEquiv) ↑(LinearEquiv.symm (PiLp.linearEquiv 2 𝕜 fun x => 𝕜)) =
    LinearMap.comp ↑(LinearEquiv.symm b'.repr.toLinearEquiv) ↑(LinearEquiv.symm (PiLp.linearEquiv 2 𝕜 fun x => 𝕜))
[PROOFSTEP]
simp only [LinearIsometryEquiv.toLinearEquiv_symm]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b b' : OrthonormalBasis ι 𝕜 E
h :
  (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b =
    (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b'
⊢ LinearMap.comp ↑(LinearIsometryEquiv.symm b.repr).toLinearEquiv
      ↑(LinearEquiv.symm (PiLp.linearEquiv 2 𝕜 fun x => 𝕜)) =
    LinearMap.comp ↑(LinearIsometryEquiv.symm b'.repr).toLinearEquiv
      ↑(LinearEquiv.symm (PiLp.linearEquiv 2 𝕜 fun x => 𝕜))
[PROOFSTEP]
refine LinearMap.pi_ext fun i k => ?_
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b b' : OrthonormalBasis ι 𝕜 E
h :
  (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b =
    (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b'
i : ι
k : 𝕜
⊢ ↑(LinearMap.comp ↑(LinearIsometryEquiv.symm b.repr).toLinearEquiv
          ↑(LinearEquiv.symm (PiLp.linearEquiv 2 𝕜 fun x => 𝕜)))
      (Pi.single i k) =
    ↑(LinearMap.comp ↑(LinearIsometryEquiv.symm b'.repr).toLinearEquiv
          ↑(LinearEquiv.symm (PiLp.linearEquiv 2 𝕜 fun x => 𝕜)))
      (Pi.single i k)
[PROOFSTEP]
have : k = k • (1 : 𝕜) := by rw [smul_eq_mul, mul_one]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b b' : OrthonormalBasis ι 𝕜 E
h :
  (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b =
    (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b'
i : ι
k : 𝕜
⊢ k = k • 1
[PROOFSTEP]
rw [smul_eq_mul, mul_one]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b b' : OrthonormalBasis ι 𝕜 E
h :
  (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b =
    (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b'
i : ι
k : 𝕜
this : k = k • 1
⊢ ↑(LinearMap.comp ↑(LinearIsometryEquiv.symm b.repr).toLinearEquiv
          ↑(LinearEquiv.symm (PiLp.linearEquiv 2 𝕜 fun x => 𝕜)))
      (Pi.single i k) =
    ↑(LinearMap.comp ↑(LinearIsometryEquiv.symm b'.repr).toLinearEquiv
          ↑(LinearEquiv.symm (PiLp.linearEquiv 2 𝕜 fun x => 𝕜)))
      (Pi.single i k)
[PROOFSTEP]
rw [this, Pi.single_smul]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b b' : OrthonormalBasis ι 𝕜 E
h :
  (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b =
    (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b'
i : ι
k : 𝕜
this : k = k • 1
⊢ ↑(LinearMap.comp ↑(LinearIsometryEquiv.symm b.repr).toLinearEquiv
          ↑(LinearEquiv.symm (PiLp.linearEquiv 2 𝕜 fun x => 𝕜)))
      (k • Pi.single i 1) =
    ↑(LinearMap.comp ↑(LinearIsometryEquiv.symm b'.repr).toLinearEquiv
          ↑(LinearEquiv.symm (PiLp.linearEquiv 2 𝕜 fun x => 𝕜)))
      (k • Pi.single i 1)
[PROOFSTEP]
replace h := congr_fun h i
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b b' : OrthonormalBasis ι 𝕜 E
i : ι
k : 𝕜
this : k = k • 1
h :
  (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b i =
    (fun b i => ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)) b' i
⊢ ↑(LinearMap.comp ↑(LinearIsometryEquiv.symm b.repr).toLinearEquiv
          ↑(LinearEquiv.symm (PiLp.linearEquiv 2 𝕜 fun x => 𝕜)))
      (k • Pi.single i 1) =
    ↑(LinearMap.comp ↑(LinearIsometryEquiv.symm b'.repr).toLinearEquiv
          ↑(LinearEquiv.symm (PiLp.linearEquiv 2 𝕜 fun x => 𝕜)))
      (k • Pi.single i 1)
[PROOFSTEP]
simp only [LinearEquiv.comp_coe, SMulHomClass.map_smul, LinearEquiv.coe_coe, LinearEquiv.trans_apply,
  WithLp.linearEquiv_symm_apply, PiLp.equiv_symm_single, LinearIsometryEquiv.coe_toLinearEquiv] at h ⊢
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b b' : OrthonormalBasis ι 𝕜 E
i : ι
k : 𝕜
this : k = k • 1
h :
  ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1) =
    ↑(LinearIsometryEquiv.symm b'.repr) (EuclideanSpace.single i 1)
⊢ k • ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1) =
    k • ↑(LinearIsometryEquiv.symm b'.repr) (EuclideanSpace.single i 1)
[PROOFSTEP]
rw [h]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
e : E ≃ₗᵢ[𝕜] EuclideanSpace 𝕜 ι
⊢ ↑{ repr := e } = fun i => ↑(LinearIsometryEquiv.symm e) (EuclideanSpace.single i 1)
[PROOFSTEP]
dsimp only [FunLike.coe]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
e : E ≃ₗᵢ[𝕜] EuclideanSpace 𝕜 ι
⊢ (fun i => EquivLike.coe (LinearIsometryEquiv.symm e) (EuclideanSpace.single i 1)) = fun i =>
    EquivLike.coe (LinearIsometryEquiv.symm e) (EuclideanSpace.single i 1)
[PROOFSTEP]
funext
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
e : E ≃ₗᵢ[𝕜] EuclideanSpace 𝕜 ι
x✝ : ι
⊢ EquivLike.coe (LinearIsometryEquiv.symm e) (EuclideanSpace.single x✝ 1) =
    EquivLike.coe (LinearIsometryEquiv.symm e) (EuclideanSpace.single x✝ 1)
[PROOFSTEP]
congr!
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
b : OrthonormalBasis ι 𝕜 E
i : ι
⊢ ↑(LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1) = ↑b i
[PROOFSTEP]
dsimp only [FunLike.coe]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
b : OrthonormalBasis ι 𝕜 E
i : ι
⊢ EquivLike.coe (LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1) =
    EquivLike.coe (LinearIsometryEquiv.symm b.repr) (EuclideanSpace.single i 1)
[PROOFSTEP]
congr!
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
b : OrthonormalBasis ι 𝕜 E
i : ι
⊢ ↑b.repr (↑b i) = EuclideanSpace.single i 1
[PROOFSTEP]
rw [← b.repr_symm_single i, LinearIsometryEquiv.apply_symm_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
v : E
i : ι
⊢ ↑b.repr v i = inner (↑b i) v
[PROOFSTEP]
classical
rw [← b.repr.inner_map_map (b i) v, b.repr_self i, EuclideanSpace.inner_single_left]
simp only [one_mul, eq_self_iff_true, map_one]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
v : E
i : ι
⊢ ↑b.repr v i = inner (↑b i) v
[PROOFSTEP]
rw [← b.repr.inner_map_map (b i) v, b.repr_self i, EuclideanSpace.inner_single_left]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
v : E
i : ι
⊢ ↑b.repr v i = ↑(starRingEnd 𝕜) 1 * ↑b.repr v i
[PROOFSTEP]
simp only [one_mul, eq_self_iff_true, map_one]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
⊢ Orthonormal 𝕜 ↑b
[PROOFSTEP]
classical
rw [orthonormal_iff_ite]
intro i j
rw [← b.repr.inner_map_map (b i) (b j), b.repr_self i, b.repr_self j, EuclideanSpace.inner_single_left,
  EuclideanSpace.single_apply, map_one, one_mul]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
⊢ Orthonormal 𝕜 ↑b
[PROOFSTEP]
rw [orthonormal_iff_ite]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
⊢ ∀ (i j : ι), inner (↑b i) (↑b j) = if i = j then 1 else 0
[PROOFSTEP]
intro i j
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
i j : ι
⊢ inner (↑b i) (↑b j) = if i = j then 1 else 0
[PROOFSTEP]
rw [← b.repr.inner_map_map (b i) (b j), b.repr_self i, b.repr_self j, EuclideanSpace.inner_single_left,
  EuclideanSpace.single_apply, map_one, one_mul]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
⊢ ↑(OrthonormalBasis.toBasis b) = ↑b
[PROOFSTEP]
rw [OrthonormalBasis.toBasis]
  -- Porting note: was `change`
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
⊢ ↑(Basis.ofEquivFun b.repr.toLinearEquiv) = ↑b
[PROOFSTEP]
ext j
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
j : ι
⊢ ↑(Basis.ofEquivFun b.repr.toLinearEquiv) j = ↑b j
[PROOFSTEP]
classical
rw [Basis.coe_ofEquivFun]
congr
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
j : ι
⊢ ↑(Basis.ofEquivFun b.repr.toLinearEquiv) j = ↑b j
[PROOFSTEP]
rw [Basis.coe_ofEquivFun]
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
j : ι
⊢ (fun i => ↑(LinearEquiv.symm b.repr.toLinearEquiv) (update 0 i 1)) j = ↑b j
[PROOFSTEP]
congr
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
x : E
i : ι
⊢ ↑(↑(OrthonormalBasis.toBasis b).repr x) i = ↑b.repr x i
[PROOFSTEP]
rw [← Basis.equivFun_apply, OrthonormalBasis.coe_toBasis_repr, LinearIsometryEquiv.coe_toLinearEquiv]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
x : E
⊢ ∑ i : ι, ↑b.repr x i • ↑b i = x
[PROOFSTEP]
simp_rw [← b.coe_toBasis_repr_apply, ← b.coe_toBasis]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
x : E
⊢ ∑ x_1 : ι, ↑(↑(OrthonormalBasis.toBasis b).repr x) x_1 • ↑(OrthonormalBasis.toBasis b) x_1 = x
[PROOFSTEP]
exact b.toBasis.sum_repr x
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
v : EuclideanSpace 𝕜 ι
⊢ ∑ i : ι, v i • ↑b i = ↑(LinearIsometryEquiv.symm b.repr) v
[PROOFSTEP]
simpa using (b.toBasis.equivFun_symm_apply v).symm
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
x y : E
⊢ ∑ i : ι, inner x (↑b i) * inner (↑b i) y = inner x y
[PROOFSTEP]
have := congr_arg (innerSL 𝕜 x) (b.sum_repr y)
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
x y : E
this : ↑(↑(innerSL 𝕜) x) (∑ i : ι, ↑b.repr y i • ↑b i) = ↑(↑(innerSL 𝕜) x) y
⊢ ∑ i : ι, inner x (↑b i) * inner (↑b i) y = inner x y
[PROOFSTEP]
rw [map_sum] at this
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
x y : E
this : ∑ x_1 : ι, ↑(↑(innerSL 𝕜) x) (↑b.repr y x_1 • ↑b x_1) = ↑(↑(innerSL 𝕜) x) y
⊢ ∑ i : ι, inner x (↑b i) * inner (↑b i) y = inner x y
[PROOFSTEP]
convert this
[GOAL]
case h.e'_2.a
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
x y : E
this : ∑ x_1 : ι, ↑(↑(innerSL 𝕜) x) (↑b.repr y x_1 • ↑b x_1) = ↑(↑(innerSL 𝕜) x) y
x✝ : ι
a✝ : x✝ ∈ Finset.univ
⊢ inner x (↑b x✝) * inner (↑b x✝) y = ↑(↑(innerSL 𝕜) x) (↑b.repr y x✝ • ↑b x✝)
[PROOFSTEP]
rw [SMulHomClass.map_smul, b.repr_apply_apply, mul_comm]
[GOAL]
case h.e'_2.a
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
b : OrthonormalBasis ι 𝕜 E
x y : E
this : ∑ x_1 : ι, ↑(↑(innerSL 𝕜) x) (↑b.repr y x_1 • ↑b x_1) = ↑(↑(innerSL 𝕜) x) y
x✝ : ι
a✝ : x✝ ∈ Finset.univ
⊢ inner (↑b x✝) y * inner x (↑b x✝) = inner (↑b x✝) y • ↑(↑(innerSL 𝕜) x) (↑b x✝)
[PROOFSTEP]
simp only [innerSL_apply, smul_eq_mul]
  -- Porting note: was `rfl`
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
U : Submodule 𝕜 E
inst✝ : CompleteSpace { x // x ∈ U }
b : OrthonormalBasis ι 𝕜 { x // x ∈ U }
x : E
⊢ ↑(orthogonalProjection U) x = ∑ i : ι, inner (↑(↑b i)) x • ↑b i
[PROOFSTEP]
simpa only [b.repr_apply_apply, inner_orthogonalProjection_eq_of_mem_left] using
  (b.sum_repr (orthogonalProjection U x)).symm
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : Basis ι 𝕜 E
hv : Orthonormal 𝕜 ↑v
⊢ ∀ (x y : E), inner (↑(Basis.equivFun v) x) (↑(Basis.equivFun v) y) = inner x y
[PROOFSTEP]
intro x y
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : Basis ι 𝕜 E
hv : Orthonormal 𝕜 ↑v
x y : E
⊢ inner (↑(Basis.equivFun v) x) (↑(Basis.equivFun v) y) = inner x y
[PROOFSTEP]
let p : EuclideanSpace 𝕜 ι := v.equivFun x
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : Basis ι 𝕜 E
hv : Orthonormal 𝕜 ↑v
x y : E
p : EuclideanSpace 𝕜 ι := ↑(Basis.equivFun v) x
⊢ inner (↑(Basis.equivFun v) x) (↑(Basis.equivFun v) y) = inner x y
[PROOFSTEP]
let q : EuclideanSpace 𝕜 ι := v.equivFun y
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : Basis ι 𝕜 E
hv : Orthonormal 𝕜 ↑v
x y : E
p : EuclideanSpace 𝕜 ι := ↑(Basis.equivFun v) x
q : EuclideanSpace 𝕜 ι := ↑(Basis.equivFun v) y
⊢ inner (↑(Basis.equivFun v) x) (↑(Basis.equivFun v) y) = inner x y
[PROOFSTEP]
have key : ⟪p, q⟫ = ⟪∑ i, p i • v i, ∑ i, q i • v i⟫ := by simp [sum_inner, inner_smul_left, hv.inner_right_fintype]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : Basis ι 𝕜 E
hv : Orthonormal 𝕜 ↑v
x y : E
p : EuclideanSpace 𝕜 ι := ↑(Basis.equivFun v) x
q : EuclideanSpace 𝕜 ι := ↑(Basis.equivFun v) y
⊢ inner p q = inner (∑ i : ι, p i • ↑v i) (∑ i : ι, q i • ↑v i)
[PROOFSTEP]
simp [sum_inner, inner_smul_left, hv.inner_right_fintype]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : Basis ι 𝕜 E
hv : Orthonormal 𝕜 ↑v
x y : E
p : EuclideanSpace 𝕜 ι := ↑(Basis.equivFun v) x
q : EuclideanSpace 𝕜 ι := ↑(Basis.equivFun v) y
key : inner p q = inner (∑ i : ι, p i • ↑v i) (∑ i : ι, q i • ↑v i)
⊢ inner (↑(Basis.equivFun v) x) (↑(Basis.equivFun v) y) = inner x y
[PROOFSTEP]
convert key
[GOAL]
case h.e'_3.h.e'_4
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : Basis ι 𝕜 E
hv : Orthonormal 𝕜 ↑v
x y : E
p : EuclideanSpace 𝕜 ι := ↑(Basis.equivFun v) x
q : EuclideanSpace 𝕜 ι := ↑(Basis.equivFun v) y
key : inner p q = inner (∑ i : ι, p i • ↑v i) (∑ i : ι, q i • ↑v i)
⊢ x = ∑ i : ι, p i • ↑v i
[PROOFSTEP]
rw [← v.equivFun.symm_apply_apply x, v.equivFun_symm_apply]
[GOAL]
case h.e'_3.h.e'_5
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : Basis ι 𝕜 E
hv : Orthonormal 𝕜 ↑v
x y : E
p : EuclideanSpace 𝕜 ι := ↑(Basis.equivFun v) x
q : EuclideanSpace 𝕜 ι := ↑(Basis.equivFun v) y
key : inner p q = inner (∑ i : ι, p i • ↑v i) (∑ i : ι, q i • ↑v i)
⊢ y = ∑ i : ι, q i • ↑v i
[PROOFSTEP]
rw [← v.equivFun.symm_apply_apply y, v.equivFun_symm_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : Basis ι 𝕜 E
hv : Orthonormal 𝕜 ↑v
⊢ OrthonormalBasis.toBasis (Basis.toOrthonormalBasis v hv) = v
[PROOFSTEP]
simp [Basis.toOrthonormalBasis, OrthonormalBasis.toBasis]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : Basis ι 𝕜 E
hv : Orthonormal 𝕜 ↑v
⊢ ↑(Basis.toOrthonormalBasis v hv) = ↑(OrthonormalBasis.toBasis (Basis.toOrthonormalBasis v hv))
[PROOFSTEP]
classical rw [OrthonormalBasis.coe_toBasis]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : Basis ι 𝕜 E
hv : Orthonormal 𝕜 ↑v
⊢ ↑(Basis.toOrthonormalBasis v hv) = ↑(OrthonormalBasis.toBasis (Basis.toOrthonormalBasis v hv))
[PROOFSTEP]
rw [OrthonormalBasis.coe_toBasis]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : Basis ι 𝕜 E
hv : Orthonormal 𝕜 ↑v
⊢ ↑(OrthonormalBasis.toBasis (Basis.toOrthonormalBasis v hv)) = ↑v
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : ι → E
hon : Orthonormal 𝕜 v
hsp : ⊤ ≤ span 𝕜 (range v)
⊢ Orthonormal 𝕜 ↑(Basis.mk (_ : LinearIndependent 𝕜 v) hsp)
[PROOFSTEP]
rwa [Basis.coe_mk]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : ι → E
hon : Orthonormal 𝕜 v
hsp : ⊤ ≤ span 𝕜 (range v)
⊢ ↑(OrthonormalBasis.mk hon hsp) = v
[PROOFSTEP]
classical rw [OrthonormalBasis.mk, _root_.Basis.coe_toOrthonormalBasis, Basis.coe_mk]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : ι → E
hon : Orthonormal 𝕜 v
hsp : ⊤ ≤ span 𝕜 (range v)
⊢ ↑(OrthonormalBasis.mk hon hsp) = v
[PROOFSTEP]
rw [OrthonormalBasis.mk, _root_.Basis.coe_toOrthonormalBasis, Basis.coe_mk]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : ι → E
inst✝ : DecidableEq E
v' : ι' → E
h : Orthonormal 𝕜 v'
s : Finset ι'
e₀' : Basis { x // x ∈ s } 𝕜 { x // x ∈ span 𝕜 (range (v' ∘ Subtype.val)) } :=
  Basis.span (_ : LinearIndependent 𝕜 (v' ∘ Subtype.val))
⊢ Orthonormal 𝕜 ↑e₀'
[PROOFSTEP]
convert orthonormal_span (h.comp ((↑) : s → ι') Subtype.val_injective)
[GOAL]
case h.e'_7.h.h.e'_3
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : ι → E
inst✝ : DecidableEq E
v' : ι' → E
h : Orthonormal 𝕜 v'
s : Finset ι'
e₀' : Basis { x // x ∈ s } 𝕜 { x // x ∈ span 𝕜 (range (v' ∘ Subtype.val)) } :=
  Basis.span (_ : LinearIndependent 𝕜 (v' ∘ Subtype.val))
x✝ : { x // x ∈ s }
⊢ ↑(↑e₀' x✝) = (v' ∘ Subtype.val) x✝
[PROOFSTEP]
simp [Basis.span_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : ι → E
inst✝ : DecidableEq E
v' : ι' → E
h : Orthonormal 𝕜 v'
s : Finset ι'
e₀' : Basis { x // x ∈ s } 𝕜 { x // x ∈ span 𝕜 (range (v' ∘ Subtype.val)) } :=
  Basis.span (_ : LinearIndependent 𝕜 (v' ∘ Subtype.val))
e₀ : OrthonormalBasis { x // x ∈ s } 𝕜 { x // x ∈ span 𝕜 (range (v' ∘ Subtype.val)) } :=
  OrthonormalBasis.mk (_ : Orthonormal 𝕜 ↑e₀') (_ : ⊤ ≤ span 𝕜 (range ↑e₀'))
⊢ span 𝕜 ↑(Finset.image v' s) = span 𝕜 (range (v' ∘ Subtype.val))
[PROOFSTEP]
rw [Finset.coe_image, image_eq_range]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : ι → E
inst✝ : DecidableEq E
v' : ι' → E
h : Orthonormal 𝕜 v'
s : Finset ι'
e₀' : Basis { x // x ∈ s } 𝕜 { x // x ∈ span 𝕜 (range (v' ∘ Subtype.val)) } :=
  Basis.span (_ : LinearIndependent 𝕜 (v' ∘ Subtype.val))
e₀ : OrthonormalBasis { x // x ∈ s } 𝕜 { x // x ∈ span 𝕜 (range (v' ∘ Subtype.val)) } :=
  OrthonormalBasis.mk (_ : Orthonormal 𝕜 ↑e₀') (_ : ⊤ ≤ span 𝕜 (range ↑e₀'))
⊢ span 𝕜 (range fun x => v' ↑x) = span 𝕜 (range (v' ∘ Subtype.val))
[PROOFSTEP]
rfl
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : ι → E
inst✝ : DecidableEq E
v' : ι' → E
h : Orthonormal 𝕜 v'
s : Finset ι'
i : { x // x ∈ s }
⊢ ↑(↑(OrthonormalBasis.span h s) i) = v' ↑i
[PROOFSTEP]
simp only [OrthonormalBasis.span, Basis.span_apply, LinearIsometryEquiv.ofEq_symm, OrthonormalBasis.map_apply,
  OrthonormalBasis.coe_mk, LinearIsometryEquiv.coe_ofEq_apply, comp_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : ι → E
hon : Orthonormal 𝕜 v
hsp : (span 𝕜 (range v))ᗮ = ⊥
⊢ ⊤ ≤ span 𝕜 (range v)
[PROOFSTEP]
refine' Eq.ge _
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : ι → E
hon : Orthonormal 𝕜 v
hsp : (span 𝕜 (range v))ᗮ = ⊥
⊢ span 𝕜 (range v) = ⊤
[PROOFSTEP]
haveI : FiniteDimensional 𝕜 (span 𝕜 (range v)) := FiniteDimensional.span_of_finite 𝕜 (finite_range v)
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : ι → E
hon : Orthonormal 𝕜 v
hsp : (span 𝕜 (range v))ᗮ = ⊥
this : FiniteDimensional 𝕜 { x // x ∈ span 𝕜 (range v) }
⊢ span 𝕜 (range v) = ⊤
[PROOFSTEP]
haveI : CompleteSpace (span 𝕜 (range v)) := FiniteDimensional.complete 𝕜 _
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : ι → E
hon : Orthonormal 𝕜 v
hsp : (span 𝕜 (range v))ᗮ = ⊥
this✝ : FiniteDimensional 𝕜 { x // x ∈ span 𝕜 (range v) }
this : CompleteSpace { x // x ∈ span 𝕜 (range v) }
⊢ span 𝕜 (range v) = ⊤
[PROOFSTEP]
rwa [orthogonal_eq_bot_iff] at hsp
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : ι → E
inst✝ : Fintype ι'
b : OrthonormalBasis ι 𝕜 E
e : ι ≃ ι'
i' : ι'
⊢ ↑(reindex b e) i' = ↑b (↑e.symm i')
[PROOFSTEP]
classical
dsimp [reindex]
rw [coe_ofRepr]
dsimp
rw [← b.repr_symm_single, LinearIsometryEquiv.piLpCongrLeft_symm, EuclideanSpace.piLpCongrLeft_single]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : ι → E
inst✝ : Fintype ι'
b : OrthonormalBasis ι 𝕜 E
e : ι ≃ ι'
i' : ι'
⊢ ↑(reindex b e) i' = ↑b (↑e.symm i')
[PROOFSTEP]
dsimp [reindex]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : ι → E
inst✝ : Fintype ι'
b : OrthonormalBasis ι 𝕜 E
e : ι ≃ ι'
i' : ι'
⊢ ↑{ repr := LinearIsometryEquiv.trans b.repr (LinearIsometryEquiv.piLpCongrLeft 2 𝕜 𝕜 e) } i' = ↑b (↑e.symm i')
[PROOFSTEP]
rw [coe_ofRepr]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : ι → E
inst✝ : Fintype ι'
b : OrthonormalBasis ι 𝕜 E
e : ι ≃ ι'
i' : ι'
⊢ (fun i =>
        ↑(LinearIsometryEquiv.symm (LinearIsometryEquiv.trans b.repr (LinearIsometryEquiv.piLpCongrLeft 2 𝕜 𝕜 e)))
          (EuclideanSpace.single i 1))
      i' =
    ↑b (↑e.symm i')
[PROOFSTEP]
dsimp
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : ι → E
inst✝ : Fintype ι'
b : OrthonormalBasis ι 𝕜 E
e : ι ≃ ι'
i' : ι'
⊢ ↑(LinearIsometryEquiv.symm b.repr)
      (↑(LinearIsometryEquiv.symm (LinearIsometryEquiv.piLpCongrLeft 2 𝕜 𝕜 e)) (EuclideanSpace.single i' 1)) =
    ↑b (↑e.symm i')
[PROOFSTEP]
rw [← b.repr_symm_single, LinearIsometryEquiv.piLpCongrLeft_symm, EuclideanSpace.piLpCongrLeft_single]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : ι → E
inst✝ : Fintype ι'
b : OrthonormalBasis ι 𝕜 E
e : ι ≃ ι'
x : E
i' : ι'
⊢ ↑(reindex b e).repr x i' = ↑b.repr x (↑e.symm i')
[PROOFSTEP]
classical rw [OrthonormalBasis.repr_apply_apply, b.repr_apply_apply, OrthonormalBasis.coe_reindex, comp_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : ι → E
inst✝ : Fintype ι'
b : OrthonormalBasis ι 𝕜 E
e : ι ≃ ι'
x : E
i' : ι'
⊢ ↑(reindex b e).repr x i' = ↑b.repr x (↑e.symm i')
[PROOFSTEP]
rw [OrthonormalBasis.repr_apply_apply, b.repr_apply_apply, OrthonormalBasis.coe_reindex, comp_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
⊢ Orthonormal ℝ ↑basisOneI
[PROOFSTEP]
rw [orthonormal_iff_ite]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
⊢ ∀ (i j : Fin 2), inner (↑basisOneI i) (↑basisOneI j) = if i = j then 1 else 0
[PROOFSTEP]
intro i
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
i : Fin 2
⊢ ∀ (j : Fin 2), inner (↑basisOneI i) (↑basisOneI j) = if i = j then 1 else 0
[PROOFSTEP]
fin_cases i
[GOAL]
case head
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
⊢ ∀ (j : Fin 2),
    inner (↑basisOneI { val := 0, isLt := (_ : 0 < 2) }) (↑basisOneI j) =
      if { val := 0, isLt := (_ : 0 < 2) } = j then 1 else 0
[PROOFSTEP]
intro j
[GOAL]
case tail.head
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
⊢ ∀ (j : Fin 2),
    inner (↑basisOneI { val := 1, isLt := (_ : (fun a => a < 2) 1) }) (↑basisOneI j) =
      if { val := 1, isLt := (_ : (fun a => a < 2) 1) } = j then 1 else 0
[PROOFSTEP]
intro j
[GOAL]
case head
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
j : Fin 2
⊢ inner (↑basisOneI { val := 0, isLt := (_ : 0 < 2) }) (↑basisOneI j) =
    if { val := 0, isLt := (_ : 0 < 2) } = j then 1 else 0
[PROOFSTEP]
fin_cases j
[GOAL]
case tail.head
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
j : Fin 2
⊢ inner (↑basisOneI { val := 1, isLt := (_ : (fun a => a < 2) 1) }) (↑basisOneI j) =
    if { val := 1, isLt := (_ : (fun a => a < 2) 1) } = j then 1 else 0
[PROOFSTEP]
fin_cases j
[GOAL]
case head.head
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
⊢ inner (↑basisOneI { val := 0, isLt := (_ : 0 < 2) }) (↑basisOneI { val := 0, isLt := (_ : 0 < 2) }) =
    if { val := 0, isLt := (_ : 0 < 2) } = { val := 0, isLt := (_ : 0 < 2) } then 1 else 0
[PROOFSTEP]
simp [real_inner_eq_re_inner]
[GOAL]
case head.tail.head
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
⊢ inner (↑basisOneI { val := 0, isLt := (_ : 0 < 2) }) (↑basisOneI { val := 1, isLt := (_ : (fun a => a < 2) 1) }) =
    if { val := 0, isLt := (_ : 0 < 2) } = { val := 1, isLt := (_ : (fun a => a < 2) 1) } then 1 else 0
[PROOFSTEP]
simp [real_inner_eq_re_inner]
[GOAL]
case tail.head.head
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
⊢ inner (↑basisOneI { val := 1, isLt := (_ : (fun a => a < 2) 1) }) (↑basisOneI { val := 0, isLt := (_ : 0 < 2) }) =
    if { val := 1, isLt := (_ : (fun a => a < 2) 1) } = { val := 0, isLt := (_ : 0 < 2) } then 1 else 0
[PROOFSTEP]
simp [real_inner_eq_re_inner]
[GOAL]
case tail.head.tail.head
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
⊢ inner (↑basisOneI { val := 1, isLt := (_ : (fun a => a < 2) 1) })
      (↑basisOneI { val := 1, isLt := (_ : (fun a => a < 2) 1) }) =
    if { val := 1, isLt := (_ : (fun a => a < 2) 1) } = { val := 1, isLt := (_ : (fun a => a < 2) 1) } then 1 else 0
[PROOFSTEP]
simp [real_inner_eq_re_inner]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
⊢ ↑orthonormalBasisOneI = ![1, I]
[PROOFSTEP]
simp [Complex.orthonormalBasisOneI]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : OrthonormalBasis (Fin 2) ℝ F
f : F ≃ₗᵢ[ℝ] F'
⊢ isometryOfOrthonormal (OrthonormalBasis.map v f) = LinearIsometryEquiv.trans (isometryOfOrthonormal v) f
[PROOFSTEP]
simp [Complex.isometryOfOrthonormal, LinearIsometryEquiv.trans_assoc, OrthonormalBasis.map]
  -- Porting note: `LinearIsometryEquiv.trans_assoc` doesn't trigger in the `simp` above
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : OrthonormalBasis (Fin 2) ℝ F
f : F ≃ₗᵢ[ℝ] F'
⊢ LinearIsometryEquiv.trans orthonormalBasisOneI.repr (LinearIsometryEquiv.trans (LinearIsometryEquiv.symm v.repr) f) =
    LinearIsometryEquiv.trans (LinearIsometryEquiv.trans orthonormalBasisOneI.repr (LinearIsometryEquiv.symm v.repr)) f
[PROOFSTEP]
rw [LinearIsometryEquiv.trans_assoc]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : OrthonormalBasis (Fin 2) ℝ F
f : F
⊢ ↑(LinearIsometryEquiv.symm (isometryOfOrthonormal v)) f =
    ↑(↑(Basis.coord (OrthonormalBasis.toBasis v) 0) f) + ↑(↑(Basis.coord (OrthonormalBasis.toBasis v) 1) f) * I
[PROOFSTEP]
simp [Complex.isometryOfOrthonormal]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : OrthonormalBasis (Fin 2) ℝ F
z : ℂ
⊢ ↑(isometryOfOrthonormal v) z = z.re • ↑v 0 + z.im • ↑v 1
[PROOFSTEP]
rw [Complex.isometryOfOrthonormal, LinearIsometryEquiv.trans_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : IsROrC 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
v : OrthonormalBasis (Fin 2) ℝ F
z : ℂ
⊢ ↑(LinearIsometryEquiv.symm v.repr) (↑orthonormalBasisOneI.repr z) = z.re • ↑v 0 + z.im • ↑v 1
[PROOFSTEP]
simp [← v.sum_repr_symm]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
a b : OrthonormalBasis ι 𝕜 E
⊢ Basis.toMatrix (OrthonormalBasis.toBasis a) ↑b ∈ Matrix.unitaryGroup ι 𝕜
[PROOFSTEP]
rw [Matrix.mem_unitaryGroup_iff']
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
a b : OrthonormalBasis ι 𝕜 E
⊢ star (Basis.toMatrix (OrthonormalBasis.toBasis a) ↑b) * Basis.toMatrix (OrthonormalBasis.toBasis a) ↑b = 1
[PROOFSTEP]
ext i j
[GOAL]
case a.h
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
a b : OrthonormalBasis ι 𝕜 E
i j : ι
⊢ (star (Basis.toMatrix (OrthonormalBasis.toBasis a) ↑b) * Basis.toMatrix (OrthonormalBasis.toBasis a) ↑b) i j =
    OfNat.ofNat 1 i j
[PROOFSTEP]
convert a.repr.inner_map_map (b i) (b j)
[GOAL]
case h.e'_3
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
a b : OrthonormalBasis ι 𝕜 E
i j : ι
⊢ OfNat.ofNat 1 i j = inner (↑b i) (↑b j)
[PROOFSTEP]
rw [orthonormal_iff_ite.mp b.orthonormal i j]
[GOAL]
case h.e'_3
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
a b : OrthonormalBasis ι 𝕜 E
i j : ι
⊢ OfNat.ofNat 1 i j = if i = j then 1 else 0
[PROOFSTEP]
rfl
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
a b : OrthonormalBasis ι 𝕜 E
⊢ ‖↑(Basis.det (OrthonormalBasis.toBasis a)) ↑b‖ = 1
[PROOFSTEP]
have : (normSq (a.toBasis.det b) : 𝕜) = 1 := by
  simpa [IsROrC.mul_conj] using (Matrix.det_of_mem_unitary (a.toMatrix_orthonormalBasis_mem_unitary b)).2
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
a b : OrthonormalBasis ι 𝕜 E
⊢ ↑(↑normSq (↑(Basis.det (OrthonormalBasis.toBasis a)) ↑b)) = 1
[PROOFSTEP]
simpa [IsROrC.mul_conj] using (Matrix.det_of_mem_unitary (a.toMatrix_orthonormalBasis_mem_unitary b)).2
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
a b : OrthonormalBasis ι 𝕜 E
this : ↑(↑normSq (↑(Basis.det (OrthonormalBasis.toBasis a)) ↑b)) = 1
⊢ ‖↑(Basis.det (OrthonormalBasis.toBasis a)) ↑b‖ = 1
[PROOFSTEP]
norm_cast at this
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
a b : OrthonormalBasis ι 𝕜 E
this : ↑normSq (↑(Basis.det (OrthonormalBasis.toBasis a)) ↑b) = 1
⊢ ‖↑(Basis.det (OrthonormalBasis.toBasis a)) ↑b‖ = 1
[PROOFSTEP]
rwa [← sqrt_normSq_eq_norm, sqrt_eq_one]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
a b : OrthonormalBasis ι ℝ F
⊢ ↑(Basis.det (OrthonormalBasis.toBasis a)) ↑b = 1 ∨ ↑(Basis.det (OrthonormalBasis.toBasis a)) ↑b = -1
[PROOFSTEP]
rw [← sq_eq_one_iff]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
a b : OrthonormalBasis ι ℝ F
⊢ ↑(Basis.det (OrthonormalBasis.toBasis a)) ↑b ^ 2 = 1
[PROOFSTEP]
simpa [unitary, sq] using Matrix.det_of_mem_unitary (a.toMatrix_orthonormalBasis_mem_unitary b)
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ A i }) fun i => subtypeₗᵢ (A i)
inst✝¹ : DecidableEq ι
hV_sum : IsInternal fun i => A i
α : ι → Type u_8
inst✝ : (i : ι) → Fintype (α i)
v_family : (i : ι) → OrthonormalBasis (α i) 𝕜 { x // x ∈ A i }
⊢ Orthonormal 𝕜 ↑(collectedBasis hV_sum fun i => OrthonormalBasis.toBasis (v_family i))
[PROOFSTEP]
simpa using hV.orthonormal_sigma_orthonormal (show ∀ i, Orthonormal 𝕜 (v_family i).toBasis by simp)
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ A i }) fun i => subtypeₗᵢ (A i)
inst✝¹ : DecidableEq ι
hV_sum : IsInternal fun i => A i
α : ι → Type u_8
inst✝ : (i : ι) → Fintype (α i)
v_family : (i : ι) → OrthonormalBasis (α i) 𝕜 { x // x ∈ A i }
⊢ ∀ (i : ι), Orthonormal 𝕜 ↑(OrthonormalBasis.toBasis (v_family i))
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι
v✝ : Set E
A : ι → Submodule 𝕜 E
inst✝¹ : DecidableEq ι
h : IsInternal A
α : ι → Type u_8
inst✝ : (i : ι) → Fintype (α i)
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ A i }) fun i => subtypeₗᵢ (A i)
v : (i : ι) → OrthonormalBasis (α i) 𝕜 { x // x ∈ A i }
a : (i : ι) × α i
⊢ ↑(collectedOrthonormalBasis hV h v) a ∈ A a.fst
[PROOFSTEP]
simp [DirectSum.IsInternal.collectedOrthonormalBasis]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
⊢ ∃ u b, v ⊆ ↑u ∧ ↑b = Subtype.val
[PROOFSTEP]
obtain ⟨u₀, hu₀s, hu₀, hu₀_max⟩ := exists_maximal_orthonormal hv
[GOAL]
case intro.intro.intro
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
u₀ : Set E
hu₀s : u₀ ⊇ v
hu₀ : Orthonormal 𝕜 Subtype.val
hu₀_max : ∀ (u : Set E), u ⊇ u₀ → Orthonormal 𝕜 Subtype.val → u = u₀
⊢ ∃ u b, v ⊆ ↑u ∧ ↑b = Subtype.val
[PROOFSTEP]
rw [maximal_orthonormal_iff_orthogonalComplement_eq_bot hu₀] at hu₀_max
[GOAL]
case intro.intro.intro
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
u₀ : Set E
hu₀s : u₀ ⊇ v
hu₀ : Orthonormal 𝕜 Subtype.val
hu₀_max : (span 𝕜 u₀)ᗮ = ⊥
⊢ ∃ u b, v ⊆ ↑u ∧ ↑b = Subtype.val
[PROOFSTEP]
have hu₀_finite : u₀.Finite := hu₀.linearIndependent.finite
[GOAL]
case intro.intro.intro
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
u₀ : Set E
hu₀s : u₀ ⊇ v
hu₀ : Orthonormal 𝕜 Subtype.val
hu₀_max : (span 𝕜 u₀)ᗮ = ⊥
hu₀_finite : Set.Finite u₀
⊢ ∃ u b, v ⊆ ↑u ∧ ↑b = Subtype.val
[PROOFSTEP]
let u : Finset E := hu₀_finite.toFinset
[GOAL]
case intro.intro.intro
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
u₀ : Set E
hu₀s : u₀ ⊇ v
hu₀ : Orthonormal 𝕜 Subtype.val
hu₀_max : (span 𝕜 u₀)ᗮ = ⊥
hu₀_finite : Set.Finite u₀
u : Finset E := Finite.toFinset hu₀_finite
⊢ ∃ u b, v ⊆ ↑u ∧ ↑b = Subtype.val
[PROOFSTEP]
let fu : ↥u ≃ ↥u₀ := Equiv.cast (congr_arg (↥) hu₀_finite.coe_toFinset)
[GOAL]
case intro.intro.intro
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
u₀ : Set E
hu₀s : u₀ ⊇ v
hu₀ : Orthonormal 𝕜 Subtype.val
hu₀_max : (span 𝕜 u₀)ᗮ = ⊥
hu₀_finite : Set.Finite u₀
u : Finset E := Finite.toFinset hu₀_finite
fu : { x // x ∈ u } ≃ ↑u₀ := Equiv.cast (_ : ↑↑(Finite.toFinset hu₀_finite) = ↑u₀)
⊢ ∃ u b, v ⊆ ↑u ∧ ↑b = Subtype.val
[PROOFSTEP]
have hfu : ((↑) : u → E) = ((↑) : u₀ → E) ∘ fu := by ext; simp
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
u₀ : Set E
hu₀s : u₀ ⊇ v
hu₀ : Orthonormal 𝕜 Subtype.val
hu₀_max : (span 𝕜 u₀)ᗮ = ⊥
hu₀_finite : Set.Finite u₀
u : Finset E := Finite.toFinset hu₀_finite
fu : { x // x ∈ u } ≃ ↑u₀ := Equiv.cast (_ : ↑↑(Finite.toFinset hu₀_finite) = ↑u₀)
⊢ Subtype.val = Subtype.val ∘ ↑fu
[PROOFSTEP]
ext
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
u₀ : Set E
hu₀s : u₀ ⊇ v
hu₀ : Orthonormal 𝕜 Subtype.val
hu₀_max : (span 𝕜 u₀)ᗮ = ⊥
hu₀_finite : Set.Finite u₀
u : Finset E := Finite.toFinset hu₀_finite
fu : { x // x ∈ u } ≃ ↑u₀ := Equiv.cast (_ : ↑↑(Finite.toFinset hu₀_finite) = ↑u₀)
x✝ : { x // x ∈ u }
⊢ ↑x✝ = (Subtype.val ∘ ↑fu) x✝
[PROOFSTEP]
simp
[GOAL]
case intro.intro.intro
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
u₀ : Set E
hu₀s : u₀ ⊇ v
hu₀ : Orthonormal 𝕜 Subtype.val
hu₀_max : (span 𝕜 u₀)ᗮ = ⊥
hu₀_finite : Set.Finite u₀
u : Finset E := Finite.toFinset hu₀_finite
fu : { x // x ∈ u } ≃ ↑u₀ := Equiv.cast (_ : ↑↑(Finite.toFinset hu₀_finite) = ↑u₀)
hfu : Subtype.val = Subtype.val ∘ ↑fu
⊢ ∃ u b, v ⊆ ↑u ∧ ↑b = Subtype.val
[PROOFSTEP]
have hu : Orthonormal 𝕜 ((↑) : u → E) := by simpa [hfu] using hu₀.comp _ fu.injective
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
u₀ : Set E
hu₀s : u₀ ⊇ v
hu₀ : Orthonormal 𝕜 Subtype.val
hu₀_max : (span 𝕜 u₀)ᗮ = ⊥
hu₀_finite : Set.Finite u₀
u : Finset E := Finite.toFinset hu₀_finite
fu : { x // x ∈ u } ≃ ↑u₀ := Equiv.cast (_ : ↑↑(Finite.toFinset hu₀_finite) = ↑u₀)
hfu : Subtype.val = Subtype.val ∘ ↑fu
⊢ Orthonormal 𝕜 Subtype.val
[PROOFSTEP]
simpa [hfu] using hu₀.comp _ fu.injective
[GOAL]
case intro.intro.intro
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
u₀ : Set E
hu₀s : u₀ ⊇ v
hu₀ : Orthonormal 𝕜 Subtype.val
hu₀_max : (span 𝕜 u₀)ᗮ = ⊥
hu₀_finite : Set.Finite u₀
u : Finset E := Finite.toFinset hu₀_finite
fu : { x // x ∈ u } ≃ ↑u₀ := Equiv.cast (_ : ↑↑(Finite.toFinset hu₀_finite) = ↑u₀)
hfu : Subtype.val = Subtype.val ∘ ↑fu
hu : Orthonormal 𝕜 Subtype.val
⊢ ∃ u b, v ⊆ ↑u ∧ ↑b = Subtype.val
[PROOFSTEP]
refine' ⟨u, OrthonormalBasis.mkOfOrthogonalEqBot hu _, _, _⟩
[GOAL]
case intro.intro.intro.refine'_1
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
u₀ : Set E
hu₀s : u₀ ⊇ v
hu₀ : Orthonormal 𝕜 Subtype.val
hu₀_max : (span 𝕜 u₀)ᗮ = ⊥
hu₀_finite : Set.Finite u₀
u : Finset E := Finite.toFinset hu₀_finite
fu : { x // x ∈ u } ≃ ↑u₀ := Equiv.cast (_ : ↑↑(Finite.toFinset hu₀_finite) = ↑u₀)
hfu : Subtype.val = Subtype.val ∘ ↑fu
hu : Orthonormal 𝕜 Subtype.val
⊢ (span 𝕜 (range Subtype.val))ᗮ = ⊥
[PROOFSTEP]
simpa using hu₀_max
[GOAL]
case intro.intro.intro.refine'_2
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
u₀ : Set E
hu₀s : u₀ ⊇ v
hu₀ : Orthonormal 𝕜 Subtype.val
hu₀_max : (span 𝕜 u₀)ᗮ = ⊥
hu₀_finite : Set.Finite u₀
u : Finset E := Finite.toFinset hu₀_finite
fu : { x // x ∈ u } ≃ ↑u₀ := Equiv.cast (_ : ↑↑(Finite.toFinset hu₀_finite) = ↑u₀)
hfu : Subtype.val = Subtype.val ∘ ↑fu
hu : Orthonormal 𝕜 Subtype.val
⊢ v ⊆ ↑u
[PROOFSTEP]
simpa using hu₀s
[GOAL]
case intro.intro.intro.refine'_3
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
u₀ : Set E
hu₀s : u₀ ⊇ v
hu₀ : Orthonormal 𝕜 Subtype.val
hu₀_max : (span 𝕜 u₀)ᗮ = ⊥
hu₀_finite : Set.Finite u₀
u : Finset E := Finite.toFinset hu₀_finite
fu : { x // x ∈ u } ≃ ↑u₀ := Equiv.cast (_ : ↑↑(Finite.toFinset hu₀_finite) = ↑u₀)
hfu : Subtype.val = Subtype.val ∘ ↑fu
hu : Orthonormal 𝕜 Subtype.val
⊢ ↑(OrthonormalBasis.mkOfOrthogonalEqBot hu (_ : (span 𝕜 (range Subtype.val))ᗮ = ⊥)) = Subtype.val
[PROOFSTEP]
simp
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
⊢ ∃ b, ∀ (i : ι), i ∈ s → ↑b i = v i
[PROOFSTEP]
have hsv : Injective (s.restrict v) := hv.linearIndependent.injective
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
⊢ ∃ b, ∀ (i : ι), i ∈ s → ↑b i = v i
[PROOFSTEP]
have hX : Orthonormal 𝕜 ((↑) : Set.range (s.restrict v) → E) := by rwa [orthonormal_subtype_range hsv]
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
⊢ Orthonormal 𝕜 Subtype.val
[PROOFSTEP]
rwa [orthonormal_subtype_range hsv]
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
hX : Orthonormal 𝕜 Subtype.val
⊢ ∃ b, ∀ (i : ι), i ∈ s → ↑b i = v i
[PROOFSTEP]
obtain ⟨Y, b₀, hX, hb₀⟩ := hX.exists_orthonormalBasis_extension
[GOAL]
case intro.intro.intro
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
hX✝ : Orthonormal 𝕜 Subtype.val
Y : Finset E
b₀ : OrthonormalBasis { x // x ∈ Y } 𝕜 E
hX : range (restrict s v) ⊆ ↑Y
hb₀ : ↑b₀ = Subtype.val
⊢ ∃ b, ∀ (i : ι), i ∈ s → ↑b i = v i
[PROOFSTEP]
have hιY : Fintype.card ι = Y.card := by
  refine' card_ι.symm.trans _
  exact FiniteDimensional.finrank_eq_card_finset_basis b₀.toBasis
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
hX✝ : Orthonormal 𝕜 Subtype.val
Y : Finset E
b₀ : OrthonormalBasis { x // x ∈ Y } 𝕜 E
hX : range (restrict s v) ⊆ ↑Y
hb₀ : ↑b₀ = Subtype.val
⊢ Fintype.card ι = Finset.card Y
[PROOFSTEP]
refine' card_ι.symm.trans _
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
hX✝ : Orthonormal 𝕜 Subtype.val
Y : Finset E
b₀ : OrthonormalBasis { x // x ∈ Y } 𝕜 E
hX : range (restrict s v) ⊆ ↑Y
hb₀ : ↑b₀ = Subtype.val
⊢ finrank 𝕜 E = Finset.card Y
[PROOFSTEP]
exact FiniteDimensional.finrank_eq_card_finset_basis b₀.toBasis
[GOAL]
case intro.intro.intro
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
hX✝ : Orthonormal 𝕜 Subtype.val
Y : Finset E
b₀ : OrthonormalBasis { x // x ∈ Y } 𝕜 E
hX : range (restrict s v) ⊆ ↑Y
hb₀ : ↑b₀ = Subtype.val
hιY : Fintype.card ι = Finset.card Y
⊢ ∃ b, ∀ (i : ι), i ∈ s → ↑b i = v i
[PROOFSTEP]
have hvsY : s.MapsTo v Y := (s.mapsTo_image v).mono_right (by rwa [← range_restrict])
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
hX✝ : Orthonormal 𝕜 Subtype.val
Y : Finset E
b₀ : OrthonormalBasis { x // x ∈ Y } 𝕜 E
hX : range (restrict s v) ⊆ ↑Y
hb₀ : ↑b₀ = Subtype.val
hιY : Fintype.card ι = Finset.card Y
⊢ v '' s ⊆ ↑Y
[PROOFSTEP]
rwa [← range_restrict]
[GOAL]
case intro.intro.intro
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
hX✝ : Orthonormal 𝕜 Subtype.val
Y : Finset E
b₀ : OrthonormalBasis { x // x ∈ Y } 𝕜 E
hX : range (restrict s v) ⊆ ↑Y
hb₀ : ↑b₀ = Subtype.val
hιY : Fintype.card ι = Finset.card Y
hvsY : MapsTo v s ↑Y
⊢ ∃ b, ∀ (i : ι), i ∈ s → ↑b i = v i
[PROOFSTEP]
have hsv' : Set.InjOn v s := by
  rw [Set.injOn_iff_injective]
  exact hsv
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
hX✝ : Orthonormal 𝕜 Subtype.val
Y : Finset E
b₀ : OrthonormalBasis { x // x ∈ Y } 𝕜 E
hX : range (restrict s v) ⊆ ↑Y
hb₀ : ↑b₀ = Subtype.val
hιY : Fintype.card ι = Finset.card Y
hvsY : MapsTo v s ↑Y
⊢ InjOn v s
[PROOFSTEP]
rw [Set.injOn_iff_injective]
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
hX✝ : Orthonormal 𝕜 Subtype.val
Y : Finset E
b₀ : OrthonormalBasis { x // x ∈ Y } 𝕜 E
hX : range (restrict s v) ⊆ ↑Y
hb₀ : ↑b₀ = Subtype.val
hιY : Fintype.card ι = Finset.card Y
hvsY : MapsTo v s ↑Y
⊢ Injective (restrict s v)
[PROOFSTEP]
exact hsv
[GOAL]
case intro.intro.intro
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
hX✝ : Orthonormal 𝕜 Subtype.val
Y : Finset E
b₀ : OrthonormalBasis { x // x ∈ Y } 𝕜 E
hX : range (restrict s v) ⊆ ↑Y
hb₀ : ↑b₀ = Subtype.val
hιY : Fintype.card ι = Finset.card Y
hvsY : MapsTo v s ↑Y
hsv' : InjOn v s
⊢ ∃ b, ∀ (i : ι), i ∈ s → ↑b i = v i
[PROOFSTEP]
obtain ⟨g, hg⟩ := hvsY.exists_equiv_extend_of_card_eq hιY hsv'
[GOAL]
case intro.intro.intro.intro
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
hX✝ : Orthonormal 𝕜 Subtype.val
Y : Finset E
b₀ : OrthonormalBasis { x // x ∈ Y } 𝕜 E
hX : range (restrict s v) ⊆ ↑Y
hb₀ : ↑b₀ = Subtype.val
hιY : Fintype.card ι = Finset.card Y
hvsY : MapsTo v s ↑Y
hsv' : InjOn v s
g : ι ≃ { x // x ∈ Y }
hg : ∀ (i : ι), i ∈ s → ↑(↑g i) = v i
⊢ ∃ b, ∀ (i : ι), i ∈ s → ↑b i = v i
[PROOFSTEP]
use b₀.reindex g.symm
[GOAL]
case h
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
hX✝ : Orthonormal 𝕜 Subtype.val
Y : Finset E
b₀ : OrthonormalBasis { x // x ∈ Y } 𝕜 E
hX : range (restrict s v) ⊆ ↑Y
hb₀ : ↑b₀ = Subtype.val
hιY : Fintype.card ι = Finset.card Y
hvsY : MapsTo v s ↑Y
hsv' : InjOn v s
g : ι ≃ { x // x ∈ Y }
hg : ∀ (i : ι), i ∈ s → ↑(↑g i) = v i
⊢ ∀ (i : ι), i ∈ s → ↑(OrthonormalBasis.reindex b₀ g.symm) i = v i
[PROOFSTEP]
intro i hi
[GOAL]
case h
ι✝ : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι✝
v✝ : Set E
A : ι✝ → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
ι : Type u_8
inst✝ : Fintype ι
card_ι : finrank 𝕜 E = Fintype.card ι
v : ι → E
s : Set ι
hv : Orthonormal 𝕜 (restrict s v)
hsv : Injective (restrict s v)
hX✝ : Orthonormal 𝕜 Subtype.val
Y : Finset E
b₀ : OrthonormalBasis { x // x ∈ Y } 𝕜 E
hX : range (restrict s v) ⊆ ↑Y
hb₀ : ↑b₀ = Subtype.val
hιY : Fintype.card ι = Finset.card Y
hvsY : MapsTo v s ↑Y
hsv' : InjOn v s
g : ι ≃ { x // x ∈ Y }
hg : ∀ (i : ι), i ∈ s → ↑(↑g i) = v i
i : ι
hi : i ∈ s
⊢ ↑(OrthonormalBasis.reindex b₀ g.symm) i = v i
[PROOFSTEP]
simp [hb₀, hg i hi]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
⊢ OrthonormalBasis (Fin (finrank 𝕜 E)) 𝕜 E
[PROOFSTEP]
let b := Classical.choose (Classical.choose_spec <| exists_orthonormalBasis 𝕜 E)
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
b : OrthonormalBasis { x // x ∈ Classical.choose (_ : ∃ w b, ↑b = Subtype.val) } 𝕜 E :=
  Classical.choose (_ : ∃ b, ↑b = Subtype.val)
⊢ OrthonormalBasis (Fin (finrank 𝕜 E)) 𝕜 E
[PROOFSTEP]
rw [finrank_eq_card_basis b.toBasis]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
b : OrthonormalBasis { x // x ∈ Classical.choose (_ : ∃ w b, ↑b = Subtype.val) } 𝕜 E :=
  Classical.choose (_ : ∃ b, ↑b = Subtype.val)
⊢ OrthonormalBasis (Fin (Fintype.card { x // x ∈ Classical.choose (_ : ∃ w b, ↑b = Subtype.val) })) 𝕜 E
[PROOFSTEP]
exact b.reindex (Fintype.equivFinOfCardEq rfl)
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
b : OrthonormalBasis ι ℝ ℝ
⊢ (↑b = fun x => 1) ∨ ↑b = fun x => -1
[PROOFSTEP]
have : Unique ι := b.toBasis.unique
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
b : OrthonormalBasis ι ℝ ℝ
this : Unique ι
⊢ (↑b = fun x => 1) ∨ ↑b = fun x => -1
[PROOFSTEP]
have : b default = 1 ∨ b default = -1 :=
  by
  have : ‖b default‖ = 1 := b.orthonormal.1 _
  rwa [Real.norm_eq_abs, abs_eq (zero_le_one' ℝ)] at this
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
b : OrthonormalBasis ι ℝ ℝ
this : Unique ι
⊢ ↑b default = 1 ∨ ↑b default = -1
[PROOFSTEP]
have : ‖b default‖ = 1 := b.orthonormal.1 _
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
b : OrthonormalBasis ι ℝ ℝ
this✝ : Unique ι
this : ‖↑b default‖ = 1
⊢ ↑b default = 1 ∨ ↑b default = -1
[PROOFSTEP]
rwa [Real.norm_eq_abs, abs_eq (zero_le_one' ℝ)] at this
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
b : OrthonormalBasis ι ℝ ℝ
this✝ : Unique ι
this : ↑b default = 1 ∨ ↑b default = -1
⊢ (↑b = fun x => 1) ∨ ↑b = fun x => -1
[PROOFSTEP]
rw [eq_const_of_unique b]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
b : OrthonormalBasis ι ℝ ℝ
this✝ : Unique ι
this : ↑b default = 1 ∨ ↑b default = -1
⊢ (const ι (↑b default) = fun x => 1) ∨ const ι (↑b default) = fun x => -1
[PROOFSTEP]
refine' this.imp _ _
[GOAL]
case refine'_1
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
b : OrthonormalBasis ι ℝ ℝ
this✝ : Unique ι
this : ↑b default = 1 ∨ ↑b default = -1
⊢ ↑b default = 1 → const ι (↑b default) = fun x => 1
[PROOFSTEP]
intro
[GOAL]
case refine'_1
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
b : OrthonormalBasis ι ℝ ℝ
this✝ : Unique ι
this : ↑b default = 1 ∨ ↑b default = -1
a✝ : ↑b default = 1
⊢ const ι (↑b default) = fun x => 1
[PROOFSTEP]
ext
[GOAL]
case refine'_1.h
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
b : OrthonormalBasis ι ℝ ℝ
this✝ : Unique ι
this : ↑b default = 1 ∨ ↑b default = -1
a✝ : ↑b default = 1
x✝ : ι
⊢ const ι (↑b default) x✝ = 1
[PROOFSTEP]
simp [*]
[GOAL]
case refine'_2
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
b : OrthonormalBasis ι ℝ ℝ
this✝ : Unique ι
this : ↑b default = 1 ∨ ↑b default = -1
⊢ ↑b default = -1 → const ι (↑b default) = fun x => -1
[PROOFSTEP]
intro
[GOAL]
case refine'_2
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
b : OrthonormalBasis ι ℝ ℝ
this✝ : Unique ι
this : ↑b default = 1 ∨ ↑b default = -1
a✝ : ↑b default = -1
⊢ const ι (↑b default) = fun x => -1
[PROOFSTEP]
ext
[GOAL]
case refine'_2.h
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
b : OrthonormalBasis ι ℝ ℝ
this✝ : Unique ι
this : ↑b default = 1 ∨ ↑b default = -1
a✝ : ↑b default = -1
x✝ : ι
⊢ const ι (↑b default) x✝ = -1
[PROOFSTEP]
simp [*]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹¹ : IsROrC 𝕜
E : Type u_4
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁸ : NormedAddCommGroup E'
inst✝⁷ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁴ : NormedAddCommGroup F'
inst✝³ : InnerProductSpace ℝ F'
inst✝² : Fintype ι
v : Set E
A : ι → Submodule 𝕜 E
inst✝¹ : FiniteDimensional 𝕜 E
n : ℕ
hn : finrank 𝕜 E = n
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : IsInternal V
a : Fin n
hV' : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => subtypeₗᵢ (V i)
⊢ ↑(subordinateOrthonormalBasis hn hV hV') a ∈ V (subordinateOrthonormalBasisIndex hn hV a hV')
[PROOFSTEP]
simpa only [DirectSum.IsInternal.subordinateOrthonormalBasis, OrthonormalBasis.coe_reindex,
  DirectSum.IsInternal.subordinateOrthonormalBasisIndex] using
  hV.collectedOrthonormalBasis_mem hV' (fun i => stdOrthonormalBasis 𝕜 (V i))
    ((hV.sigmaOrthonormalBasisIndexEquiv hn hV').symm a)
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E : Type u_4
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
⊢ V →ₗᵢ[𝕜] V
[PROOFSTEP]
let d := finrank 𝕜 Sᗮ
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E : Type u_4
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
⊢ V →ₗᵢ[𝕜] V
[PROOFSTEP]
let LS := LinearMap.range L.toLinearMap
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E : Type u_4
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
⊢ V →ₗᵢ[𝕜] V
[PROOFSTEP]
have E : Sᗮ ≃ₗᵢ[𝕜] LSᗮ :=
  by
  have dim_LS_perp : finrank 𝕜 LSᗮ = d :=
    calc
      finrank 𝕜 LSᗮ = finrank 𝕜 V - finrank 𝕜 LS := by
        simp only [← LS.finrank_add_finrank_orthogonal, add_tsub_cancel_left]
      _ = finrank 𝕜 V - finrank 𝕜 S := by simp only [LinearMap.finrank_range_of_inj L.injective]
      _ = finrank 𝕜 Sᗮ := by simp only [← S.finrank_add_finrank_orthogonal, add_tsub_cancel_left]
  exact (stdOrthonormalBasis 𝕜 Sᗮ).repr.trans ((stdOrthonormalBasis 𝕜 LSᗮ).reindex <| finCongr dim_LS_perp).repr.symm
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E : Type u_4
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
⊢ { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
[PROOFSTEP]
have dim_LS_perp : finrank 𝕜 LSᗮ = d :=
  calc
    finrank 𝕜 LSᗮ = finrank 𝕜 V - finrank 𝕜 LS := by
      simp only [← LS.finrank_add_finrank_orthogonal, add_tsub_cancel_left]
    _ = finrank 𝕜 V - finrank 𝕜 S := by simp only [LinearMap.finrank_range_of_inj L.injective]
    _ = finrank 𝕜 Sᗮ := by simp only [← S.finrank_add_finrank_orthogonal, add_tsub_cancel_left]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E : Type u_4
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
⊢ finrank 𝕜 { x // x ∈ LSᗮ } = finrank 𝕜 V - finrank 𝕜 { x // x ∈ LS }
[PROOFSTEP]
simp only [← LS.finrank_add_finrank_orthogonal, add_tsub_cancel_left]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E : Type u_4
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
⊢ finrank 𝕜 V - finrank 𝕜 { x // x ∈ LS } = finrank 𝕜 V - finrank 𝕜 { x // x ∈ S }
[PROOFSTEP]
simp only [LinearMap.finrank_range_of_inj L.injective]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E : Type u_4
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
⊢ finrank 𝕜 V - finrank 𝕜 { x // x ∈ S } = finrank 𝕜 { x // x ∈ Sᗮ }
[PROOFSTEP]
simp only [← S.finrank_add_finrank_orthogonal, add_tsub_cancel_left]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E : Type u_4
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
dim_LS_perp : finrank 𝕜 { x // x ∈ LSᗮ } = d
⊢ { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
[PROOFSTEP]
exact (stdOrthonormalBasis 𝕜 Sᗮ).repr.trans ((stdOrthonormalBasis 𝕜 LSᗮ).reindex <| finCongr dim_LS_perp).repr.symm
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
⊢ V →ₗᵢ[𝕜] V
[PROOFSTEP]
let L3 := LSᗮ.subtypeₗᵢ.comp E.toLinearIsometry
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
⊢ V →ₗᵢ[𝕜] V
[PROOFSTEP]
haveI : CompleteSpace S := FiniteDimensional.complete 𝕜 S
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this : CompleteSpace { x // x ∈ S }
⊢ V →ₗᵢ[𝕜] V
[PROOFSTEP]
haveI : CompleteSpace V := FiniteDimensional.complete 𝕜 V
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
⊢ V →ₗᵢ[𝕜] V
[PROOFSTEP]
let p1 := (orthogonalProjection S).toLinearMap
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
⊢ V →ₗᵢ[𝕜] V
[PROOFSTEP]
let p2 := (orthogonalProjection Sᗮ).toLinearMap
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
⊢ V →ₗᵢ[𝕜] V
[PROOFSTEP]
let M := L.toLinearMap.comp p1 + L3.toLinearMap.comp p2
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
⊢ V →ₗᵢ[𝕜] V
[PROOFSTEP]
have M_norm_map : ∀ x : V, ‖M x‖ = ‖x‖ := by
  intro x
  have Mx_decomp : M x = L (p1 x) + L3 (p2 x) := by
    simp only [LinearMap.add_apply, LinearMap.comp_apply, LinearMap.comp_apply, LinearIsometry.coe_toLinearMap]
      -- Mx_decomp is the orthogonal decomposition of M x
  have Mx_orth : ⟪L (p1 x), L3 (p2 x)⟫ = 0 :=
    by
    have Lp1x : L (p1 x) ∈ LinearMap.range L.toLinearMap := LinearMap.mem_range_self L.toLinearMap (p1 x)
    have Lp2x : L3 (p2 x) ∈ (LinearMap.range L.toLinearMap)ᗮ :=
      by
      simp only [LinearIsometry.coe_comp, Function.comp_apply, Submodule.coe_subtypeₗᵢ, ← Submodule.range_subtype LSᗮ]
      apply LinearMap.mem_range_self
    apply Submodule.inner_right_of_mem_orthogonal Lp1x Lp2x
  rw [← sq_eq_sq (norm_nonneg _) (norm_nonneg _), norm_sq_eq_add_norm_sq_projection x S]
  simp only [sq, Mx_decomp]
  rw [norm_add_sq_eq_norm_sq_add_norm_sq_of_inner_eq_zero (L (p1 x)) (L3 (p2 x)) Mx_orth]
  simp only [LinearIsometry.norm_map, _root_.add_left_inj, mul_eq_mul_left_iff, norm_eq_zero, true_or_iff,
    eq_self_iff_true, ContinuousLinearMap.coe_coe, Submodule.coe_norm, Submodule.coe_eq_zero]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
⊢ ∀ (x : V), ‖↑M x‖ = ‖x‖
[PROOFSTEP]
intro x
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
x : V
⊢ ‖↑M x‖ = ‖x‖
[PROOFSTEP]
have Mx_decomp : M x = L (p1 x) + L3 (p2 x) := by
  simp only [LinearMap.add_apply, LinearMap.comp_apply, LinearMap.comp_apply, LinearIsometry.coe_toLinearMap]
    -- Mx_decomp is the orthogonal decomposition of M x
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
x : V
⊢ ↑M x = ↑L (↑p1 x) + ↑L3 (↑p2 x)
[PROOFSTEP]
simp only [LinearMap.add_apply, LinearMap.comp_apply, LinearMap.comp_apply, LinearIsometry.coe_toLinearMap]
  -- Mx_decomp is the orthogonal decomposition of M x
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
x : V
Mx_decomp : ↑M x = ↑L (↑p1 x) + ↑L3 (↑p2 x)
⊢ ‖↑M x‖ = ‖x‖
[PROOFSTEP]
have Mx_orth : ⟪L (p1 x), L3 (p2 x)⟫ = 0 :=
  by
  have Lp1x : L (p1 x) ∈ LinearMap.range L.toLinearMap := LinearMap.mem_range_self L.toLinearMap (p1 x)
  have Lp2x : L3 (p2 x) ∈ (LinearMap.range L.toLinearMap)ᗮ :=
    by
    simp only [LinearIsometry.coe_comp, Function.comp_apply, Submodule.coe_subtypeₗᵢ, ← Submodule.range_subtype LSᗮ]
    apply LinearMap.mem_range_self
  apply Submodule.inner_right_of_mem_orthogonal Lp1x Lp2x
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
x : V
Mx_decomp : ↑M x = ↑L (↑p1 x) + ↑L3 (↑p2 x)
⊢ inner (↑L (↑p1 x)) (↑L3 (↑p2 x)) = 0
[PROOFSTEP]
have Lp1x : L (p1 x) ∈ LinearMap.range L.toLinearMap := LinearMap.mem_range_self L.toLinearMap (p1 x)
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
x : V
Mx_decomp : ↑M x = ↑L (↑p1 x) + ↑L3 (↑p2 x)
Lp1x : ↑L (↑p1 x) ∈ LinearMap.range L.toLinearMap
⊢ inner (↑L (↑p1 x)) (↑L3 (↑p2 x)) = 0
[PROOFSTEP]
have Lp2x : L3 (p2 x) ∈ (LinearMap.range L.toLinearMap)ᗮ :=
  by
  simp only [LinearIsometry.coe_comp, Function.comp_apply, Submodule.coe_subtypeₗᵢ, ← Submodule.range_subtype LSᗮ]
  apply LinearMap.mem_range_self
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
x : V
Mx_decomp : ↑M x = ↑L (↑p1 x) + ↑L3 (↑p2 x)
Lp1x : ↑L (↑p1 x) ∈ LinearMap.range L.toLinearMap
⊢ ↑L3 (↑p2 x) ∈ (LinearMap.range L.toLinearMap)ᗮ
[PROOFSTEP]
simp only [LinearIsometry.coe_comp, Function.comp_apply, Submodule.coe_subtypeₗᵢ, ← Submodule.range_subtype LSᗮ]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
x : V
Mx_decomp : ↑M x = ↑L (↑p1 x) + ↑L3 (↑p2 x)
Lp1x : ↑L (↑p1 x) ∈ LinearMap.range L.toLinearMap
⊢ ↑(Submodule.subtype (LinearMap.range L.toLinearMap)ᗮ)
      (↑(LinearIsometryEquiv.toLinearIsometry E) (↑↑(orthogonalProjection Sᗮ) x)) ∈
    LinearMap.range (Submodule.subtype (LinearMap.range L.toLinearMap)ᗮ)
[PROOFSTEP]
apply LinearMap.mem_range_self
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
x : V
Mx_decomp : ↑M x = ↑L (↑p1 x) + ↑L3 (↑p2 x)
Lp1x : ↑L (↑p1 x) ∈ LinearMap.range L.toLinearMap
Lp2x : ↑L3 (↑p2 x) ∈ (LinearMap.range L.toLinearMap)ᗮ
⊢ inner (↑L (↑p1 x)) (↑L3 (↑p2 x)) = 0
[PROOFSTEP]
apply Submodule.inner_right_of_mem_orthogonal Lp1x Lp2x
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
x : V
Mx_decomp : ↑M x = ↑L (↑p1 x) + ↑L3 (↑p2 x)
Mx_orth : inner (↑L (↑p1 x)) (↑L3 (↑p2 x)) = 0
⊢ ‖↑M x‖ = ‖x‖
[PROOFSTEP]
rw [← sq_eq_sq (norm_nonneg _) (norm_nonneg _), norm_sq_eq_add_norm_sq_projection x S]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
x : V
Mx_decomp : ↑M x = ↑L (↑p1 x) + ↑L3 (↑p2 x)
Mx_orth : inner (↑L (↑p1 x)) (↑L3 (↑p2 x)) = 0
⊢ ‖↑M x‖ ^ 2 = ‖↑(orthogonalProjection S) x‖ ^ 2 + ‖↑(orthogonalProjection Sᗮ) x‖ ^ 2
[PROOFSTEP]
simp only [sq, Mx_decomp]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
x : V
Mx_decomp : ↑M x = ↑L (↑p1 x) + ↑L3 (↑p2 x)
Mx_orth : inner (↑L (↑p1 x)) (↑L3 (↑p2 x)) = 0
⊢ ‖↑L (↑↑(orthogonalProjection S) x) +
          ↑(comp (subtypeₗᵢ (LinearMap.range L.toLinearMap)ᗮ) (LinearIsometryEquiv.toLinearIsometry E))
            (↑↑(orthogonalProjection Sᗮ) x)‖ *
      ‖↑L (↑↑(orthogonalProjection S) x) +
          ↑(comp (subtypeₗᵢ (LinearMap.range L.toLinearMap)ᗮ) (LinearIsometryEquiv.toLinearIsometry E))
            (↑↑(orthogonalProjection Sᗮ) x)‖ =
    ‖↑(orthogonalProjection S) x‖ * ‖↑(orthogonalProjection S) x‖ +
      ‖↑(orthogonalProjection Sᗮ) x‖ * ‖↑(orthogonalProjection Sᗮ) x‖
[PROOFSTEP]
rw [norm_add_sq_eq_norm_sq_add_norm_sq_of_inner_eq_zero (L (p1 x)) (L3 (p2 x)) Mx_orth]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
x : V
Mx_decomp : ↑M x = ↑L (↑p1 x) + ↑L3 (↑p2 x)
Mx_orth : inner (↑L (↑p1 x)) (↑L3 (↑p2 x)) = 0
⊢ ‖↑L (↑p1 x)‖ * ‖↑L (↑p1 x)‖ + ‖↑L3 (↑p2 x)‖ * ‖↑L3 (↑p2 x)‖ =
    ‖↑(orthogonalProjection S) x‖ * ‖↑(orthogonalProjection S) x‖ +
      ‖↑(orthogonalProjection Sᗮ) x‖ * ‖↑(orthogonalProjection Sᗮ) x‖
[PROOFSTEP]
simp only [LinearIsometry.norm_map, _root_.add_left_inj, mul_eq_mul_left_iff, norm_eq_zero, true_or_iff,
  eq_self_iff_true, ContinuousLinearMap.coe_coe, Submodule.coe_norm, Submodule.coe_eq_zero]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E✝ : Type u_4
inst✝¹¹ : NormedAddCommGroup E✝
inst✝¹⁰ : InnerProductSpace 𝕜 E✝
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
d : ℕ := finrank 𝕜 { x // x ∈ Sᗮ }
LS : Submodule 𝕜 V := LinearMap.range L.toLinearMap
E : { x // x ∈ Sᗮ } ≃ₗᵢ[𝕜] { x // x ∈ LSᗮ }
L3 : { x // x ∈ Sᗮ } →ₗᵢ[𝕜] V := comp (subtypeₗᵢ LSᗮ) (LinearIsometryEquiv.toLinearIsometry E)
this✝ : CompleteSpace { x // x ∈ S }
this : CompleteSpace V
p1 : V →ₗ[𝕜] { x // x ∈ S } := ↑(orthogonalProjection S)
p2 : V →ₗ[𝕜] { x // x ∈ Sᗮ } := ↑(orthogonalProjection Sᗮ)
M : V →ₗ[𝕜] V := LinearMap.comp L.toLinearMap p1 + LinearMap.comp L3.toLinearMap p2
M_norm_map : ∀ (x : V), ‖↑M x‖ = ‖x‖
⊢ V →ₗᵢ[𝕜] V
[PROOFSTEP]
exact
  { toLinearMap := M
    norm_map' := M_norm_map }
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E : Type u_4
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
s : { x // x ∈ S }
⊢ ↑(extend L) ↑s = ↑L s
[PROOFSTEP]
haveI : CompleteSpace S := FiniteDimensional.complete 𝕜 S
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E : Type u_4
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
s : { x // x ∈ S }
this : CompleteSpace { x // x ∈ S }
⊢ ↑(extend L) ↑s = ↑L s
[PROOFSTEP]
simp only [LinearIsometry.extend, ← LinearIsometry.coe_toLinearMap]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹² : IsROrC 𝕜
E : Type u_4
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : InnerProductSpace ℝ F
F' : Type u_7
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : InnerProductSpace ℝ F'
inst✝³ : Fintype ι
V : Type u_8
inst✝² : NormedAddCommGroup V
inst✝¹ : InnerProductSpace 𝕜 V
inst✝ : FiniteDimensional 𝕜 V
S : Submodule 𝕜 V
L✝ L : { x // x ∈ S } →ₗᵢ[𝕜] V
s : { x // x ∈ S }
this : CompleteSpace { x // x ∈ S }
⊢ ↑(LinearMap.comp L.toLinearMap ↑(orthogonalProjection S) +
          LinearMap.comp
            (comp (subtypeₗᵢ (LinearMap.range L.toLinearMap)ᗮ)
                (LinearIsometryEquiv.toLinearIsometry
                  (LinearIsometryEquiv.trans (stdOrthonormalBasis 𝕜 { x // x ∈ Sᗮ }).repr
                    (LinearIsometryEquiv.symm
                      (OrthonormalBasis.reindex (stdOrthonormalBasis 𝕜 { x // x ∈ (LinearMap.range L.toLinearMap)ᗮ })
                          (finCongr
                            (_ :
                              finrank 𝕜 { x // x ∈ (LinearMap.range L.toLinearMap)ᗮ } =
                                finrank 𝕜 { x // x ∈ Sᗮ }))).repr)))).toLinearMap
            ↑(orthogonalProjection Sᗮ))
      ↑s =
    ↑L.toLinearMap s
[PROOFSTEP]
simp only [add_right_eq_self, LinearIsometry.coe_toLinearMap, LinearIsometryEquiv.coe_toLinearIsometry,
  LinearIsometry.coe_comp, Function.comp_apply, orthogonalProjection_mem_subspace_eq_self, LinearMap.coe_comp,
  ContinuousLinearMap.coe_coe, Submodule.coeSubtype, LinearMap.add_apply, Submodule.coe_eq_zero,
  LinearIsometryEquiv.map_eq_zero_iff, Submodule.coe_subtypeₗᵢ,
  orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero, Submodule.orthogonal_orthogonal, Submodule.coe_mem]
[GOAL]
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝¹⁰ : IsROrC 𝕜
E : Type u_4
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁷ : NormedAddCommGroup E'
inst✝⁶ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
F' : Type u_7
inst✝³ : NormedAddCommGroup F'
inst✝² : InnerProductSpace ℝ F'
inst✝¹ : Fintype ι
m : Type u_8
n : Type u_9
inst✝ : Fintype n
A B : Matrix m n 𝕜
i j : m
⊢ inner (↑(PiLp.equiv 2 fun i => 𝕜).symm (A i)) (↑(PiLp.equiv 2 fun i => 𝕜).symm (B j)) = (B * Aᴴ) j i
[PROOFSTEP]
simp_rw [EuclideanSpace.inner_piLp_equiv_symm, Matrix.mul_apply', Matrix.dotProduct_comm, Matrix.conjTranspose_apply,
  Pi.star_def]