Zulip Chat Archive
Stream: maths
Topic: det_vandermonde_eq_zero
Bart Michels (Jun 10 2022 at 12:47):
I've written two small lemmas about Vandermonde determinants (that I need somewhere else). Is there a branch I can get write access to, or should I create my own?
My github username is bartmichels.
lemma det_vandermonde_eq_zero_iff {R : Type*} [comm_ring R] [is_domain R] {n : ℕ} (v : fin n → R) :
det (vandermonde v) = 0 ↔ ∃ (i j : fin n), i ≠ j ∧ v i = v j :=
begin
simp [det_vandermonde v, finset.prod_eq_zero_iff, sub_eq_zero],
split,
rintros ⟨i, j, hij⟩,
exact ⟨j, i, ne_of_gt (hij.left), hij.right⟩,
rintros ⟨i, j, hij⟩,
cases lt_or_gt_of_ne hij.left with hilt higt,
exact ⟨i, j, hilt, by symmetry; exact hij.right⟩,
exact ⟨j, i, higt, hij.right⟩,
end
lemma det_vandermonde_ne_zero_iff {R : Type*} [comm_ring R] [is_domain R] {n : ℕ} (v : fin n → R) :
det (vandermonde v) ≠ 0 ↔ function.injective v :=
by simpa [det_vandermonde_eq_zero_iff, not_imp_not]
Also, if you can make the proof of the first one shorter, please do :)
Ruben Van de Velde (Jun 10 2022 at 12:54):
At least, you'll want to use squeeze_simp
or simp?
on that first line, and put braces { }
around the subgoals after split
Damiano Testa (Jun 10 2022 at 12:59):
I'm not sure if this is desirable, but you can "golf" the statement asserting that v
is not injective.
Bart Michels (Jun 10 2022 at 13:03):
Right, thanks. I added the braces and indentation for subgoals.
Bart Michels (Jun 10 2022 at 13:19):
Damiano Testa said:
I'm not sure if this is desirable, but you can "golf" the statement asserting that
v
is not injective.
Certainly desirable, I'll try.
Bart Michels (Jun 10 2022 at 16:11):
I can replace the "not injective" part with a single term (or split and two terms) that's not so horrible, for the most part:
split,
{ exact Exists₂.imp (λ i j h, ⟨ne_of_lt h.left, h.right.symm ⟩) },
{ exact λ h, exists.elim h (λ i h, exists.elim h (λ j h₁, ⟨min i j, max i j,
min_lt_max.mpr h₁.left, ((fn_min_eq_fn_max_iff v i j).mpr h₁.right).symm ⟩)) }
It would be nice to have an exists₂.elim
.
I also didn't find any term-mode ways to wlog
assume i ≤ j
. Is there anything? Here it's hidden in fn_min_eq_fn_max_iff
, which is another lemma (that does not exist yet), to show v n = v m → v (min n m) = v (max n m)
.
Eric Wieser (Jun 10 2022 at 16:38):
I'm surprised that you're not using docs#matrix.det_zero_of_row_eq
Bart Michels (Jun 10 2022 at 16:43):
Forgot about that along the way, thanks.
Wrenna Robson (Jun 15 2022 at 02:09):
I'm interested in this. I have some prior work with vandermonde stuff myself and this looks nice.
Wrenna Robson (Jun 15 2022 at 02:13):
docs#matrix.det_vandermonde_eq_zero_iff
Wrenna Robson (Jun 15 2022 at 02:14):
I'm fairly sure this is your first.
Wrenna Robson (Jun 15 2022 at 02:15):
docs#matrix.det_vandermonde_ne_zero_iff
Wrenna Robson (Jun 15 2022 at 02:15):
And this is your second.
Wrenna Robson (Jun 15 2022 at 02:16):
(deleted)
Wrenna Robson (Jun 15 2022 at 02:18):
So unfortunately I don't think this is much new.
Eric Wieser (Jun 15 2022 at 07:12):
@Wrenna Robson, both of those lemmas were PR'd by @Bart Michels after this thread was made
Wrenna Robson (Jun 15 2022 at 10:29):
Huh. I'm sure I used them before June!
Wrenna Robson (Jun 15 2022 at 11:10):
Ah - it turns out I had proved very similar things myself, which is why they looked familiar.
Wrenna Robson (Jun 15 2022 at 11:29):
Sorry about that though - naively I had assumed that because those messages were from only a few days ago there wouldn't be a PR!
Last updated: Dec 20 2023 at 11:08 UTC