Module

Duality.lean

Nyll.ProCGroups.Duality
20 declarations indexed from sourceView source ↗

Pro C Groups / Duality

This module formalizes elementary duality constructions for profinite groups.

Imports7
  • Mathlib.Algebra.Polynomial.Roots
  • Mathlib.Analysis.Fourier.FiniteAbelian.PontryaginDuality
  • Mathlib.FieldTheory.Finite.Basic
  • Mathlib.GroupTheory.Torsion
  • Mathlib.Topology.Algebra.PontryaginDual
  • Mathlib.Topology.Instances.AddCircle.DenseSubgroup
  • Nyll.ProCGroups.Topologies.ContinuousMulEquiv
Imported by2

Declarations

ProCGroups.Duality.properClosedAddSubgroup_addCircle_finite

A closed proper additive subgroup of an additive circle AddCircle p is finite.

Source context 5 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
theorem properClosedAddSubgroup_addCircle_finite
    {p : ℝ} [Fact (0 < p)] (B : AddSubgroup (AddCircle p))
    (hBclosed : IsClosed (B : Set (AddCircle p))) (hBproper : B ≠ ⊤) :
    Finite B
ProCGroups.Duality.circleSubgroupToAddCircleSubgroup

Transport a multiplicative subgroup of Circle to the standard additive circle ℝ / (2π)ℤ. This is convenient for applying AddCircle subgroup-classification lemmas.

Source context 5 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
def circleSubgroupToAddCircleSubgroup (A : Subgroup Circle) :
    AddSubgroup (AddCircle (2 * Real.pi))
ProCGroups.Duality.mem_circleSubgroupToAddCircleSubgroup_iff

Membership in the transported additive subgroup is detected by the circle homeomorphism.

Source context 5 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
theorem mem_circleSubgroupToAddCircleSubgroup_iff
    {A : Subgroup Circle} {θ : AddCircle (2 * Real.pi)} :
    θ ∈ circleSubgroupToAddCircleSubgroup A ↔ AddCircle.homeomorphCircle' θ ∈ A
ProCGroups.Duality.isClosed_circleSubgroupToAddCircleSubgroup

Transporting a closed circle subgroup to the additive circle preserves closedness.

Source context 5 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
theorem isClosed_circleSubgroupToAddCircleSubgroup
    (A : Subgroup Circle) (hAclosed : IsClosed (A : Set Circle)) :
    IsClosed (circleSubgroupToAddCircleSubgroup A : Set (AddCircle (2 * Real.pi)))
ProCGroups.Duality.circleSubgroupToAddCircleSubgroup_ne_top

Transporting a proper circle subgroup to the additive circle preserves properness.

Source context 5 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
theorem circleSubgroupToAddCircleSubgroup_ne_top
    (A : Subgroup Circle) (hAproper : A ≠ ⊤) :
    circleSubgroupToAddCircleSubgroup A ≠ ⊤
ProCGroups.Duality.properClosedSubgroup_circleTarget_finite

Every proper closed subgroup of the circle is finite.

Source context 5 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
theorem properClosedSubgroup_circleTarget_finite
    (A : Subgroup Circle) (hAclosed : IsClosed (A : Set Circle))
    (hAproper : A ≠ ⊤) :
    Finite A
ProCGroups.Duality.circleTarget_one_ne_exp_pi

The circle target contains two distinct points.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
variable {G}
theorem circleTarget_one_ne_exp_pi :
    (1 : Circle) ≠ Circle.exp Real.pi
ProCGroups.Duality.not_totallyDisconnectedSpace_circleTarget

The circle target is not totally disconnected.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
variable {G}
theorem not_totallyDisconnectedSpace_circleTarget :
    ¬ TotallyDisconnectedSpace Circle
ProCGroups.Duality.subgroup_eq_bot_of_isCompact_subset_rightHalfPlane

A compact subgroup of T contained in the open right half-plane is trivial.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
variable {G}
theorem subgroup_eq_bot_of_isCompact_subset_rightHalfPlane
    (A : Subgroup Circle) (hAcompact : IsCompact (A : Set Circle))
    (hApos : ∀ z ∈ A, 0 < Complex.re (z : ℂ)) :
    A = ⊥
ProCGroups.Duality.dualGroup_discrete_of_compact

The Pontryagin dual of a compact abelian group is discrete.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
variable {G}
theorem dualGroup_discrete_of_compact [CompactSpace G] :
    DiscreteTopology (PontryaginDual G)
ProCGroups.Duality.dualCompactSpaceOfDiscreteTopology

