ProCGroups.Duality

21 Theorem | 5 Definition | 1 Instance

This module formalizes elementary duality constructions for profinite groups.

import
Imported by
None

Declarations

theorem properClosedAddSubgroup_addCircle_finite
    {p : ℝ} [Fact (0 < p)] (B : AddSubgroup (AddCircle p))
    (hBclosed : IsClosed (B : Set (AddCircle p))) (hBproper : B ≠ ⊤) :
    Finite B

A closed proper additive subgroup of \(\mathrm{AddCircle}(p)\) is finite.

Show proof
def circleSubgroupToAddCircleSubgroup (A : Subgroup Circle) :
    AddSubgroup (AddCircle (2 * Real.pi)) := by
  refine
    { carrier := {θ | AddCircle.homeomorphCircle' θ ∈ A}
      zero_mem' := by
        simp only [AddCircle.homeomorphCircle'_apply, Set.mem_setOf_eq, Real.Angle.toCircle_zero, one_mem]
      add_mem' := ?_
      neg_mem' := ?_ }
  · intro a b ha hb
    change AddCircle.homeomorphCircle' (a + b) ∈ A
    rw [show AddCircle.homeomorphCircle' (a + b) =
      AddCircle.homeomorphCircle' a * AddCircle.homeomorphCircle' b by
      change Real.Angle.toCircle (a + b) = Real.Angle.toCircle a * Real.Angle.toCircle b
      exact Real.Angle.toCircle_add a b]
    exact A.mul_mem ha hb
  · intro a ha
    change AddCircle.homeomorphCircle' (-a) ∈ A
    rw [show AddCircle.homeomorphCircle' (-a) = (AddCircle.homeomorphCircle' a)⁻¹ by
      change Real.Angle.toCircle (-a) = (Real.Angle.toCircle a)⁻¹
      exact Real.Angle.toCircle_neg a]
    exact A.inv_mem ha

Transport a multiplicative subgroup of Circle to the standard additive circle \(\mathbb{R} / (2\pi)\mathbb{Z}\). This is convenient for applying AddCircle subgroup-classification lemmas.

@[simp] theorem mem_circleSubgroupToAddCircleSubgroup_iff
    {A : Subgroup Circle} {θ : AddCircle (2 * Real.pi)} :
    θ ∈ circleSubgroupToAddCircleSubgroup A ↔ AddCircle.homeomorphCircle' θ ∈ A

Membership in the additive circle subgroup associated to a circle subgroup is equivalent to the displayed coordinate condition.

Show proof
theorem isClosed_circleSubgroupToAddCircleSubgroup
    (A : Subgroup Circle) (hAclosed : IsClosed (A : Set Circle)) :
    IsClosed (circleSubgroupToAddCircleSubgroup A : Set (AddCircle (2 * Real.pi)))

The dual-group construction is functorial and is evaluated pointwise on continuous characters.

Show proof
theorem circleSubgroupToAddCircleSubgroup_ne_top
    (A : Subgroup Circle) (hAproper : A ≠ ⊤) :
    circleSubgroupToAddCircleSubgroup A ≠ ⊤

The dual-group construction is functorial and is evaluated pointwise on continuous characters.

Show proof
theorem properClosedSubgroup_circleTarget_finite
    (A : Subgroup Circle) (hAclosed : IsClosed (A : Set Circle))
    (hAproper : A ≠ ⊤) :
    Finite A

Every proper closed subgroup of the circle is finite.

Show proof
theorem circleTarget_one_ne_exp_pi :
    (1 : Circle) ≠ Circle.exp Real.pi

The circle target contains two distinct points.

Show proof
theorem not_totallyDisconnectedSpace_circleTarget :
    ¬ TotallyDisconnectedSpace Circle

The circle target is not totally disconnected.

Show proof
theorem subgroup_eq_bot_of_isCompact_subset_rightHalfPlane
    (A : Subgroup Circle) (hAcompact : IsCompact (A : Set Circle))
    (hApos : ∀ z ∈ A, 0 < Complex.re (z : ℂ)) :
    A = ⊥

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

Show proof
theorem dualGroup_discrete_of_compact [CompactSpace G] :
    DiscreteTopology (PontryaginDual G)

The Pontryagin dual of a compact abelian group is discrete.

Show proof
instance dualCompactSpaceOfDiscreteTopology [DiscreteTopology G] :
    CompactSpace (PontryaginDual G) := by
  infer_instance

A discrete abelian group has compact Pontryagin dual.

theorem dualGroup_compact_of_discrete [DiscreteTopology G] :
    CompactSpace (PontryaginDual G)

The Pontryagin dual of a discrete abelian group is compact.

Show proof
private noncomputable def torsionPowerWitnessOfElement
    {G : Type u} [CommGroup G] (htors : Monoid.IsTorsion G) (g : G) : ℕ :=
  Classical.choose <| (isOfFinOrder_iff_pow_eq_one).mp (htors g)

The torsion-power witness supplies the power relation required for the element.

private theorem torsionPowerWitnessOfElement_pos
    {G : Type u} [CommGroup G] (htors : Monoid.IsTorsion G) (g : G) :
    0 < torsionPowerWitnessOfElement htors g

The dual-group construction is functorial and is evaluated pointwise on continuous characters.

Show proof
private theorem pow_torsionPowerWitnessOfElement_eq_one
    {G : Type u} [CommGroup G] (htors : Monoid.IsTorsion G) (g : G) :
    g ^ torsionPowerWitnessOfElement htors g = 1

The torsion-power witness supplies the power relation required for the element.

Show proof
theorem dualGroup_totallyDisconnected_of_discrete_torsion
    (G : Type u) [CommGroup G] [TopologicalSpace G]
    [DiscreteTopology G] (htors : Monoid.IsTorsion G) :
    TotallyDisconnectedSpace (PontryaginDual G)

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

Show proof
theorem dualGroup_isProfiniteGroup_of_discrete_torsion
    (G : Type u) [CommGroup G] [TopologicalSpace G] [IsTopologicalGroup G]
    [DiscreteTopology G] (htors : Monoid.IsTorsion G) :
    IsProfiniteGroup (PontryaginDual G)

The Pontryagin dual of a discrete torsion abelian group is profinite.

Show proof
@[simp] theorem dualGroup_map_apply
    {H : Type v} [CommGroup H] [TopologicalSpace H]
    (f : G →ₜ* H) (χ : PontryaginDual H) (g : G) :
    PontryaginDual.map f χ g = χ (f g)

The dual-group map is evaluated by precomposition with the original homomorphism.

Show proof
@[simp] theorem dualGroup_map_one :
    PontryaginDual.map (1 : G →ₜ* G) = 1

Identity compatibility for the induced dual map.

Show proof
@[simp] theorem dualGroup_map_comp
    {H K : Type*} [CommGroup H] [TopologicalSpace H]
    [CommGroup K] [TopologicalSpace K]
    (g : H →ₜ* K) (f : G →ₜ* H) :
    PontryaginDual.map (g.comp f) = (PontryaginDual.map f).comp (PontryaginDual.map g)

Composition compatibility for the induced dual map.

Show proof
@[simp] theorem dualGroup_map_mul
    {H : Type*} [CommGroup H] [TopologicalSpace H] [IsTopologicalGroup H]
    (f₁ f₂ : G →ₜ* H) :
    PontryaginDual.map (f₁ * f₂) = PontryaginDual.map f₁ * PontryaginDual.map f₂

Multiplicative compatibility for the induced dual map.

Show proof
noncomputable 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

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

theorem dualGroup_finite_of_finite_discrete
    (A : Type u) [CommGroup A] [TopologicalSpace A] [Finite A] [DiscreteTopology A] :
    Finite (PontryaginDual A)

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

Show proof
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

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

Show proof
noncomputable def dualGroupEquiv
    {H : Type v} [CommGroup H] [TopologicalSpace H]
    (e : G ≃ₜ* H) :
    PontryaginDual H ≃* PontryaginDual G :=
{ toFun := PontryaginDual.map e.toContinuousMonoidHom
  invFun := PontryaginDual.map e.symm.toContinuousMonoidHom
  left_inv := by
    intro χ
    apply ContinuousMonoidHom.ext
    intro g
    rw [dualGroup_map_apply, dualGroup_map_apply]
    simp only [ContinuousMulEquiv.toContinuousMonoidHom_apply, ContinuousMulEquiv.apply_symm_apply]
  right_inv := by
    intro χ
    apply ContinuousMonoidHom.ext
    intro g
    rw [dualGroup_map_apply, dualGroup_map_apply]
    simp only [ContinuousMulEquiv.toContinuousMonoidHom_apply, ContinuousMulEquiv.symm_apply_apply]
  map_mul' := by
    intro χ ψ
    exact (PontryaginDual.map e.toContinuousMonoidHom).map_mul χ ψ }

A topological group equivalence induces an equivalence on Pontryagin duals.

noncomputable def dualGroupContinuousMulEquiv
    {H : Type v} [CommGroup H] [TopologicalSpace H]
    (e : G ≃ₜ* H) :
    PontryaginDual H ≃ₜ* PontryaginDual G :=
  ContinuousMulEquiv.ofHomInv
    (PontryaginDual.map e.toContinuousMonoidHom)
    (PontryaginDual.map e.symm.toContinuousMonoidHom)
    (by
      intro χ
      apply ContinuousMonoidHom.ext
      intro h
      rw [dualGroup_map_apply, dualGroup_map_apply]
      simp only [ContinuousMulEquiv.toContinuousMonoidHom_apply, ContinuousMulEquiv.apply_symm_apply])
    (by
      intro χ
      apply ContinuousMonoidHom.ext
      intro g
      rw [dualGroup_map_apply, dualGroup_map_apply]
      simp only [ContinuousMulEquiv.toContinuousMonoidHom_apply, ContinuousMulEquiv.symm_apply_apply])

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

@[simp] theorem dualGroupContinuousMulEquiv_toMulEquiv
    {H : Type v} [CommGroup H] [TopologicalSpace H]
    (e : G ≃ₜ* H) :
    (dualGroupContinuousMulEquiv (G := G) e).toMulEquiv = dualGroupEquiv (G := G) e

The underlying multiplicative equivalence of the dual-group continuous multiplicative equivalence is compatible with the profinite topology and gives the continuous map or equivalence determined by the finite-quotient data.

Show proof