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

tactic: cases isEmpty_or_nonempty n
state_before: l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
⊢ M ∈ Set.range ⇑(scalar n)
state_after: case inl
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : IsEmpty n
⊢ M ∈ Set.range ⇑(scalar n)

case inr
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
⊢ M ∈ Set.range ⇑(scalar n)

tactic: obtain ⟨i⟩ := ‹Nonempty n›
state_before: case inr
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
⊢ M ∈ Set.range ⇑(scalar n)
state_after: case inr.intro
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i : n
⊢ M ∈ Set.range ⇑(scalar n)

tactic: refine ⟨M i i, Matrix.ext fun j k => ?_⟩
state_before: case inr.intro
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i : n
⊢ M ∈ Set.range ⇑(scalar n)
state_after: case inr.intro
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j k : n
⊢ (scalar n) (M i i) j k = M j k

tactic: simp only [scalar_apply]
state_before: case inr.intro
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j k : n
⊢ (scalar n) (M i i) j k = M j k
state_after: case inr.intro
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j k : n
⊢ diagonal (fun x => M i i) j k = M j k

tactic: obtain rfl | hkl := Decidable.eq_or_ne j k
state_before: case inr.intro
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j k : n
⊢ diagonal (fun x => M i i) j k = M j k
state_after: case inr.intro.inl
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j : n
⊢ diagonal (fun x => M i i) j j = M j j

case inr.intro.inr
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j k : n
hkl : j ≠ k
⊢ diagonal (fun x => M i i) j k = M j k

tactic: exact ⟨0, Subsingleton.elim _ _⟩
state_before: case inl
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : IsEmpty n
⊢ M ∈ Set.range ⇑(scalar n)
state_after: no goals

tactic: rw [diagonal_apply_eq]
state_before: case inr.intro.inl
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j : n
⊢ diagonal (fun x => M i i) j j = M j j
state_after: case inr.intro.inl
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j : n
⊢ M i i = M j j

tactic: obtain rfl | hij := Decidable.eq_or_ne i j
state_before: case inr.intro.inl
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j : n
⊢ M i i = M j j
state_after: case inr.intro.inl.inl
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i : n
⊢ M i i = M i i

case inr.intro.inl.inr
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j : n
hij : i ≠ j
⊢ M i i = M j j

tactic: rfl
state_before: case inr.intro.inl.inl
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i : n
⊢ M i i = M i i
state_after: no goals

tactic: exact diag_eq_of_commute_stdBasisMatrix (hM hij)
state_before: case inr.intro.inl.inr
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j : n
hij : i ≠ j
⊢ M i i = M j j
state_after: no goals

tactic: rw [diagonal_apply_ne _ hkl]
state_before: case inr.intro.inr
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j k : n
hkl : j ≠ k
⊢ diagonal (fun x => M i i) j k = M j k
state_after: case inr.intro.inr
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j k : n
hkl : j ≠ k
⊢ 0 = M j k

tactic: obtain rfl | hij := Decidable.eq_or_ne i j
state_before: case inr.intro.inr
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j k : n
hkl : j ≠ k
⊢ 0 = M j k
state_after: case inr.intro.inr.inl
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i k : n
hkl : i ≠ k
⊢ 0 = M i k

case inr.intro.inr.inr
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j k : n
hkl : j ≠ k
hij : i ≠ j
⊢ 0 = M j k

tactic: rw [col_eq_zero_of_commute_stdBasisMatrix (hM hkl.symm) hkl]
state_before: case inr.intro.inr.inl
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i k : n
hkl : i ≠ k
⊢ 0 = M i k
state_after: no goals

tactic: rw [row_eq_zero_of_commute_stdBasisMatrix (hM hij) hkl.symm]
state_before: case inr.intro.inr.inr
l : Type u_1
m : Type u_2
n : Type u_3
R : Type u_4
α : Type u_5
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : Semiring α
inst✝ : Fintype n
M : Matrix n n α
hM : Pairwise fun i j => Commute (stdBasisMatrix i j 1) M
h✝ : Nonempty n
i j k : n
hkl : j ≠ k
hij : i ≠ j
⊢ 0 = M j k
state_after: no goals