Theorem: Matrix.matrix_eq_sum_std_basis
File: Mathlib/Data/Matrix/Basis.lean

tactic: ext i j
state_before: l : Type ?u.8855
m : Type u_1
n : Type u_2
R : Type ?u.8864
α : Type u_3
inst✝⁵ : DecidableEq l
inst✝⁴ : DecidableEq m
inst✝³ : DecidableEq n
inst✝² : Semiring α
inst✝¹ : Fintype m
inst✝ : Fintype n
x : Matrix m n α
⊢ x = ∑ i : m, ∑ j : n, stdBasisMatrix i j (x i j)

tactic: symm
state_before: case a.h
l : Type ?u.8855
m : Type u_1
n : Type u_2
R : Type ?u.8864
α : Type u_3
inst✝⁵ : DecidableEq l
inst✝⁴ : DecidableEq m
inst✝³ : DecidableEq n
inst✝² : Semiring α
inst✝¹ : Fintype m
inst✝ : Fintype n
x : Matrix m n α
i : m
j : n
⊢ x i j = Finset.sum Finset.univ (fun i => ∑ j : n, stdBasisMatrix i j (x i j)) i j

tactic: iterate 2 rw [Finset.sum_apply]
state_before: case a.h
l : Type ?u.8855
m : Type u_1
n : Type u_2
R : Type ?u.8864
α : Type u_3
inst✝⁵ : DecidableEq l
inst✝⁴ : DecidableEq m
inst✝³ : DecidableEq n
inst✝² : Semiring α
inst✝¹ : Fintype m
inst✝ : Fintype n
x : Matrix m n α
i : m
j : n
⊢ Finset.sum Finset.univ (fun i => ∑ j : n, stdBasisMatrix i j (x i j)) i j = x i j

tactic: refine (Fintype.sum_eq_single i ?_).trans ?_
state_before: case a.h
l : Type ?u.8855
m : Type u_1
n : Type u_2
R : Type ?u.8864
α : Type u_3
inst✝⁵ : DecidableEq l
inst✝⁴ : DecidableEq m
inst✝³ : DecidableEq n
inst✝² : Semiring α
inst✝¹ : Fintype m
inst✝ : Fintype n
x : Matrix m n α
i : m
j : n
⊢ ∑ c : m, Finset.sum Finset.univ (fun j => stdBasisMatrix c j (x c j)) i j = x i j

tactic: swap
state_before: case a.h.refine_1
l : Type ?u.8855
m : Type u_1
n : Type u_2
R : Type ?u.8864
α : Type u_3
inst✝⁵ : DecidableEq l
inst✝⁴ : DecidableEq m
inst✝³ : DecidableEq n
inst✝² : Semiring α
inst✝¹ : Fintype m
inst✝ : Fintype n
x : Matrix m n α
i : m
j : n
⊢ ∀ (x_1 : m), x_1 ≠ i → Finset.sum Finset.univ (fun j => stdBasisMatrix x_1 j (x x_1 j)) i j = 0

case a.h.refine_2
l : Type ?u.8855
m : Type u_1
n : Type u_2
R : Type ?u.8864
α : Type u_3
inst✝⁵ : DecidableEq l
inst✝⁴ : DecidableEq m
inst✝³ : DecidableEq n
inst✝² : Semiring α
inst✝¹ : Fintype m
inst✝ : Fintype n
x : Matrix m n α
i : m
j : n
⊢ Finset.sum Finset.univ (fun j => stdBasisMatrix i j (x i j)) i j = x i j

tactic: rw [Finset.sum_apply]
state_before: case a.h
l : Type ?u.8855
m : Type u_1
n : Type u_2
R : Type ?u.8864
α : Type u_3
inst✝⁵ : DecidableEq l
inst✝⁴ : DecidableEq m
inst✝³ : DecidableEq n
inst✝² : Semiring α
inst✝¹ : Fintype m
inst✝ : Fintype n
x : Matrix m n α
i : m
j : n
⊢ Finset.sum Finset.univ (fun c => Finset.sum Finset.univ (fun j => stdBasisMatrix c j (x c j)) i) j = x i j

