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. 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
  • One or more equations did not get rendered due to their size.
Instances For
    @[simp]
    theorem AddChar.zmod_intCast (n : ) [NeZero n] (x y : ) :
    (AddChar.zmod n x) y = Circle.exp (2 * Real.pi * (x * y / n))
    @[simp]
    theorem AddChar.zmod_zero (n : ) [NeZero n] :
    @[simp]
    theorem AddChar.zmod_add {n : } [NeZero n] (x y : ZMod n) :
    @[simp]
    theorem AddChar.zmod_inj {n : } [NeZero n] {x y : ZMod n} :

    AddChar.zmod bundled as an AddChar.

    Equations
    • AddChar.zmodHom = { toFun := AddChar.zmod n, map_zero_eq_one' := , map_add_eq_mul' := }
    Instances For

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

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        @[simp]

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

        Equations
        • AddChar.zmodAddEquiv = AddEquiv.ofBijective (AddChar.circleEquivComplex.toAddMonoidHom.comp AddChar.zmodHom.toAddMonoidHom)
        Instances For
          @[simp]
          theorem AddChar.zmodAddEquiv_apply {n : } [NeZero n] (x : ZMod n) :
          AddChar.zmodAddEquiv x = AddChar.circleEquivComplex (AddChar.zmod n x)
          def AddChar.complexBasis (α : Type u_1) [AddCommGroup α] [Finite α] :
          Basis (AddChar α ) (α)

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

          Equations
          Instances For
            @[simp]
            theorem AddChar.coe_complexBasis (α : Type u_1) [AddCommGroup α] [Finite α] :
            (AddChar.complexBasis α) = DFunLike.coe
            @[simp]
            theorem AddChar.complexBasis_apply {α : Type u_1} [AddCommGroup α] [Finite α] (ψ : AddChar α ) :
            (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
            theorem AddChar.doubleDualEmb_injective {α : Type u_1} [AddCommGroup α] [Finite α] :
            Function.Injective AddChar.doubleDualEmb
            theorem AddChar.doubleDualEmb_bijective {α : Type u_1} [AddCommGroup α] [Finite α] :
            Function.Bijective AddChar.doubleDualEmb
            @[simp]
            theorem AddChar.doubleDualEmb_inj {α : Type u_1} [AddCommGroup α] {a b : α} [Finite α] :
            AddChar.doubleDualEmb a = AddChar.doubleDualEmb b a = b
            @[simp]
            theorem AddChar.doubleDualEmb_eq_zero {α : Type u_1} [AddCommGroup α] {a : α} [Finite α] :
            AddChar.doubleDualEmb a = 0 a = 0
            theorem AddChar.doubleDualEmb_ne_zero {α : Type u_1} [AddCommGroup α] {a : α} [Finite α] :
            AddChar.doubleDualEmb a 0 a 0

            The double dual isomorphism of a finite abelian group.

            Equations
            Instances For
              @[simp]
              theorem AddChar.coe_doubleDualEquiv {α : Type u_1} [AddCommGroup α] [Finite α] :
              AddChar.doubleDualEquiv = AddChar.doubleDualEmb
              @[simp]
              theorem AddChar.doubleDualEmb_doubleDualEquiv_symm_apply {α : Type u_1} [AddCommGroup α] [Finite α] (a : AddChar (AddChar α ) ) :
              AddChar.doubleDualEmb (AddChar.doubleDualEquiv.symm a) = a
              @[simp]
              theorem AddChar.doubleDualEquiv_symm_doubleDualEmb_apply {α : Type u_1} [AddCommGroup α] [Finite α] (a : AddChar (AddChar α ) ) :
              AddChar.doubleDualEquiv.symm (AddChar.doubleDualEmb a) = a
              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 α] [Fintype α] [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