A discrete abelian group has compact Pontryagin dual.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
variable {G}
instance dualCompactSpaceOfDiscreteTopology [DiscreteTopology G] :
    CompactSpace (PontryaginDual G)
ProCGroups.Duality.dualGroup_compact_of_discrete

The Pontryagin dual of a discrete abelian group is compact.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
variable {G}
theorem dualGroup_compact_of_discrete [DiscreteTopology G] :
    CompactSpace (PontryaginDual G)
ProCGroups.Duality.torsionPowerWitnessOfElement
Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
variable {G}
def torsionPowerWitnessOfElement
    {G : Type u} [CommGroup G] (htors : IsMulTorsion G) (g : G) :
    {n : ℕ // 0 < n ∧ g ^ n = 1}
ProCGroups.Duality.dualGroup_totallyDisconnected_of_discrete_torsion

The Pontryagin dual of a discrete torsion abelian group is totally disconnected.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
variable {G}
theorem dualGroup_totallyDisconnected_of_discrete_torsion
    (G : Type u) [CommGroup G] [TopologicalSpace G]
    [DiscreteTopology G] (htors : IsMulTorsion G) :
    TotallyDisconnectedSpace (PontryaginDual G)
ProCGroups.Duality.dualGroupEquivAddCharCircle

For a discrete abelian group, multiplicative characters to the circle are the same as additive characters on the additive type synonym.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
variable {G}
def dualGroupEquivAddCharCircle
    (A : Type u) [CommGroup A] [TopologicalSpace A] [DiscreteTopology A] :
    PontryaginDual A ≃ AddChar (Additive A) Circle where
  toFun := fun χ =>
    { toFun := fun a => χ a.toMul
      map_zero_eq_one' := by simp only [toMul_zero, map_one]
      map_add_eq_mul' := by
        intro a b
        exact map_mul χ a.toMul b.toMul }
  invFun := fun χ =>
    { toFun := fun a => χ (Additive.ofMul a)
      map_one' := by simp only [ofMul_one, AddChar.map_zero_eq_one]
      map_mul' := by
        intro a b
        exact χ.map_add_eq_mul (Additive.ofMul a) (Additive.ofMul b)
      continuous_toFun := continuous_of_discreteTopology }
  left_inv := by
    intro χ
    apply ContinuousMonoidHom.ext
    intro a
    rfl
  right_inv := by
    intro χ
    ext a
    rfl
ProCGroups.Duality.dualGroup_finite_of_finite_discrete

The Pontryagin dual of a finite discrete abelian group is finite.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
variable {G}
theorem dualGroup_finite_of_finite_discrete
    (A : Type u) [CommGroup A] [TopologicalSpace A] [Finite A] [DiscreteTopology A] :
    Finite (PontryaginDual A)
ProCGroups.Duality.card_dualGroup_eq_card_of_finite_discrete

A finite discrete abelian group and its Pontryagin dual have the same cardinality.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
variable {G}
theorem card_dualGroup_eq_card_of_finite_discrete
    (A : Type u) [CommGroup A] [TopologicalSpace A] [Finite A] [DiscreteTopology A] :
    Nat.card (PontryaginDual A) = Nat.card A
ProCGroups.Duality.dualGroupEquiv

A topological group equivalence induces an equivalence on Pontryagin duals.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
variable {G}
def dualGroupEquiv
    {H : Type v} [CommGroup H] [TopologicalSpace H]
    (e : G ≃ₜ* H) :
    PontryaginDual H ≃* PontryaginDual G
ProCGroups.Duality.dualGroupContinuousMulEquiv

A topological group equivalence induces a continuous equivalence on Pontryagin duals.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
variable {G}
def dualGroupContinuousMulEquiv
    {H : Type v} [CommGroup H] [TopologicalSpace H]
    (e : G ≃ₜ* H) :
    PontryaginDual H ≃ₜ* PontryaginDual G
ProCGroups.Duality.dualGroupContinuousMulEquiv_toMulEquiv

Forgetting topology from the dual homeomorphism gives the algebraic dual-group equivalence.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped Topology
namespace ProCGroups.Duality
universe u v
section Basic
variable (G : Type u) [CommGroup G] [TopologicalSpace G]
variable {G}
theorem dualGroupContinuousMulEquiv_toMulEquiv
    {H : Type v} [CommGroup H] [TopologicalSpace H]
    (e : G ≃ₜ* H) :
    (dualGroupContinuousMulEquiv (G := G) e).toMulEquiv = dualGroupEquiv (G := G) e