tactic: simp only [stdBasisMatrix]
state_before: case a.h.refine_2
l : Type ?u.8855
m : Type u_1
n : Type u_2
R : Type ?u.8864
α : Type u_3
inst✝⁵ : DecidableEq l
inst✝⁴ : DecidableEq m
inst✝³ : DecidableEq n
inst✝² : Semiring α
inst✝¹ : Fintype m
inst✝ : Fintype n
x : Matrix m n α
i : m
j : n
⊢ Finset.sum Finset.univ (fun j => stdBasisMatrix i j (x i j)) i j = x i j

tactic: rw [Fintype.sum_apply, Fintype.sum_apply]
state_before: case a.h.refine_2
l : Type ?u.8855
m : Type u_1
n : Type u_2
R : Type ?u.8864
α : Type u_3
inst✝⁵ : DecidableEq l
inst✝⁴ : DecidableEq m
inst✝³ : DecidableEq n
inst✝² : Semiring α
inst✝¹ : Fintype m
inst✝ : Fintype n
x : Matrix m n α
i : m
j : n
⊢ Finset.sum Finset.univ (fun x_1 i' j' => if i = i' ∧ x_1 = j' then x i x_1 else 0) i j = x i j

tactic: simp
state_before: case a.h.refine_2
l : Type ?u.8855
m : Type u_1
n : Type u_2
R : Type ?u.8864
α : Type u_3
inst✝⁵ : DecidableEq l
inst✝⁴ : DecidableEq m
inst✝³ : DecidableEq n
inst✝² : Semiring α
inst✝¹ : Fintype m
inst✝ : Fintype n
x : Matrix m n α
i : m
j : n
⊢ (∑ c : n, if i = i ∧ c = j then x i c else 0) = x i j

tactic: intro j' hj'
state_before: case a.h.refine_1
l : Type ?u.8855
m : Type u_1
n : Type u_2
R : Type ?u.8864
α : Type u_3
inst✝⁵ : DecidableEq l
inst✝⁴ : DecidableEq m
inst✝³ : DecidableEq n
inst✝² : Semiring α
inst✝¹ : Fintype m
inst✝ : Fintype n
x : Matrix m n α
i : m
j : n
⊢ ∀ (x_1 : m), x_1 ≠ i → Finset.sum Finset.univ (fun j => stdBasisMatrix x_1 j (x x_1 j)) i j = 0

tactic: simp only [stdBasisMatrix]
state_before: case a.h.refine_1
l : Type ?u.8855
m : Type u_1
n : Type u_2
R : Type ?u.8864
α : Type u_3
inst✝⁵ : DecidableEq l
inst✝⁴ : DecidableEq m
inst✝³ : DecidableEq n
inst✝² : Semiring α
inst✝¹ : Fintype m
inst✝ : Fintype n
x : Matrix m n α
i : m
j : n
j' : m
hj' : j' ≠ i
⊢ Finset.sum Finset.univ (fun j => stdBasisMatrix j' j (x j' j)) i j = 0

tactic: rw [Fintype.sum_apply, Fintype.sum_apply]
state_before: case a.h.refine_1
l : Type ?u.8855
m : Type u_1
n : Type u_2
R : Type ?u.8864
α : Type u_3
inst✝⁵ : DecidableEq l
inst✝⁴ : DecidableEq m
inst✝³ : DecidableEq n
inst✝² : Semiring α
inst✝¹ : Fintype m
inst✝ : Fintype n
x : Matrix m n α
i : m
j : n
j' : m
hj' : j' ≠ i
⊢ Finset.sum Finset.univ (fun x_1 i' j'_1 => if j' = i' ∧ x_1 = j'_1 then x j' x_1 else 0) i j = 0

tactic: simp [hj']
state_before: case a.h.refine_1
l : Type ?u.8855
m : Type u_1
n : Type u_2
R : Type ?u.8864
α : Type u_3
inst✝⁵ : DecidableEq l
inst✝⁴ : DecidableEq m
inst✝³ : DecidableEq n
inst✝² : Semiring α
inst✝¹ : Fintype m
inst✝ : Fintype n
x : Matrix m n α
i : m
j : n
j' : m
hj' : j' ≠ i
⊢ (∑ c : n, if j' = i ∧ c = j then x j' c else 0) = 0