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

#31637


Last updated: Dec 20 2025 at 21:32 UTC