Theorem: Matrix.toLinearMap₂'_apply'
File: Mathlib/LinearAlgebra/Matrix/SesquilinearForm.lean

Proof steps:
state_before: R : Type u_1
R₁ : Type u_2
S₁ : Type u_3
R₂ : Type u_4
S₂ : Type u_5
M✝ : Type u_6
M₁ : Type u_7
M₂ : Type u_8
M₁' : Type u_9
M₂' : Type u_10
N₂ : Type u_11
n : Type u_12
m : Type u_13
n' : Type u_14
m' : Type u_15
ι : Type u_16
inst✝¹⁷ : CommSemiring R
inst✝¹⁶ : AddCommMonoid N₂
inst✝¹⁵ : Module R N₂
inst✝¹⁴ : Semiring R₁
inst✝¹³ : Semiring R₂
inst✝¹² : SMulCommClass R R N₂
inst✝¹¹ : Semiring S₁
inst✝¹⁰ : Semiring S₂
inst✝⁹ : Module S₁ N₂
inst✝⁸ : Module S₂ N₂
inst✝⁷ : SMulCommClass S₁ R N₂
inst✝⁶ : SMulCommClass S₂ R N₂
inst✝⁵ : SMulCommClass S₂ S₁ N₂
σ₁ : R₁ →+* S₁
σ₂ : R₂ →+* S₂
inst✝⁴ : Fintype n
inst✝³ : Fintype m
inst✝² : DecidableEq n
inst✝¹ : DecidableEq m
T : Type u_17
inst✝ : CommSemiring T
M : Matrix n m T
v : n → T
w : m → T
⊢ (((toLinearMap₂' T) M) v) w = v ⬝ᵥ M *ᵥ w
state_after: R : Type u_1
R₁ : Type u_2
S₁ : Type u_3
R₂ : Type u_4
S₂ : Type u_5
M✝ : Type u_6
M₁ : Type u_7
M₂ : Type u_8
M₁' : Type u_9
M₂' : Type u_10
N₂ : Type u_11
n : Type u_12
m : Type u_13
n' : Type u_14
m' : Type u_15
ι : Type u_16
inst✝¹⁷ : CommSemiring R
inst✝¹⁶ : AddCommMonoid N₂
inst✝¹⁵ : Module R N₂
inst✝¹⁴ : Semiring R₁
inst✝¹³ : Semiring R₂
inst✝¹² : SMulCommClass R R N₂
inst✝¹¹ : Semiring S₁
inst✝¹⁰ : Semiring S₂
inst✝⁹ : Module S₁ N₂
inst✝⁸ : Module S₂ N₂
inst✝⁷ : SMulCommClass S₁ R N₂
inst✝⁶ : SMulCommClass S₂ R N₂
inst✝⁵ : SMulCommClass S₂ S₁ N₂
σ₁ : R₁ →+* S₁
σ₂ : R₂ →+* S₂
inst✝⁴ : Fintype n
inst✝³ : Fintype m
inst✝² : DecidableEq n
inst✝¹ : DecidableEq m
T : Type u_17
inst✝ : CommSemiring T
M : Matrix n m T
v : n → T
w : m → T
⊢ ∑ i : n, ∑ j : m, v i •> w j •> M i j = ∑ x : n, v x * ∑ x_1 : m, M x x_1 * w x_1
tactic: simp_rw [Matrix.toLinearMap₂'_apply, Matrix.dotProduct, Matrix.mulVec, Matrix.dotProduct]
state_before: R : Type u_1
R₁ : Type u_2
S₁ : Type u_3
R₂ : Type u_4
S₂ : Type u_5
M✝ : Type u_6
M₁ : Type u_7
M₂ : Type u_8
M₁' : Type u_9
M₂' : Type u_10
N₂ : Type u_11
n : Type u_12
m : Type u_13
n' : Type u_14
m' : Type u_15
ι : Type u_16
inst✝¹⁷ : CommSemiring R
inst✝¹⁶ : AddCommMonoid N₂
inst✝¹⁵ : Module R N₂
inst✝¹⁴ : Semiring R₁
inst✝¹³ : Semiring R₂
inst✝¹² : SMulCommClass R R N₂
inst✝¹¹ : Semiring S₁
inst✝¹⁰ : Semiring S₂
inst✝⁹ : Module S₁ N₂
inst✝⁸ : Module S₂ N₂
inst✝⁷ : SMulCommClass S₁ R N₂
inst✝⁶ : SMulCommClass S₂ R N₂
inst✝⁵ : SMulCommClass S₂ S₁ N₂
σ₁ : R₁ →+* S₁
σ₂ : R₂ →+* S₂
inst✝⁴ : Fintype n
inst✝³ : Fintype m
inst✝² : DecidableEq n
inst✝¹ : DecidableEq m
T : Type u_17
inst✝ : CommSemiring T
M : Matrix n m T
v : n → T
w : m → T
⊢ ∑ i : n, ∑ j : m, v i •> w j •> M i j = ∑ x : n, v x * ∑ x_1 : m, M x x_1 * w x_1
state_after: R : Type u_1
R₁ : Type u_2
S₁ : Type u_3
R₂ : Type u_4
S₂ : Type u_5
M✝ : Type u_6
M₁ : Type u_7
M₂ : Type u_8
M₁' : Type u_9
M₂' : Type u_10
N₂ : Type u_11
n : Type u_12
m : Type u_13
n' : Type u_14
m' : Type u_15
ι : Type u_16
inst✝¹⁷ : CommSemiring R
inst✝¹⁶ : AddCommMonoid N₂
inst✝¹⁵ : Module R N₂
inst✝¹⁴ : Semiring R₁
inst✝¹³ : Semiring R₂
inst✝¹² : SMulCommClass R R N₂
inst✝¹¹ : Semiring S₁
inst✝¹⁰ : Semiring S₂
inst✝⁹ : Module S₁ N₂
inst✝⁸ : Module S₂ N₂
inst✝⁷ : SMulCommClass S₁ R N₂
inst✝⁶ : SMulCommClass S₂ R N₂
inst✝⁵ : SMulCommClass S₂ S₁ N₂
σ₁ : R₁ →+* S₁
σ₂ : R₂ →+* S₂
inst✝⁴ : Fintype n
inst✝³ : Fintype m
inst✝² : DecidableEq n
inst✝¹ : DecidableEq m
T : Type u_17
inst✝ : CommSemiring T
M : Matrix n m T
v : n → T
w : m → T
x✝¹ : n
x✝ : x✝¹ ∈ univ
⊢ ∑ j : m, v x✝¹ •> w j •> M x✝¹ j = v x✝¹ * ∑ x : m, M x✝¹ x * w x
tactic: refine Finset.sum_congr rfl fun _ _ => ?_
state_before: R : Type u_1
R₁ : Type u_2
S₁ : Type u_3
R₂ : Type u_4
S₂ : Type u_5
M✝ : Type u_6
M₁ : Type u_7
M₂ : Type u_8
M₁' : Type u_9
M₂' : Type u_10
N₂ : Type u_11
n : Type u_12
m : Type u_13
n' : Type u_14
m' : Type u_15
ι : Type u_16
inst✝¹⁷ : CommSemiring R
inst✝¹⁶ : AddCommMonoid N₂
inst✝¹⁵ : Module R N₂
inst✝¹⁴ : Semiring R₁
inst✝¹³ : Semiring R₂
inst✝¹² : SMulCommClass R R N₂
inst✝¹¹ : Semiring S₁
inst✝¹⁰ : Semiring S₂
inst✝⁹ : Module S₁ N₂
inst✝⁸ : Module S₂ N₂
inst✝⁷ : SMulCommClass S₁ R N₂
inst✝⁶ : SMulCommClass S₂ R N₂
inst✝⁵ : SMulCommClass S₂ S₁ N₂
σ₁ : R₁ →+* S₁
σ₂ : R₂ →+* S₂
inst✝⁴ : Fintype n
inst✝³ : Fintype m
inst✝² : DecidableEq n
inst✝¹ : DecidableEq m
T : Type u_17
inst✝ : CommSemiring T
M : Matrix n m T
v : n → T
w : m → T
x✝¹ : n
x✝ : x✝¹ ∈ univ
⊢ ∑ j : m, v x✝¹ •> w j •> M x✝¹ j = v x✝¹ * ∑ x : m, M x✝¹ x * w x
state_after: R : Type u_1
R₁ : Type u_2
S₁ : Type u_3
R₂ : Type u_4
S₂ : Type u_5
M✝ : Type u_6
M₁ : Type u_7
M₂ : Type u_8
M₁' : Type u_9
M₂' : Type u_10
N₂ : Type u_11
n : Type u_12
m : Type u_13
n' : Type u_14
m' : Type u_15
ι : Type u_16
inst✝¹⁷ : CommSemiring R
inst✝¹⁶ : AddCommMonoid N₂
inst✝¹⁵ : Module R N₂
inst✝¹⁴ : Semiring R₁
inst✝¹³ : Semiring R₂
inst✝¹² : SMulCommClass R R N₂
inst✝¹¹ : Semiring S₁
inst✝¹⁰ : Semiring S₂
inst✝⁹ : Module S₁ N₂
inst✝⁸ : Module S₂ N₂
inst✝⁷ : SMulCommClass S₁ R N₂
inst✝⁶ : SMulCommClass S₂ R N₂
inst✝⁵ : SMulCommClass S₂ S₁ N₂
σ₁ : R₁ →+* S₁
σ₂ : R₂ →+* S₂
inst✝⁴ : Fintype n
inst✝³ : Fintype m
inst✝² : DecidableEq n
inst✝¹ : DecidableEq m
T : Type u_17
inst✝ : CommSemiring T
M : Matrix n m T
v : n → T
w : m → T
x✝¹ : n
x✝ : x✝¹ ∈ univ
⊢ ∑ j : m, v x✝¹ •> w j •> M x✝¹ j = ∑ i : m, v x✝¹ * (M x✝¹ i * w i)
tactic: rw [Finset.mul_sum]
state_before: R : Type u_1
R₁ : Type u_2
S₁ : Type u_3
R₂ : Type u_4
S₂ : Type u_5
M✝ : Type u_6
M₁ : Type u_7
M₂ : Type u_8
M₁' : Type u_9
M₂' : Type u_10
N₂ : Type u_11
n : Type u_12
m : Type u_13
n' : Type u_14
m' : Type u_15
ι : Type u_16
inst✝¹⁷ : CommSemiring R
inst✝¹⁶ : AddCommMonoid N₂
inst✝¹⁵ : Module R N₂
inst✝¹⁴ : Semiring R₁
inst✝¹³ : Semiring R₂
inst✝¹² : SMulCommClass R R N₂
inst✝¹¹ : Semiring S₁
inst✝¹⁰ : Semiring S₂
inst✝⁹ : Module S₁ N₂
inst✝⁸ : Module S₂ N₂
inst✝⁷ : SMulCommClass S₁ R N₂
inst✝⁶ : SMulCommClass S₂ R N₂
inst✝⁵ : SMulCommClass S₂ S₁ N₂
σ₁ : R₁ →+* S₁
σ₂ : R₂ →+* S₂
inst✝⁴ : Fintype n
inst✝³ : Fintype m
inst✝² : DecidableEq n
inst✝¹ : DecidableEq m
T : Type u_17
inst✝ : CommSemiring T
M : Matrix n m T
v : n → T
w : m → T
x✝¹ : n
x✝ : x✝¹ ∈ univ
⊢ ∑ j : m, v x✝¹ •> w j •> M x✝¹ j = ∑ i : m, v x✝¹ * (M x✝¹ i * w i)
state_after: R : Type u_1
R₁ : Type u_2
S₁ : Type u_3
R₂ : Type u_4
S₂ : Type u_5
M✝ : Type u_6
M₁ : Type u_7
M₂ : Type u_8
M₁' : Type u_9
M₂' : Type u_10
N₂ : Type u_11
n : Type u_12
m : Type u_13
n' : Type u_14
m' : Type u_15
ι : Type u_16
inst✝¹⁷ : CommSemiring R
inst✝¹⁶ : AddCommMonoid N₂
inst✝¹⁵ : Module R N₂
inst✝¹⁴ : Semiring R₁
inst✝¹³ : Semiring R₂
inst✝¹² : SMulCommClass R R N₂
inst✝¹¹ : Semiring S₁
inst✝¹⁰ : Semiring S₂
inst✝⁹ : Module S₁ N₂
inst✝⁸ : Module S₂ N₂
inst✝⁷ : SMulCommClass S₁ R N₂
inst✝⁶ : SMulCommClass S₂ R N₂
inst✝⁵ : SMulCommClass S₂ S₁ N₂
σ₁ : R₁ →+* S₁
σ₂ : R₂ →+* S₂
inst✝⁴ : Fintype n
inst✝³ : Fintype m
inst✝² : DecidableEq n
inst✝¹ : DecidableEq m
T : Type u_17
inst✝ : CommSemiring T
M : Matrix n m T
v : n → T
w : m → T
x✝³ : n
x✝² : x✝³ ∈ univ
x✝¹ : m
x✝ : x✝¹ ∈ univ
⊢ v x✝³ •> w x✝¹ •> M x✝³ x✝¹ = v x✝³ * (M x✝³ x✝¹ * w x✝¹)
tactic: refine Finset.sum_congr rfl fun _ _ => ?_
state_before: R : Type u_1
R₁ : Type u_2
S₁ : Type u_3
R₂ : Type u_4
S₂ : Type u_5
M✝ : Type u_6
M₁ : Type u_7
M₂ : Type u_8
M₁' : Type u_9
M₂' : Type u_10
N₂ : Type u_11
n : Type u_12
m : Type u_13
n' : Type u_14
m' : Type u_15
ι : Type u_16
inst✝¹⁷ : CommSemiring R
inst✝¹⁶ : AddCommMonoid N₂
inst✝¹⁵ : Module R N₂
inst✝¹⁴ : Semiring R₁
inst✝¹³ : Semiring R₂
inst✝¹² : SMulCommClass R R N₂
inst✝¹¹ : Semiring S₁
inst✝¹⁰ : Semiring S₂
inst✝⁹ : Module S₁ N₂
inst✝⁸ : Module S₂ N₂
inst✝⁷ : SMulCommClass S₁ R N₂
inst✝⁶ : SMulCommClass S₂ R N₂
inst✝⁵ : SMulCommClass S₂ S₁ N₂
σ₁ : R₁ →+* S₁
σ₂ : R₂ →+* S₂
inst✝⁴ : Fintype n
inst✝³ : Fintype m
inst✝² : DecidableEq n
inst✝¹ : DecidableEq m
T : Type u_17
inst✝ : CommSemiring T
M : Matrix n m T
v : n → T
w : m → T
x✝³ : n
x✝² : x✝³ ∈ univ
x✝¹ : m
x✝ : x✝¹ ∈ univ
⊢ v x✝³ •> w x✝¹ •> M x✝³ x✝¹ = v x✝³ * (M x✝³ x✝¹ * w x✝¹)
state_after: no goals
tactic: rw [smul_eq_mul, smul_eq_mul, mul_comm (w _), ← mul_assoc]