Matrices with a single non-zero element. #

This file provides Matrix.stdBasisMatrix. The matrix Matrix.stdBasisMatrix i j c has c at position (i, j), and zeroes elsewhere.

def Matrix.stdBasisMatrix {m : Type u_2} {n : Type u_3} {α : Type u_5} [] [] [] (i : m) (j : n) (a : α) :
Matrix m n α

stdBasisMatrix i j a is the matrix with a in the i-th row, j-th column, and zeroes elsewhere.

Equations
Instances For
@[simp]
theorem Matrix.smul_stdBasisMatrix {m : Type u_2} {n : Type u_3} {R : Type u_4} {α : Type u_5} [] [] [] [] (r : R) (i : m) (j : n) (a : α) :
@[simp]
theorem Matrix.stdBasisMatrix_zero {m : Type u_2} {n : Type u_3} {α : Type u_5} [] [] [] (i : m) (j : n) :
= 0
theorem Matrix.stdBasisMatrix_add {m : Type u_2} {n : Type u_3} {α : Type u_5} [] [] [] (i : m) (j : n) (a : α) (b : α) :
theorem Matrix.mulVec_stdBasisMatrix {m : Type u_2} {n : Type u_3} {α : Type u_5} [] [] [] [] (i : n) (j : m) (c : α) (x : mα) :
().mulVec x = Function.update 0 i (c * x j)
theorem Matrix.matrix_eq_sum_std_basis {m : Type u_2} {n : Type u_3} {α : Type u_5} [] [] [] [] [] (x : Matrix m n α) :
x = Finset.univ.sum fun (i : m) => Finset.univ.sum fun (j : n) => Matrix.stdBasisMatrix i j (x i j)
theorem Matrix.std_basis_eq_basis_mul_basis {m : Type u_2} {n : Type u_3} {α : Type u_5} [] [] [] (i : m) (j : n) :
= Matrix.vecMulVec (fun (i' : m) => if i = i' then 1 else 0) fun (j' : n) => if j = j' then 1 else 0
theorem Matrix.induction_on' {m : Type u_2} {n : Type u_3} {α : Type u_5} [] [] [] [] [] {P : Matrix m n αProp} (M : Matrix m n α) (h_zero : P 0) (h_add : ∀ (p q : Matrix m n α), P pP qP (p + q)) (h_std_basis : ∀ (i : m) (j : n) (x : α), P ()) :
P M
theorem Matrix.induction_on {m : Type u_2} {n : Type u_3} {α : Type u_5} [] [] [] [] [] [] [] {P : Matrix m n αProp} (M : Matrix m n α) (h_add : ∀ (p q : Matrix m n α), P pP qP (p + q)) (h_std_basis : ∀ (i : m) (j : n) (x : α), P ()) :
P M
@[simp]
theorem Matrix.StdBasisMatrix.apply_same {m : Type u_2} {n : Type u_3} {α : Type u_5} [] [] [] (i : m) (j : n) (c : α) :
= c
@[simp]
theorem Matrix.StdBasisMatrix.apply_of_ne {m : Type u_2} {n : Type u_3} {α : Type u_5} [] [] [] (i : m) (j : n) (c : α) (i' : m) (j' : n) (h : ¬(i = i' j = j')) :
Matrix.stdBasisMatrix i j c i' j' = 0
@[simp]
theorem Matrix.StdBasisMatrix.apply_of_row_ne {m : Type u_2} {n : Type u_3} {α : Type u_5} [] [] [] {i : m} {i' : m} (hi : i i') (j : n) (j' : n) (a : α) :
Matrix.stdBasisMatrix i j a i' j' = 0
@[simp]
theorem Matrix.StdBasisMatrix.apply_of_col_ne {m : Type u_2} {n : Type u_3} {α : Type u_5} [] [] [] (i : m) (i' : m) {j : n} {j' : n} (hj : j j') (a : α) :
Matrix.stdBasisMatrix i j a i' j' = 0
@[simp]
theorem Matrix.StdBasisMatrix.diag_zero {n : Type u_3} {α : Type u_5} [] [] (i : n) (j : n) (c : α) (h : j i) :
().diag = 0
@[simp]
theorem Matrix.StdBasisMatrix.diag_same {n : Type u_3} {α : Type u_5} [] [] (i : n) (c : α) :
().diag =
@[simp]
theorem Matrix.StdBasisMatrix.trace_zero {n : Type u_3} {α : Type u_5} [] [] (i : n) (j : n) (c : α) [] (h : j i) :
().trace = 0
@[simp]
theorem Matrix.StdBasisMatrix.trace_eq {n : Type u_3} {α : Type u_5} [] [] (i : n) (c : α) [] :
().trace = c
@[simp]
theorem Matrix.StdBasisMatrix.mul_left_apply_same {n : Type u_3} {α : Type u_5} [] [] (i : n) (j : n) (c : α) [] (b : n) (M : Matrix n n α) :
( * M) i b = c * M j b
@[simp]
theorem Matrix.StdBasisMatrix.mul_right_apply_same {n : Type u_3} {α : Type u_5} [] [] (i : n) (j : n) (c : α) [] (a : n) (M : Matrix n n α) :
(M * ) a j = M a i * c
@[simp]
theorem Matrix.StdBasisMatrix.mul_left_apply_of_ne {n : Type u_3} {α : Type u_5} [] [] (i : n) (j : n) (c : α) [] (a : n) (b : n) (h : a i) (M : Matrix n n α) :
( * M) a b = 0
@[simp]
theorem Matrix.StdBasisMatrix.mul_right_apply_of_ne {n : Type u_3} {α : Type u_5} [] [] (i : n) (j : n) (c : α) [] (a : n) (b : n) (hbj : b j) (M : Matrix n n α) :
(M * ) a b = 0
@[simp]
theorem Matrix.StdBasisMatrix.mul_same {n : Type u_3} {α : Type u_5} [] [] (i : n) (j : n) (c : α) [] (k : n) (d : α) :
@[simp]
theorem Matrix.StdBasisMatrix.mul_of_ne {n : Type u_3} {α : Type u_5} [] [] (i : n) (j : n) (c : α) [] {k : n} {l : n} (h : j k) (d : α) :
* = 0
theorem Matrix.row_eq_zero_of_commute_stdBasisMatrix {n : Type u_3} {α : Type u_5} [] [] [] {i : n} {j : n} {k : n} {M : Matrix n n α} (hM : Commute () M) (hkj : k j) :
M j k = 0
theorem Matrix.col_eq_zero_of_commute_stdBasisMatrix {n : Type u_3} {α : Type u_5} [] [] [] {i : n} {j : n} {k : n} {M : Matrix n n α} (hM : Commute () M) (hki : k i) :
M k i = 0
theorem Matrix.diag_eq_of_commute_stdBasisMatrix {n : Type u_3} {α : Type u_5} [] [] [] {i : n} {j : n} {M : Matrix n n α} (hM : Commute () M) :
M i i = M j j
theorem Matrix.mem_range_scalar_of_commute_stdBasisMatrix {n : Type u_3} {α : Type u_5} [] [] [] {M : Matrix n n α} (hM : Pairwise fun (i j : n) => Commute () M) :
M

M is a scalar matrix if it commutes with every non-diagonal stdBasisMatrix. ​

theorem Matrix.mem_range_scalar_iff_commute_stdBasisMatrix {n : Type u_3} {α : Type u_5} [] [] [] {M : Matrix n n α} :
M ∀ (i j : n), i jCommute () M
theorem Matrix.mem_range_scalar_iff_commute_stdBasisMatrix' {n : Type u_3} {α : Type u_5} [] [] [] {M : Matrix n n α} :
M ∀ (i j : n), Commute () M

M is a scalar matrix if and only if it commutes with every stdBasisMatrix.​