HepLean Documentation

Mathlib.LinearAlgebra.Vandermonde

Vandermonde matrix #

This file defines the vandermonde matrix and gives its determinant.

Main definitions #

Main results #

def Matrix.vandermonde {R : Type u_1} [CommRing R] {n : } (v : Fin nR) :
Matrix (Fin n) (Fin n) R

vandermonde v is the square matrix with ith row equal to 1, v i, v i ^ 2, v i ^ 3, ....

Equations
Instances For
    @[simp]
    theorem Matrix.vandermonde_apply {R : Type u_1} [CommRing R] {n : } (v : Fin nR) (i : Fin n) (j : Fin n) :
    Matrix.vandermonde v i j = v i ^ j
    @[simp]
    theorem Matrix.vandermonde_cons {R : Type u_1} [CommRing R] {n : } (v0 : R) (v : Fin nR) :
    Matrix.vandermonde (Fin.cons v0 v) = Fin.cons (fun (j : Fin n.succ) => v0 ^ j) fun (i : Fin n) => Fin.cons 1 fun (j : Fin n) => v i * Matrix.vandermonde v i j
    theorem Matrix.vandermonde_succ {R : Type u_1} [CommRing R] {n : } (v : Fin n.succR) :
    Matrix.vandermonde v = Matrix.of Fin.cons (fun (j : Fin n.succ) => v 0 ^ j) fun (i : Fin n) => Fin.cons 1 fun (j : Fin n) => v i.succ * Matrix.vandermonde (Fin.tail v) i j
    theorem Matrix.vandermonde_mul_vandermonde_transpose {R : Type u_1} [CommRing R] {n : } (v : Fin nR) (w : Fin nR) (i : Fin n) (j : Fin n) :
    (Matrix.vandermonde v * (Matrix.vandermonde w).transpose) i j = k : Fin n, (v i * w j) ^ k
    theorem Matrix.vandermonde_transpose_mul_vandermonde {R : Type u_1} [CommRing R] {n : } (v : Fin nR) (i : Fin n) (j : Fin n) :
    ((Matrix.vandermonde v).transpose * Matrix.vandermonde v) i j = k : Fin n, v k ^ (i + j)
    theorem Matrix.det_vandermonde {R : Type u_1} [CommRing R] {n : } (v : Fin nR) :
    (Matrix.vandermonde v).det = i : Fin n, jFinset.Ioi i, (v j - v i)
    theorem Matrix.det_vandermonde_eq_zero_iff {R : Type u_1} [CommRing R] [IsDomain R] {n : } {v : Fin nR} :
    (Matrix.vandermonde v).det = 0 ∃ (i : Fin n) (j : Fin n), v i = v j i j
    @[simp]
    theorem Matrix.det_vandermonde_add {R : Type u_1} [CommRing R] {n : } (v : Fin nR) (a : R) :
    (Matrix.vandermonde fun (i : Fin n) => v i + a).det = (Matrix.vandermonde v).det
    @[simp]
    theorem Matrix.det_vandermonde_sub {R : Type u_1} [CommRing R] {n : } (v : Fin nR) (a : R) :
    (Matrix.vandermonde fun (i : Fin n) => v i - a).det = (Matrix.vandermonde v).det
    theorem Matrix.eq_zero_of_forall_index_sum_pow_mul_eq_zero {R : Type u_2} [CommRing R] [IsDomain R] {n : } {f : Fin nR} {v : Fin nR} (hf : Function.Injective f) (hfv : ∀ (j : Fin n), i : Fin n, f j ^ i * v i = 0) :
    v = 0
    theorem Matrix.eq_zero_of_forall_index_sum_mul_pow_eq_zero {R : Type u_2} [CommRing R] [IsDomain R] {n : } {f : Fin nR} {v : Fin nR} (hf : Function.Injective f) (hfv : ∀ (j : Fin n), i : Fin n, v i * f j ^ i = 0) :
    v = 0
    theorem Matrix.eq_zero_of_forall_pow_sum_mul_pow_eq_zero {R : Type u_2} [CommRing R] [IsDomain R] {n : } {f : Fin nR} {v : Fin nR} (hf : Function.Injective f) (hfv : ∀ (i : Fin n), j : Fin n, v j * f j ^ i = 0) :
    v = 0
    theorem Matrix.eval_matrixOfPolynomials_eq_vandermonde_mul_matrixOfPolynomials {R : Type u_1} [CommRing R] {n : } (v : Fin nR) (p : Fin nPolynomial R) (h_deg : ∀ (i : Fin n), (p i).natDegree i) :
    (Matrix.of fun (i j : Fin n) => Polynomial.eval (v i) (p j)) = Matrix.vandermonde v * Matrix.of fun (i j : Fin n) => (p j).coeff i
    theorem Matrix.det_eval_matrixOfPolynomials_eq_det_vandermonde {R : Type u_1} [CommRing R] {n : } (v : Fin nR) (p : Fin nPolynomial R) (h_deg : ∀ (i : Fin n), (p i).natDegree = i) (h_monic : ∀ (i : Fin n), (p i).Monic) :
    (Matrix.vandermonde v).det = (Matrix.of fun (i j : Fin n) => Polynomial.eval (v i) (p j)).det