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

Proof steps:
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: cases isEmpty_or_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: obtain ⟨i⟩ := ‹Nonempty n›
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: 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 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: 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
⊢ 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: obtain rfl | hkl := Decidable.eq_or_ne j k