Skip to content

Commit 49d8101

Browse files
kim-emmichaellee94
authored andcommitted
chore(LinearAlgebra/Matrix/Nondegenerate): generalize lemmas to CommSemiring (leanprover-community#41271)
This PR generalizes the `SeparatingLeft`/`SeparatingRight`/`Nondegenerate` lemmas from `CommRing` to `CommSemiring` (the determinant section keeps `CommRing`), and golfs `nondegenerate_def` using the `@[mk_iff]`-generated `nondegenerate_iff`. Follow-up to leanprover-community#39634, which generalized the definitions but left the lemmas at `CommRing`. 🤖 Prepared with Claude Code
1 parent 34b72a0 commit 49d8101

1 file changed

Lines changed: 7 additions & 5 deletions

File tree

Mathlib/LinearAlgebra/Matrix/Nondegenerate.lean

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ structure Nondegenerate (M : Matrix m n R) : Prop where
4646

4747
end Finite
4848

49-
variable {m n R : Type*} [CommRing R] {M : Matrix m n R}
49+
section CommSemiring
50+
51+
variable {m n R : Type*} [CommSemiring R] {M : Matrix m n R}
5052

5153
lemma separatingRight_def [Fintype m] [Fintype n] :
5254
M.SeparatingRight ↔ (∀ w, (∀ v, v ⬝ᵥ M *ᵥ w = 0) → w = 0) := by
@@ -61,9 +63,7 @@ lemma separatingLeft_def [Fintype m] [Fintype n] :
6163
lemma nondegenerate_def [Fintype m] [Fintype n] :
6264
M.Nondegenerate ↔
6365
(∀ v, (∀ w, v ⬝ᵥ M *ᵥ w = 0) → v = 0) ∧ (∀ w, (∀ v, v ⬝ᵥ M *ᵥ w = 0) → w = 0) := by
64-
constructor
65-
· exact fun h ↦ ⟨separatingLeft_def.mp h.1, separatingRight_def.mp h.2
66-
· exact fun h ↦ ⟨separatingLeft_def.mpr h.1, separatingRight_def.mpr h.2
66+
rw [nondegenerate_iff, separatingLeft_def, separatingRight_def]
6767

6868
theorem separatingLeft_iff_forall_vecMul_eq_zero [Fintype m] [Finite n] :
6969
M.SeparatingLeft ↔ ∀ v, v ᵥ* M = 0 → v = 0 := by
@@ -140,8 +140,10 @@ theorem Nondegenerate.exists_not_ortho_of_ne_zero' (hM : Nondegenerate M) {w : n
140140
∃ v, v ⬝ᵥ M *ᵥ w ≠ 0 :=
141141
not_forall.mp (mt hM.eq_zero_of_ortho' hw)
142142

143+
end CommSemiring
144+
143145
section Determinant
144-
variable [DecidableEq m] {M : Matrix m m R}
146+
variable {m R : Type*} [CommRing R] [Fintype m] [DecidableEq m] {M : Matrix m m R}
145147

146148
open scoped nonZeroDivisors
147149

0 commit comments

Comments
 (0)