Circulant matrices
DefinitionStandard primitive n-th root of unity \(e^{2\pi i/n}\)#✓fully proved
The exponential exp (2 * π * I / n), a primitive n-th root for nonzero n.
This definition is total: at n = 0, it is exp 0 = 1.
noncomputable def zeta (n : ℕ) : ℂ := Complex.exp (2 * Real.pi * Complex.I / n)
Used by 6
TheoremStandard root of unity as the standard additive character#✓fully proved
For nonzero n, zeta n is the canonical standard character at 1.
public theorem zeta_eq_stdAddChar : zeta n = ZMod.stdAddChar (1 : ZMod n)
noncomputable def zeta (n : ℕ) : ℂ := Complex.exp (2 * Real.pi * Complex.I / n)
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:50
Uses 1 · Used by 2
Theorem\(e^{2\pi i/n}\) is a primitive n-th root of unity#✓fully proved
For nonzero n, the exponential is a primitive n-th root of unity.
public theorem zeta_isPrimitiveRoot : IsPrimitiveRoot (zeta n) n
noncomputable def zeta (n : ℕ) : ℂ := Complex.exp (2 * Real.pi * Complex.I / n)
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:50
Uses 2
DefinitionFourier vector on the integers modulo n#✓fully proved
The j-th Fourier vector on ZMod n, using the canonical positive character.
noncomputable def fourierVec (n : ℕ) [NeZero n] (j : ZMod n) : ZMod n → ℂ :=
fun i => ZMod.stdAddChar (i * j)
TheoremExponential formula for Fourier vectors#✓fully proved
The character definition of a Fourier vector agrees with its exponential formula.
public theorem fourierVec_apply (j i : ZMod n) :
fourierVec n j i = zeta n ^ (i.val * j.val)
noncomputable def fourierVec (n : ℕ) [NeZero n] (j : ZMod n) : ZMod n → ℂ :=
fun i => ZMod.stdAddChar (i * j)
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:62
noncomputable def zeta (n : ℕ) : ℂ := Complex.exp (2 * Real.pi * Complex.I / n)
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:50
Uses 3 · Used by 3
DefinitionFourier eigenvalue of a circulant matrix#✓fully proved
The j-th Fourier eigenvalue of a circulant matrix is its canonical DFT.
noncomputable def circulantEigenvalue (n : ℕ) [NeZero n] (v : ZMod n → ℂ) (j : ZMod n) : ℂ :=
ZMod.dft v j
Used by 6
TheoremExponential-sum formula for circulant eigenvalues#✓fully proved
The canonical DFT definition agrees with the original negative-exponent eigenvalue sum.
public theorem circulantEigenvalue_apply (v : ZMod n → ℂ) (j : ZMod n) :
circulantEigenvalue n v j = ∑ k, v k * zeta n ^ (-(k.val * j.val : ℤ))
noncomputable def circulantEigenvalue (n : ℕ) [NeZero n] (v : ZMod n → ℂ) (j : ZMod n) : ℂ :=
ZMod.dft v j
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:80
noncomputable def zeta (n : ℕ) : ℂ := Complex.exp (2 * Real.pi * Complex.I / n)
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:50
Uses 3
TheoremFourier vectors are eigenvectors of circulant matrices#✓fully proved
Every Fourier vector is an eigenvector of every circulant matrix.
public theorem circulant_mulVec_fourierVec (v : ZMod n → ℂ) (j : ZMod n) :
Matrix.mulVec (Matrix.circulant v) (fourierVec n j) =
circulantEigenvalue n v j • fourierVec n j
noncomputable def fourierVec (n : ℕ) [NeZero n] (j : ZMod n) : ZMod n → ℂ :=
fun i => ZMod.stdAddChar (i * j)
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:62
noncomputable def circulantEigenvalue (n : ℕ) [NeZero n] (v : ZMod n → ℂ) (j : ZMod n) : ℂ :=
ZMod.dft v j
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:80
Uses 2 · Used by 1
DefinitionFourier matrix#✓fully proved
The Fourier matrix, whose j-th column is the standard character fourierVec n j.
noncomputable def fourierMatrix (n : ℕ) [NeZero n] : Matrix (ZMod n) (ZMod n) ℂ :=
fun i j => fourierVec n j i
noncomputable def fourierVec (n : ℕ) [NeZero n] (j : ZMod n) : ZMod n → ℂ :=
fun i => ZMod.stdAddChar (i * j)
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:62
Uses 1 · Used by 5
TheoremEntrywise exponential formula for the Fourier matrix#✓fully proved
The Fourier matrix agrees entrywise with its original exponential formula.
public theorem fourierMatrix_apply (i j : ZMod n) :
fourierMatrix n i j = zeta n ^ (i.val * j.val)
noncomputable def fourierMatrix (n : ℕ) [NeZero n] : Matrix (ZMod n) (ZMod n) ℂ :=
fun i j => fourierVec n j i
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:107
noncomputable def zeta (n : ℕ) : ℂ := Complex.exp (2 * Real.pi * Complex.I / n)
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:50
Uses 3
DefinitionInverse Fourier matrix#✓fully proved
The inverse Fourier matrix, (1 / n) times the negative standard character.
noncomputable def fourierMatrixInv (n : ℕ) [NeZero n] : Matrix (ZMod n) (ZMod n) ℂ :=
fun i j => (n : ℂ)⁻¹ * ZMod.stdAddChar (-(i * j))
TheoremEntrywise exponential formula for the inverse Fourier matrix#✓fully proved
The inverse Fourier matrix agrees entrywise with its original exponential formula.
public theorem fourierMatrixInv_apply (i j : ZMod n) :
fourierMatrixInv n i j = (1 / (n : ℂ)) * zeta n ^ (-(i.val * j.val : ℤ))
noncomputable def fourierMatrixInv (n : ℕ) [NeZero n] : Matrix (ZMod n) (ZMod n) ℂ :=
fun i j => (n : ℂ)⁻¹ * ZMod.stdAddChar (-(i * j))
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:116
noncomputable def zeta (n : ℕ) : ℂ := Complex.exp (2 * Real.pi * Complex.I / n)
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:50
Uses 3
TheoremFourier matrix acts as n times the inverse DFT#✓fully proved
Fourier matrix multiplication is the canonical inverse DFT multiplied by n.
public theorem fourierMatrix_mulVec_eq_invDFT (v : ZMod n → ℂ) :
Matrix.mulVec (fourierMatrix n) v = (n : ℂ) • ZMod.dft.symm v
noncomputable def fourierMatrix (n : ℕ) [NeZero n] : Matrix (ZMod n) (ZMod n) ℂ :=
fun i j => fourierVec n j i
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:107
Uses 1 · Used by 1
TheoremInverse Fourier matrix acts as the DFT divided by n#✓fully proved
Inverse Fourier matrix multiplication is the canonical DFT divided by n.
public theorem fourierMatrixInv_mulVec_eq_dft (v : ZMod n → ℂ) :
Matrix.mulVec (fourierMatrixInv n) v = (n : ℂ)⁻¹ • ZMod.dft v
noncomputable def fourierMatrixInv (n : ℕ) [NeZero n] : Matrix (ZMod n) (ZMod n) ℂ :=
fun i j => (n : ℂ)⁻¹ * ZMod.stdAddChar (-(i * j))
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:116
Uses 1 · Used by 1
TheoremFourier matrix times its inverse is the identity#✓fully proved
The Fourier matrix is invertible, with inverse fourierMatrixInv.
public theorem fourierMatrix_mul_inv :
fourierMatrix n * fourierMatrixInv n = (1 : Matrix (ZMod n) (ZMod n) ℂ)
noncomputable def fourierMatrix (n : ℕ) [NeZero n] : Matrix (ZMod n) (ZMod n) ℂ :=
fun i j => fourierVec n j i
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:107
noncomputable def fourierMatrixInv (n : ℕ) [NeZero n] : Matrix (ZMod n) (ZMod n) ℂ :=
fun i j => (n : ℂ)⁻¹ * ZMod.stdAddChar (-(i * j))
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:116
Uses 4 · Used by 1
TheoremCirculant matrices are diagonalized by the Fourier matrix#✓fully proved
Circulant matrices are diagonalized by the Fourier matrix.
public theorem circulant_mul_fourierMatrix (v : ZMod n → ℂ) :
Matrix.circulant v * fourierMatrix n =
fourierMatrix n * Matrix.diagonal (circulantEigenvalue n v)
noncomputable def fourierMatrix (n : ℕ) [NeZero n] : Matrix (ZMod n) (ZMod n) ℂ :=
fun i j => fourierVec n j i
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:107
noncomputable def circulantEigenvalue (n : ℕ) [NeZero n] (v : ZMod n → ℂ) (j : ZMod n) : ℂ :=
ZMod.dft v j
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:80
Uses 4 · Used by 1
TheoremDeterminant of a circulant matrix#✓fully proved
The determinant of a circulant matrix is the product of its Fourier eigenvalues.
public theorem det_circulant (v : ZMod n → ℂ) :
(Matrix.circulant v).det = ∏ j, circulantEigenvalue n v j
noncomputable def circulantEigenvalue (n : ℕ) [NeZero n] (v : ZMod n → ℂ) (j : ZMod n) : ℂ :=
ZMod.dft v j
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:80
TheoremZeroth circulant eigenvalue is the sum of entries#✓fully proved
The Fourier eigenvalue at j = 0 is the sum of the entries of v.
public theorem circulantEigenvalue_zero (v : ZMod n → ℂ) :
circulantEigenvalue n v 0 = ∑ k, v k
noncomputable def circulantEigenvalue (n : ℕ) [NeZero n] (v : ZMod n → ℂ) (j : ZMod n) : ℂ :=
ZMod.dft v j
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:80
Uses 1
TheoremSum of the eigenvalues of a circulant matrix#✓fully proved
The Fourier eigenvalues sum to n * v 0.
public theorem sum_circulantEigenvalue (v : ZMod n → ℂ) :
∑ j, circulantEigenvalue n v j = (n : ℂ) * v 0
noncomputable def circulantEigenvalue (n : ℕ) [NeZero n] (v : ZMod n → ℂ) (j : ZMod n) : ℂ :=
ZMod.dft v j
MathlibExt/LinearAlgebra/Matrix/CirculantSpectrum.lean:80
Uses 1
DefinitionBlock-circulant matrix over ℤ_n#✓fully proved
The block-circulant matrix on ℤ_n × Fin d with block v (p - q) in position (p, q).
DefinitionFourier symbol of a block-circulant matrix#✓fully proved
The Fourier symbol ∑_k ω ^ (k j) • v k of a block-circulant matrix at frequency j.
DefinitionTwo-dimensional block-circulant matrix on the torus#✓fully proved
The block-circulant matrix on (ℤ_L × ℤ_L) × Fin d with block v (p - q) in position (p, q).
DefinitionFourier symbol of a two-dimensional block-circulant matrix#✓fully proved
The Fourier symbol ∑_k ω ^ (k₁ j₁ + k₂ j₂) • v k at frequency j.
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.