Theorem: HilbertBasis.hasSum_repr_symm
File: Mathlib/Analysis/InnerProductSpace/l2Space.lean

Proof steps:
state_before: ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
⊢ HasSum (fun i => ↑f i • (fun i => b.repr.symm (lp.single 2 i 1)) i) (b.repr.symm f)
state_after: ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
⊢ (fun i => ↑f i • (fun i => b.repr.symm (lp.single 2 i 1)) i) = fun b_1 =>
    b.repr.symm.toContinuousLinearEquiv ((fun i => lp.single 2 i (↑f i)) b_1)
tactic: suffices H : (fun i : ι => f i • b i) = fun b_1 : ι => b.repr.symm.toContinuousLinearEquiv <|
      (fun i : ι => lp.single 2 i (f i) (E := (fun _ : ι => 𝕜))) b_1 by
    rw [H]
    have : HasSum (fun i : ι => lp.single 2 i (f i)) f := lp.hasSum_single ENNReal.two_ne_top f
    exact (↑b.repr.symm.toContinuousLinearEquiv : ℓ²(ι, 𝕜) →L[𝕜] E).hasSum this
state_before: ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
⊢ (fun i => ↑f i • (fun i => b.repr.symm (lp.single 2 i 1)) i) = fun b_1 =>
    b.repr.symm.toContinuousLinearEquiv ((fun i => lp.single 2 i (↑f i)) b_1)
state_after: case h
ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
i : ι
⊢ ↑f i • (fun i => b.repr.symm (lp.single 2 i 1)) i =
    b.repr.symm.toContinuousLinearEquiv ((fun i => lp.single 2 i (↑f i)) i)
tactic: ext i
state_before: case h
ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
i : ι
⊢ ↑f i • (fun i => b.repr.symm (lp.single 2 i 1)) i =
    b.repr.symm.toContinuousLinearEquiv ((fun i => lp.single 2 i (↑f i)) i)
state_after: case h.a
ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
i : ι
⊢ b.repr (↑f i • (fun i => b.repr.symm (lp.single 2 i 1)) i) =
    b.repr (b.repr.symm.toContinuousLinearEquiv ((fun i => lp.single 2 i (↑f i)) i))
tactic: apply b.repr.injective
state_before: case h.a
ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
i : ι
⊢ b.repr (↑f i • (fun i => b.repr.symm (lp.single 2 i 1)) i) =
    b.repr (b.repr.symm.toContinuousLinearEquiv ((fun i => lp.single 2 i (↑f i)) i))
state_after: case h.a
ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
i : ι
this : NormedSpace 𝕜 ↥(lp (fun _i => 𝕜) 2) := inferInstance
⊢ b.repr (↑f i • (fun i => b.repr.symm (lp.single 2 i 1)) i) =
    b.repr (b.repr.symm.toContinuousLinearEquiv ((fun i => lp.single 2 i (↑f i)) i))
tactic: letI : NormedSpace 𝕜 (lp (fun _i : ι => 𝕜) 2) := by infer_instance
state_before: case h.a
ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
i : ι
this : NormedSpace 𝕜 ↥(lp (fun _i => 𝕜) 2) := inferInstance
⊢ b.repr (↑f i • (fun i => b.repr.symm (lp.single 2 i 1)) i) =
    b.repr (b.repr.symm.toContinuousLinearEquiv ((fun i => lp.single 2 i (↑f i)) i))
state_after: case h.a
ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
i : ι
this✝ : NormedSpace 𝕜 ↥(lp (fun _i => 𝕜) 2) := inferInstance
this : lp.single 2 i (↑f i * 1) = ↑f i • lp.single 2 i 1
⊢ b.repr (↑f i • (fun i => b.repr.symm (lp.single 2 i 1)) i) =
    b.repr (b.repr.symm.toContinuousLinearEquiv ((fun i => lp.single 2 i (↑f i)) i))
tactic: have : lp.single (E := (fun _ : ι => 𝕜)) 2 i (f i * 1) = f i • lp.single 2 i 1 :=
    lp.single_smul (E := (fun _ : ι => 𝕜)) 2 i (1 : 𝕜) (f i)
state_before: case h.a
ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
i : ι
this✝ : NormedSpace 𝕜 ↥(lp (fun _i => 𝕜) 2) := inferInstance
this : lp.single 2 i (↑f i * 1) = ↑f i • lp.single 2 i 1
⊢ b.repr (↑f i • (fun i => b.repr.symm (lp.single 2 i 1)) i) =
    b.repr (b.repr.symm.toContinuousLinearEquiv ((fun i => lp.single 2 i (↑f i)) i))
state_after: case h.a
ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
i : ι
this✝ : NormedSpace 𝕜 ↥(lp (fun _i => 𝕜) 2) := inferInstance
this : lp.single 2 i (↑f i) = ↑f i • lp.single 2 i 1
⊢ b.repr (↑f i • (fun i => b.repr.symm (lp.single 2 i 1)) i) =
    b.repr (b.repr.symm.toContinuousLinearEquiv ((fun i => lp.single 2 i (↑f i)) i))
tactic: rw [mul_one] at this
state_before: case h.a
ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
i : ι
this✝ : NormedSpace 𝕜 ↥(lp (fun _i => 𝕜) 2) := inferInstance
this : lp.single 2 i (↑f i) = ↑f i • lp.single 2 i 1
⊢ b.repr (↑f i • (fun i => b.repr.symm (lp.single 2 i 1)) i) =
    b.repr (b.repr.symm.toContinuousLinearEquiv ((fun i => lp.single 2 i (↑f i)) i))
state_after: case h.a
ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
i : ι
this✝ : NormedSpace 𝕜 ↥(lp (fun _i => 𝕜) 2) := inferInstance
this : lp.single 2 i (↑f i) = ↑f i • lp.single 2 i 1
⊢ lp.single 2 i (↑f i) = b.repr (b.repr.symm ((fun i => lp.single 2 i (↑f i)) i))
tactic: rw [LinearIsometryEquiv.map_smul, b.repr_self, ← this,
    LinearIsometryEquiv.coe_toContinuousLinearEquiv]
state_before: case h.a
ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
b : HilbertBasis ι 𝕜 E
f : ↥(lp (fun i => 𝕜) 2)
i : ι
this✝ : NormedSpace 𝕜 ↥(lp (fun _i => 𝕜) 2) := inferInstance
this : lp.single 2 i (↑f i) = ↑f i • lp.single 2 i 1
⊢ lp.single 2 i (↑f i) = b.repr (b.repr.symm ((fun i => lp.single 2 i (↑f i)) i))
state_after: no goals
tactic: exact (b.repr.apply_symm_apply (lp.single 2 i (f i))).symm