Zulip Chat Archive
Stream: Is there code for X?
Topic: Matrix.one_eq_sum_single?
Edison Xie (Nov 14 2025 at 19:07):
import Mathlib
lemma Matrix.one_eq_sum_single {R ι : Type*} [Ring R] [Fintype ι] [DecidableEq ι] :
(1 : Matrix ι ι R) = ∑ i : ι, single i i 1 := by
rw [Matrix.matrix_eq_sum_single 1]
refine Finset.sum_congr rfl fun i _ ↦ ?_
rw [Finset.sum_eq_single i (fun b _ hb ↦ by simp [Ne.symm hb]) (by simp)]
simp
Do we have this in mathlib?
Edison Xie (Nov 14 2025 at 19:07):
Pining @Eric Wieser
Eric Wieser (Nov 14 2025 at 19:11):
Probably not, I'd expect a version for diagonal too
Edison Xie (Nov 14 2025 at 20:17):
should I PR these then?
lemma Matrix.one_eq_sum_single {ι : Type*} [Fintype ι] [DecidableEq ι] :
(1 : Matrix ι ι R) = ∑ i : ι, single i i 1 := by
rw [Matrix.matrix_eq_sum_single 1]
refine Finset.sum_congr rfl fun i _ ↦ ?_
rw [Finset.sum_eq_single i (fun b _ hb ↦ by simp [Ne.symm hb]) (by simp)]
simp
lemma Matrix.diagonal_eq_sum_single {ι : Type*} [Fintype ι] [DecidableEq ι]
(f : ι → R) : Matrix.diagonal f = ∑ i : ι, single i i (f i) := by
rw [Matrix.matrix_eq_sum_single (Matrix.diagonal f)]
refine Finset.sum_congr rfl fun i _ ↦ ?_
rw [Finset.sum_eq_single i (fun b _ hb ↦ by simp [Ne.symm hb]) (by simp)]
simp
Kenny Lau (Nov 14 2025 at 20:21):
you should switch them and prove one from diag...
Kenny Lau (Nov 14 2025 at 20:29):
@Edison Xie :cooking:
import Mathlib
lemma Matrix.diagonal_eq_sum_single {R : Type*} [AddCommMonoid R] {ι : Type*} [Fintype ι] [DecidableEq ι]
(f : ι → R) : Matrix.diagonal f = ∑ i : ι, single i i (f i) := ext fun j k ↦ by
rw [sum_apply, diagonal_apply, Finset.sum_eq_single j] <;> simp +contextual [single]
lemma Matrix.one_eq_sum_single {R : Type*} [AddCommMonoidWithOne R] {ι : Type*} [Fintype ι] [DecidableEq ι] :
(1 : Matrix ι ι R) = ∑ i : ι, single i i 1 :=
diagonal_eq_sum_single _
#min_imports
Edison Xie (Nov 14 2025 at 20:36):
why don't we have stuff like single_def and single_apply? Should we really be unfolding the definition every time? Should I add those as well?
Edison Xie (Nov 14 2025 at 20:37):
I could only find single_apply_of_ne and single_apply_of_same
Kenny Lau (Nov 14 2025 at 20:51):
I agree that we shouldn't rely on definitional unfolding, but I also think that we can also get a long way if loogle can also look under definition
Edison Xie (Nov 14 2025 at 22:43):
Kenny Lau said:
Edison Xie :cooking:
import Mathlib lemma Matrix.diagonal_eq_sum_single {R : Type*} [AddCommMonoid R] {ι : Type*} [Fintype ι] [DecidableEq ι] (f : ι → R) : Matrix.diagonal f = ∑ i : ι, single i i (f i) := ext fun j k ↦ by rw [sum_apply, diagonal_apply, Finset.sum_eq_single j] <;> simp +contextual [single] lemma Matrix.one_eq_sum_single {R : Type*} [AddCommMonoidWithOne R] {ι : Type*} [Fintype ι] [DecidableEq ι] : (1 : Matrix ι ι R) = ∑ i : ι, single i i 1 := diagonal_eq_sum_single _ #min_imports
Last updated: Dec 20 2025 at 21:32 UTC