Documentation

Mathlib.Analysis.Fourier.ZMod

Fourier theory on ZMod N #

Basic definitions and properties of the discrete Fourier transform for functions on ZMod N (taking values in an arbitrary β„‚-vector space).

Main definitions and results #

noncomputable def ZMod.dft {N : β„•} [NeZero N] {E : Type u_1} [AddCommGroup E] [Module β„‚ E] :
(ZMod N β†’ E) ≃ₗ[β„‚] ZMod N β†’ E

The discrete Fourier transform on β„€ / N β„€ (with the counting measure), bundled as a linear equivalence. Denoted as 𝓕 within the ZMod namespace.

Equations
    Instances For

      The discrete Fourier transform on β„€ / N β„€ (with the counting measure), bundled as a linear equivalence. Denoted as 𝓕 within the ZMod namespace.

      Equations
        Instances For

          The inverse Fourier transform on ZMod N.

          Equations
            Instances For
              theorem ZMod.dft_apply {N : β„•} [NeZero N] {E : Type u_1} [AddCommGroup E] [Module β„‚ E] (Ξ¦ : ZMod N β†’ E) (k : ZMod N) :
              dft Ξ¦ k = βˆ‘ j : ZMod N, stdAddChar (-(j * k)) β€’ Ξ¦ j
              theorem ZMod.dft_def {N : β„•} [NeZero N] {E : Type u_1} [AddCommGroup E] [Module β„‚ E] (Ξ¦ : ZMod N β†’ E) :
              dft Ξ¦ = fun (k : ZMod N) => βˆ‘ j : ZMod N, stdAddChar (-(j * k)) β€’ Ξ¦ j
              theorem ZMod.invDFT_apply {N : β„•} [NeZero N] {E : Type u_1} [AddCommGroup E] [Module β„‚ E] (Ξ¨ : ZMod N β†’ E) (k : ZMod N) :
              dft.symm Ξ¨ k = (↑N)⁻¹ β€’ βˆ‘ j : ZMod N, stdAddChar (j * k) β€’ Ξ¨ j
              theorem ZMod.invDFT_def {N : β„•} [NeZero N] {E : Type u_1} [AddCommGroup E] [Module β„‚ E] (Ξ¨ : ZMod N β†’ E) :
              dft.symm Ξ¨ = fun (k : ZMod N) => (↑N)⁻¹ β€’ βˆ‘ j : ZMod N, stdAddChar (j * k) β€’ Ξ¨ j
              theorem ZMod.invDFT_apply' {N : β„•} [NeZero N] {E : Type u_1} [AddCommGroup E] [Module β„‚ E] (Ξ¨ : ZMod N β†’ E) (k : ZMod N) :
              dft.symm Ξ¨ k = (↑N)⁻¹ β€’ dft Ξ¨ (-k)
              theorem ZMod.invDFT_def' {N : β„•} [NeZero N] {E : Type u_1} [AddCommGroup E] [Module β„‚ E] (Ξ¨ : ZMod N β†’ E) :
              dft.symm Ξ¨ = fun (k : ZMod N) => (↑N)⁻¹ β€’ dft Ξ¨ (-k)
              theorem ZMod.dft_apply_zero {N : β„•} [NeZero N] {E : Type u_1} [AddCommGroup E] [Module β„‚ E] (Ξ¦ : ZMod N β†’ E) :
              dft Ξ¦ 0 = βˆ‘ j : ZMod N, Ξ¦ j

              The discrete Fourier transform agrees with the general one (assuming the target space is a complete normed space).

              Compatibility with scalar multiplication #

              These lemmas are more general than LinearEquiv.map_mul etc, since they allow any scalars that commute with the β„‚-action, rather than just β„‚ itself.

              theorem ZMod.dft_const_smul {N : β„•} [NeZero N] {E : Type u_1} [AddCommGroup E] [Module β„‚ E] {R : Type u_2} [DistribSMul R E] [SMulCommClass R β„‚ E] (r : R) (Ξ¦ : ZMod N β†’ E) :
              dft (r β€’ Ξ¦) = r β€’ dft Ξ¦
              theorem ZMod.dft_smul_const {N : β„•} [NeZero N] {E : Type u_1} [AddCommGroup E] [Module β„‚ E] {R : Type u_2} [Ring R] [Module β„‚ R] [Module R E] [IsScalarTower β„‚ R E] (Ξ¦ : ZMod N β†’ R) (e : E) :
              (dft fun (j : ZMod N) => Ξ¦ j β€’ e) = fun (k : ZMod N) => dft Ξ¦ k β€’ e
              theorem ZMod.dft_const_mul {N : β„•} [NeZero N] {R : Type u_2} [Ring R] [Algebra β„‚ R] (r : R) (Ξ¦ : ZMod N β†’ R) :
              (dft fun (j : ZMod N) => r * Ξ¦ j) = fun (k : ZMod N) => r * dft Ξ¦ k
              theorem ZMod.dft_mul_const {N : β„•} [NeZero N] {R : Type u_2} [Ring R] [Algebra β„‚ R] (Ξ¦ : ZMod N β†’ R) (r : R) :
              (dft fun (j : ZMod N) => Ξ¦ j * r) = fun (k : ZMod N) => dft Ξ¦ k * r
              theorem ZMod.dft_comp_neg {N : β„•} [NeZero N] {E : Type u_1} [AddCommGroup E] [Module β„‚ E] (Ξ¦ : ZMod N β†’ E) :
              (dft fun (j : ZMod N) => Ξ¦ (-j)) = fun (k : ZMod N) => dft Ξ¦ (-k)
              theorem ZMod.dft_dft {N : β„•} [NeZero N] {E : Type u_1} [AddCommGroup E] [Module β„‚ E] (Ξ¦ : ZMod N β†’ E) :
              dft (dft Ξ¦) = fun (j : ZMod N) => ↑N β€’ Ξ¦ (-j)

              Fourier inversion formula, discrete case.

              theorem ZMod.dft_comp_unitMul {N : β„•} [NeZero N] {E : Type u_1} [AddCommGroup E] [Module β„‚ E] (Ξ¦ : ZMod N β†’ E) (u : (ZMod N)Λ£) (k : ZMod N) :
              dft (fun (j : ZMod N) => Ξ¦ (↑u * j)) k = dft Ξ¦ (↑u⁻¹ * k)
              theorem ZMod.dft_even_iff {N : β„•} [NeZero N] {Ξ¦ : ZMod N β†’ β„‚} :

              The discrete Fourier transform of Ξ¦ is even if and only if Ξ¦ itself is.

              theorem ZMod.dft_odd_iff {N : β„•} [NeZero N] {Ξ¦ : ZMod N β†’ β„‚} :

              The discrete Fourier transform of Ξ¦ is odd if and only if Ξ¦ itself is.

              For a primitive Dirichlet character Ο‡, the Fourier transform of Ο‡ is a constant multiple of χ⁻¹ (and the constant is essentially the Gauss sum).