Documentation

Mathlib.Analysis.Fourier.FiniteAbelian.PontryaginDuality

Pontryagin duality for finite abelian groups #

This file proves the Pontryagin duality in case of finite abelian groups. This states that any finite abelian group is canonically isomorphic to its double dual (the space of complex-valued characters of its space of complex-valued characters).

We first prove it for ZMod n and then extend to all finite abelian groups using the Structure Theorem.

TODO #

Reuse the work done in Mathlib/GroupTheory/FiniteAbelian/Duality.lean. This requires to write some more glue.

def AddChar.zmod (n : ) [NeZero n] (x : ZMod n) :

Indexing of the complex characters of ZMod n. AddChar.zmod n x is the character sending y to e ^ (2 * π * i * x * y / n).

Equations
    Instances For
      @[simp]
      theorem AddChar.zmod_intCast (n : ) [NeZero n] (x y : ) :
      (zmod n x) y = Circle.exp (2 * Real.pi * (x * y / n))
      @[simp]
      theorem AddChar.zmod_zero (n : ) [NeZero n] :
      zmod n 0 = 1
      @[simp]
      theorem AddChar.zmod_add {n : } [NeZero n] (x y : ZMod n) :
      zmod n (x + y) = zmod n x * zmod n y
      @[simp]
      theorem AddChar.zmod_inj {n : } [NeZero n] {x y : ZMod n} :
      zmod n x = zmod n y x = y

      AddChar.zmod bundled as an AddChar.

      Equations
        Instances For

          The circle-valued characters of a finite abelian group are the same as its complex-valued characters.

          Equations
            Instances For
              @[simp]

              ZMod n is (noncanonically) isomorphic to its group of characters.

              Equations
                Instances For
                  def AddChar.complexBasis (α : Type u_1) [AddCommGroup α] [Finite α] :

                  Complex-valued characters of a finite abelian group α form a basis of α → ℂ.

                  Equations
                    Instances For
                      @[simp]
                      @[simp]
                      theorem AddChar.complexBasis_apply {α : Type u_1} [AddCommGroup α] [Finite α] (ψ : AddChar α ) :
                      (complexBasis α) ψ = ψ
                      theorem AddChar.exists_apply_ne_zero {α : Type u_1} [AddCommGroup α] {a : α} [Finite α] :
                      (∃ (ψ : AddChar α ), ψ a 1) a 0
                      theorem AddChar.forall_apply_eq_zero {α : Type u_1} [AddCommGroup α] {a : α} [Finite α] :
                      (∀ (ψ : AddChar α ), ψ a = 1) a = 0
                      @[simp]
                      theorem AddChar.doubleDualEmb_inj {α : Type u_1} [AddCommGroup α] {a b : α} [Finite α] :
                      @[simp]
                      theorem AddChar.doubleDualEmb_eq_zero {α : Type u_1} [AddCommGroup α] {a : α} [Finite α] :
                      theorem AddChar.doubleDualEmb_ne_zero {α : Type u_1} [AddCommGroup α] {a : α} [Finite α] :

                      The double dual isomorphism of a finite abelian group.

                      Equations
                        Instances For
                          theorem AddChar.sum_apply_eq_ite {α : Type u_1} [AddCommGroup α] [Fintype α] [DecidableEq α] (a : α) :
                          ψ : AddChar α , ψ a = if a = 0 then (Fintype.card α) else 0
                          theorem AddChar.expect_apply_eq_ite {α : Type u_1} [AddCommGroup α] [Finite α] [DecidableEq α] (a : α) :
                          (Finset.univ.expect fun (ψ : AddChar α ) => ψ a) = if a = 0 then 1 else 0
                          theorem AddChar.sum_apply_eq_zero_iff_ne_zero {α : Type u_1} [AddCommGroup α] {a : α} [Finite α] :
                          ψ : AddChar α , ψ a = 0 a 0
                          theorem AddChar.sum_apply_ne_zero_iff_eq_zero {α : Type u_1} [AddCommGroup α] {a : α} [Finite α] :
                          ψ : AddChar α , ψ a 0 a = 0
                          theorem AddChar.expect_apply_eq_zero_iff_ne_zero {α : Type u_1} [AddCommGroup α] {a : α} [Finite α] :
                          (Finset.univ.expect fun (ψ : AddChar α ) => ψ a) = 0 a 0
                          theorem AddChar.expect_apply_ne_zero_iff_eq_zero {α : Type u_1} [AddCommGroup α] {a : α} [Finite α] :
                          (Finset.univ.expect fun (ψ : AddChar α ) => ψ a) 0 a = 0