Skip to content

Commit 06c3cba

Browse files
committed
chore: Iff lemmas about Matrix.diagonal d and numerals (leanprover-community#37303)
Also uses `ofNat()` in place of `OfNat.ofNat`, which in theorem makes these lemmas easier to use backwards in `simp`.
1 parent d037624 commit 06c3cba

1 file changed

Lines changed: 25 additions & 2 deletions

File tree

Mathlib/Data/Matrix/Diagonal.lean

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ theorem diagonal_zero [Zero α] : (diagonal fun _ => 0 : Matrix n n α) = 0 := b
8282
@[simp]
8383
theorem diagonal_zero' [Zero α] : (diagonal 0 : Matrix n n α) = 0 := diagonal_zero
8484

85+
@[simp]
86+
theorem diagonal_eq_zero [Zero α] {d : n → α} : diagonal d = 0 ↔ d = 0 :=
87+
diagonal_injective.eq_iff' diagonal_zero
88+
8589
@[simp]
8690
theorem diagonal_transpose [Zero α] (v : n → α) : (diagonal v)ᵀ = diagonal v := by
8791
ext i j
@@ -131,11 +135,21 @@ theorem diagonal_natCast [Zero α] [NatCast α] (m : ℕ) : diagonal (fun _ : n
131135
@[norm_cast]
132136
theorem diagonal_natCast' [Zero α] [NatCast α] (m : ℕ) : diagonal ((m : n → α)) = m := rfl
133137

138+
@[simp]
139+
theorem diagonal_eq_natCast [Zero α] [NatCast α] {d : n → α} {m : ℕ} :
140+
diagonal d = m ↔ d = m :=
141+
diagonal_injective.eq_iff' <| diagonal_natCast' _
142+
134143
theorem diagonal_ofNat [Zero α] [NatCast α] (m : ℕ) [m.AtLeastTwo] :
135-
diagonal (fun _ : n => (ofNat(m) : α)) = OfNat.ofNat m := rfl
144+
diagonal (fun _ : n => (ofNat(m) : α)) = ofNat(m) := rfl
136145

137146
theorem diagonal_ofNat' [Zero α] [NatCast α] (m : ℕ) [m.AtLeastTwo] :
138-
diagonal (ofNat(m) : n → α) = OfNat.ofNat m := rfl
147+
diagonal (ofNat(m) : n → α) = ofNat(m) := rfl
148+
149+
@[simp]
150+
theorem diagonal_eq_ofNat [Zero α] [NatCast α] {d : n → α} {m : ℕ} [m.AtLeastTwo] :
151+
diagonal d = ofNat(m) ↔ d = ofNat(m) :=
152+
diagonal_injective.eq_iff' <| diagonal_ofNat' _
139153

140154
instance [Zero α] [IntCast α] : IntCast (Matrix n n α) where
141155
intCast m := diagonal fun _ => m
@@ -146,6 +160,11 @@ theorem diagonal_intCast [Zero α] [IntCast α] (m : ℤ) : diagonal (fun _ : n
146160
@[norm_cast]
147161
theorem diagonal_intCast' [Zero α] [IntCast α] (m : ℤ) : diagonal ((m : n → α)) = m := rfl
148162

163+
@[simp]
164+
theorem diagonal_eq_intCast [Zero α] [IntCast α] {d : n → α} {m : ℤ} :
165+
diagonal d = m ↔ d = m :=
166+
diagonal_injective.eq_iff' <| diagonal_intCast' _
167+
149168
@[simp]
150169
theorem diagonal_map [Zero α] [Zero β] {f : α → β} (h : f 0 = 0) {d : n → α} :
151170
(diagonal d).map f = diagonal fun m => f (d m) := by
@@ -210,6 +229,10 @@ theorem diagonal_one : (diagonal fun _ => 1 : Matrix n n α) = 1 :=
210229
theorem diagonal_one' : (diagonal 1 : Matrix n n α) = 1 :=
211230
rfl
212231

232+
@[simp]
233+
theorem diagonal_eq_one {d : n → α} : diagonal d = 1 ↔ d = 1 :=
234+
diagonal_injective.eq_iff' diagonal_one
235+
213236
theorem one_apply {i j} : (1 : Matrix n n α) i j = if i = j then 1 else 0 :=
214237
rfl
215238

0 commit comments

Comments
 (0)