ProCGroups.Generation.QuotientGeneratorConvergingPairs

22 Theorem | 9 Definition | 1 Abbreviation | 1 Structure | 3 Instance

This module sets up the finite-stage and inverse-limit description of the construction. It records the stage maps, projections, and comparison lemmas used to pass back to the completed object.

import
Imported by

Declarations

structure QuotientGeneratorConvergingPair where
  N : Subgroup G
  normal_N : N.Normal
  closed_N : IsClosed (N : Set G)
  Y : Set (G ⧸ N)
  subset_compl : Y ⊆ ({1} : Set (G ⧸ N))ᶜ
  converges : ConvergesToOne (G := G ⧸ N) Y
  generates : TopologicallyGenerates (G := G ⧸ N) Y

A quotient generator converging pair records compatible source and quotient generator data.

def QuotientGeneratorConvergingPair.sourceSet
    (A : QuotientGeneratorConvergingPair (G := G)) :
    Set (G ⧸ A.N) :=
  ({1} : Set (G ⧸ A.N)) ∪ A.Y

The source set is the set of generators carried by the quotient generator pair.

abbrev QuotientGeneratorConvergingPair.Source
    (A : QuotientGeneratorConvergingPair (G := G)) :=
  ↥(A.sourceSet)

The source of a quotient generator-converging pair consists of the original group, index data, and generator family before passage to the quotient.

instance instTopologicalSpaceQuotientGeneratorConvergingPairSource
    (A : QuotientGeneratorConvergingPair (G := G)) :
    TopologicalSpace A.Source :=
  inferInstanceAs (TopologicalSpace ↥(A.sourceSet))

The constructed object carries the topological space structure inherited from its construction.

def QuotientGeneratorConvergingPair.sourceOne
    (A : QuotientGeneratorConvergingPair (G := G)) : A.Source :=
  ⟨1, Or.inl rfl

The identity element belongs to the source data of the quotient generator pair.

def QuotientGeneratorConvergingPair.sourceOfY
    (A : QuotientGeneratorConvergingPair (G := G)) (y : A.Y) : A.Source :=
  ⟨y.1, Or.inr y.2⟩

The source of the selected generator is the source specified by the quotient generator pair.

theorem QuotientGeneratorConvergingPair.source_cases
    (A : QuotientGeneratorConvergingPair (G := G)) (x : A.Source) :
    x = A.sourceOne ∨ ∃ y : A.Y, x = A.sourceOfY y

Every source element of a quotient generator pair is either the distinguished identity source or comes from an element of the generator set.

Show proof
def QuotientGeneratorConvergingPair.yImage
    (A B : QuotientGeneratorConvergingPair (G := G))
    (σ : A.Source → G ⧸ B.N) : Set (G ⧸ B.N) :=
  Set.range fun y : A.Y => σ (A.sourceOfY y)

The image of the distinguished generator set of one quotient generator pair under a chosen source map into another quotient.

def QuotientGeneratorConvergingPair.Le
    (A B : QuotientGeneratorConvergingPair (G := G)) : Prop :=
  ∃ hBA : B.N ≤ A.N,
    ∃ σ : A.Source → (G ⧸ B.N),
      Continuous σ ∧
      (∀ x : A.Source, leftQuotientProjection (B.N) (A.N) hBA (σ x) = x.1) ∧
      σ A.sourceOne = 1 ∧
      (∀ y : A.Y, σ (A.sourceOfY y) ∈ B.Y) ∧
      B.Y \ A.yImage B σ ⊆
        {q : G ⧸ B.N | leftQuotientProjection (B.N) (A.N) hBA q = 1}

This relation orders quotient generator pairs by refinement of their quotient data.

instance instLEQuotientGeneratorConvergingPair :
    LE (QuotientGeneratorConvergingPair (G := G)) where
  le := QuotientGeneratorConvergingPair.Le

The order relation is the refinement relation on the corresponding data.

instance instPreorderQuotientGeneratorConvergingPair :
    Preorder (QuotientGeneratorConvergingPair (G := G)) where
  le_refl A := by
    refine ⟨le_rfl, Subtype.val, ?_, ?_, rfl, ?_, ?_⟩
    · change Continuous (fun x : A.Source => (x : G ⧸ A.N))
      exact continuous_subtype_val
    · intro q
      simp only [leftQuotientProjection_id, id_eq]
    · intro y
      simp only [QuotientGeneratorConvergingPair.sourceOfY, Subtype.coe_prop]
    · simp only [QuotientGeneratorConvergingPair.yImage, QuotientGeneratorConvergingPair.sourceOfY,
  Subtype.range_coe_subtype, setOf_mem_eq, sdiff_self, bot_eq_empty, leftQuotientProjection_id, id_eq,
  setOf_eq_eq_singleton, subset_singleton_iff, mem_empty_iff_false, IsEmpty.forall_iff, implies_true]
  le_trans A B C hAB hBC := by
    classical
    rcases hAB with ⟨hBA, σAB, hσABcont, hσABright, hσABone, hσABmem, hσABdiff⟩
    rcases hBC with ⟨hCB, σBC, hσBCcont, hσBCright, hσBCone, hσBCmem, hσBCdiff⟩
    let τ : A.Source → B.Source := fun x =>
      ⟨σAB x, by
        rcases A.source_cases x with h1 | ⟨y, rfl⟩
        · rw [h1]
          exact Or.inl hσABone
        · exact Or.inr (hσABmem y)⟩
    have hτcont : Continuous τ := by
      exact hσABcont.subtype_mk <| by
        intro x
        rcases A.source_cases x with h1 | ⟨y, rfl⟩
        · rw [h1]
          exact Or.inl hσABone
        · exact Or.inr (hσABmem y)
    have hτone : τ A.sourceOne = B.sourceOne := by
      apply Subtype.ext
      exact hσABone
    have hτofY (y : A.Y) :
        τ (A.sourceOfY y) = B.sourceOfY ⟨σAB (A.sourceOfY y), hσABmem y⟩ := by
      apply Subtype.ext
      rfl
    have hEqBC :
        ∀ (y : B.Y) {q : G ⧸ C.N},
          q ∈ C.Y →
          leftQuotientProjection (C.N) (B.N) hCB q = y.1 →
            q = σBC (B.sourceOfY y) := by
      intro y q hqY hqproj
      by_cases hqim : q ∈ B.yImage C σBC
      · rcases hqim with ⟨y', hy'Eq⟩
        have hproj' :
            leftQuotientProjection (C.N) (B.N) hCB q = y'.1 := by
          simpa [hy'Eq] using hσBCright (B.sourceOfY y')
        have hyEq : y' = y := by
          apply Subtype.ext
          exact hproj'.symm.trans hqproj
        simpa [hyEq] using hy'Eq.symm
      · have hker :
          leftQuotientProjection (C.N) (B.N) hCB q = 1 := hσBCdiff ⟨hqY, hqim⟩
        have hyne : y.1 ≠ 1 := by
          simpa using B.subset_compl y.2
        exact False.elim (hyne (hqproj.symm.trans hker))
    refine ⟨hCB.trans hBA, fun x => σBC (τ x), hσBCcont.comp hτcont, ?_, ?_, ?_, ?_⟩
    · intro x
      calc
        leftQuotientProjection (C.N) (A.N) (hCB.trans hBA) (σBC (τ x)) =
            leftQuotientProjection (B.N) (A.N) hBA
              (leftQuotientProjection (C.N) (B.N) hCB (σBC (τ x))) := by
                exact leftQuotientProjection_comp_apply_symm
                  (K := (C.N : Subgroup G)) (H := (B.N : Subgroup G))
                  (L := (A.N : Subgroup G)) hCB hBA (σBC (τ x))
        _ = leftQuotientProjection (B.N) (A.N) hBA ((τ x).1) := by
              rw [hσBCright (τ x)]
        _ = leftQuotientProjection (B.N) (A.N) hBA (σAB x) := by
              rfl
        _ = x.1 := hσABright x
    · simpa [hτone] using hσBCone
    · intro y
      let yB : B.Y := ⟨σAB (A.sourceOfY y), hσABmem y⟩
      simpa [hτofY, yB] using hσBCmem yB
    · intro q hq
      rcases hq with ⟨hqY, hqnotAC⟩
      by_cases hqimB : q ∈ B.yImage C σBC
      · rcases hqimB with ⟨z, hzEq⟩
        have hzNotInA : z.1 ∉ A.yImage B σAB := by
          intro hzInA
          rcases hzInA with ⟨y, hyEq⟩
          let yB : B.Y := ⟨σAB (A.sourceOfY y), hσABmem y⟩
          have hprojqz :
              leftQuotientProjection (C.N) (B.N) hCB q = z.1 := by
            simpa [hzEq] using hσBCright (B.sourceOfY z)
          have hprojq :
              leftQuotientProjection (C.N) (B.N) hCB q = yB.1 := by
            calc
              leftQuotientProjection (C.N) (B.N) hCB q = z.1 := hprojqz
              _ = yB.1 := by
                    simpa [yB] using hyEq.symm
          have hqEq : q = σBC (B.sourceOfY yB) := hEqBC yB hqY hprojq
          have hqInAC : q ∈ A.yImage C (fun x => σBC (τ x)) := by
            refine ⟨y, ?_⟩
            simpa [hτofY] using hqEq.symm
          exact hqnotAC hqInAC
        have hzProjA :
            leftQuotientProjection (B.N) (A.N) hBA z.1 = 1 :=
          hσABdiff ⟨z.2, hzNotInA⟩
        have hprojqB :
            leftQuotientProjection (C.N) (B.N) hCB q = z.1 := by
          simpa [hzEq] using hσBCright (B.sourceOfY z)
        calc
          leftQuotientProjection (C.N) (A.N) (hCB.trans hBA) q =
              leftQuotientProjection (B.N) (A.N) hBA
                (leftQuotientProjection (C.N) (B.N) hCB q) := by
                  exact leftQuotientProjection_comp_apply_symm
                    (K := (C.N : Subgroup G)) (H := (B.N : Subgroup G))
                    (L := (A.N : Subgroup G)) hCB hBA q
          _ = leftQuotientProjection (B.N) (A.N) hBA z.1 := by
                rw [hprojqB]
          _ = 1 := hzProjA
      · have hprojqB :
          leftQuotientProjection (C.N) (B.N) hCB q = 1 := hσBCdiff ⟨hqY, hqimB⟩
        calc
          leftQuotientProjection (C.N) (A.N) (hCB.trans hBA) q =
              leftQuotientProjection (B.N) (A.N) hBA
                (leftQuotientProjection (C.N) (B.N) hCB q) := by
                  exact leftQuotientProjection_comp_apply_symm
                    (K := (C.N : Subgroup G)) (H := (B.N : Subgroup G))
                    (L := (A.N : Subgroup G)) hCB hBA q
          _ = leftQuotientProjection (B.N) (A.N) hBA 1 := by
                rw [hprojqB]
          _ = 1 := by
                rfl

The preorder is induced by refinement of the corresponding data.

noncomputable def QuotientGeneratorConvergingPair.le_hBA
    {A B : QuotientGeneratorConvergingPair (G := G)} (hAB : A ≤ B) :
    B.N ≤ A.N :=
  Classical.choose hAB

The refinement relation includes the required compatibility between the source and target quotient data.

noncomputable def QuotientGeneratorConvergingPair.le_map
    {A B : QuotientGeneratorConvergingPair (G := G)} (hAB : A ≤ B) :
    A.Source → G ⧸ B.N :=
  Classical.choose (Classical.choose_spec hAB)

The refinement relation provides the induced map between quotient generator pairs.

theorem QuotientGeneratorConvergingPair.le_map_continuous
    {A B : QuotientGeneratorConvergingPair (G := G)} (hAB : A ≤ B) :
    Continuous (A.le_map hAB)

For a refinement of quotient generator pairs, the chosen lift map between source sets is continuous.

Show proof
@[simp] theorem QuotientGeneratorConvergingPair.le_map_right
    {A B : QuotientGeneratorConvergingPair (G := G)} (hAB : A ≤ B)
    (x : A.Source) :
    leftQuotientProjection (B.N) (A.N) (A.le_hBA hAB) (A.le_map hAB x) = x.1

The quotient generator pair is compatible with the specified quotient map.

Show proof
@[simp] theorem QuotientGeneratorConvergingPair.le_map_one
    {A B : QuotientGeneratorConvergingPair (G := G)} (hAB : A ≤ B) :
    A.le_map hAB A.sourceOne = 1

The quotient generator pair is compatible with the specified quotient map.

Show proof
@[simp] theorem QuotientGeneratorConvergingPair.le_map_mem
    {A B : QuotientGeneratorConvergingPair (G := G)} (hAB : A ≤ B)
    (y : A.Y) :
    A.le_map hAB (A.sourceOfY y) ∈ B.Y

Under a refinement, the chosen lift map sends every distinguished generator of the smaller pair into the distinguished set of the larger pair.

Show proof
theorem QuotientGeneratorConvergingPair.le_map_diff
    {A B : QuotientGeneratorConvergingPair (G := G)} (hAB : A ≤ B) :
    B.Y \ A.yImage B (A.le_map hAB) ⊆
      {q : G ⧸ B.N |
        leftQuotientProjection (B.N) (A.N) (A.le_hBA hAB) q = 1}

Elements of the larger distinguished set not in the lifted image project to the identity in the smaller quotient.

Show proof
theorem QuotientGeneratorConvergingPair.eq_le_map_of_mem_of_proj_eq
    {A B : QuotientGeneratorConvergingPair (G := G)} (hAB : A ≤ B)
    (y : A.Y) {q : G ⧸ B.N}
    (hqY : q ∈ B.Y)
    (hqproj : leftQuotientProjection (B.N) (A.N) (A.le_hBA hAB) q = y.1) :
    q = A.le_map hAB (A.sourceOfY y)

The quotient generator comparison respects membership and projection equality.

Show proof
theorem QuotientGeneratorConvergingPair.le_map_compat
    {A B C : QuotientGeneratorConvergingPair (G := G)}
    (hAB : A ≤ B) (hAC : A ≤ C) (hBC : B ≤ C)
    (y : A.Y) :
    leftQuotientProjection (C.N) (B.N) (B.le_hBA hBC)
      (A.le_map hAC (A.sourceOfY y)) =
      A.le_map hAB (A.sourceOfY y)

The induced map between quotient generator pairs is compatible with refinement.

Show proof
theorem ConvergesToOne.range_subtype_pointed
    {H : Type v} [Group H] [TopologicalSpace H]
    (hG : IsProfiniteGroup G) {X : Set G}
    {f : ↥((({1} : Set G) ∪ X)) → H}
    (hf : Continuous f)
    (hf1 : f ⟨1, Or.inl rfl⟩ = 1)
    (hX : ConvergesToOne (G := G) X) :
    ConvergesToOne (G := H)
      (Set.range fun x : X => f ⟨x.1, Or.inr x.2⟩)

The range subtype of a pointed map contains the chosen basepoint.

Show proof
theorem exists_quotientPair_le_openSubgroup_of_chain_iInf_le [CompactSpace G]
    {c : Set (QuotientGeneratorConvergingPair (G := G))}
    (hc : IsChain (· ≤ ·) c) (hcne : c.Nonempty)
    (U : OpenSubgroup G)
    (hInf : iInf (fun p : c => p.1.N) ≤ (U : Subgroup G)) :
    ∃ p : c, p.1.N ≤ (U : Subgroup G)

The quotient generator-converging-pair construction is compatible with open-normal finite quotients and refinement maps.

Show proof
theorem quotientGeneratorPair_exists_liftToInf
    (hG : IsProfiniteGroup G)
    {c : Set (QuotientGeneratorConvergingPair (G := G))}
    (hc : IsChain (· ≤ ·) c) (a : c) :
    let K : Subgroup G

A chain of quotient generator pairs has a refinement lifting to the intersection of its kernels.

Show proof
noncomputable def quotientGeneratorPairTop :
    QuotientGeneratorConvergingPair (G := G) where
  N := ⊤
  normal_N := by infer_instance
  closed_N := isClosed_univ
  Y := ∅
  subset_compl := by intro q hq; simp only [mem_empty_iff_false] at hq
  converges := by intro U; simp only [empty_diff, finite_empty]
  generates := by
    classical
    rw [TopologicallyGenerates]
    apply top_unique
    intro q hq
    rcases Quotient.exists_rep q with ⟨g, rflhave hg1 : QuotientGroup.mk' (⊤ : Subgroup G) g = (1 : G ⧸ (⊤ : Subgroup G)) := by
      exact (QuotientGroup.eq_one_iff (N := (⊤ : Subgroup G)) g).2 (by simp only [Subgroup.mem_top])
    have hbot :
        QuotientGroup.mk' (⊤ : Subgroup G) g ∈ (⊥ : Subgroup (G ⧸ (⊤ : Subgroup G))) := by
      change QuotientGroup.mk' (⊤ : Subgroup G) g = (1 : G ⧸ (⊤ : Subgroup G))
      exact hg1
    simpa [Subgroup.closure_eq] using
      (Subgroup.le_topologicalClosure (⊥ : Subgroup (G ⧸ (⊤ : Subgroup G))) hbot)

The top quotient generator pair is the maximal object in the quotient-generator construction.

theorem quotientGeneratorPair_exists_strictExtension
    (hG : IsProfiniteGroup G)
    (p : QuotientGeneratorConvergingPair (G := G))
    (hne : p.N ≠ ⊥) :
    ∃ p' : QuotientGeneratorConvergingPair (G := G), p ≤ p' ∧ ¬ p' ≤ p

A nonmaximal quotient generator pair admits a strict extension refining its quotient data.

Show proof
theorem isClosed_bot_subgroup (hG : IsProfiniteGroup G) :
    IsClosed (((⊥ : Subgroup G) : Set G))

The trivial subgroup of a profinite group is closed.

Show proof
theorem closedNormalQuotientSection_bot_eq (hG : IsProfiniteGroup G) :
    closedNormalQuotientSection (G := G) hG
      (N := (⊥ : Subgroup G)) (isClosed_bot_subgroup (G := G) hG) =
      (quotientBotContinuousMulEquiv (G := G) hG).symm

The closed-normal quotient section at the bottom subgroup is the identity section.

Show proof
noncomputable def QuotientGeneratorConvergingPair.toAmbientSet
    (p : QuotientGeneratorConvergingPair (G := G))
    (hG : IsProfiniteGroup G) : Set G :=
  closedNormalQuotientSection (G := G) hG (N := p.N) p.closed_N '' p.Y

The quotient generator pair maps its source set into the ambient generating set.

theorem QuotientGeneratorConvergingPair.toAmbientSet_generatesAndConvergesToOne
    (p : QuotientGeneratorConvergingPair (G := G))
    (hG : IsProfiniteGroup G) (hbot : p.N = ⊥) :
    GeneratesAndConvergesToOne (G := G) (p.toAmbientSet hG)

The ambient representatives attached to a quotient generator pair topologically generate and converge to one.

Show proof
theorem quotientGeneratorPair_exists_upperBound_of_chain
    (hG : IsProfiniteGroup G)
    (c : Set (QuotientGeneratorConvergingPair (G := G)))
    (hc : IsChain (· ≤ ·) c) (hcn : c.Nonempty) :
    ∃ ub : QuotientGeneratorConvergingPair (G := G), ∀ a ∈ c, a ≤ ub

Every nonempty chain of quotient generator pairs has an upper bound.

Show proof
theorem exists_generatorsConvergingToOne (hG : IsProfiniteGroup G) :
    ∃ X : Set G, GeneratesAndConvergesToOne (G := G) X

4.4. Existence theorem used by the public theorem.

Show proof
theorem GeneratesAndConvergesToOne.image_of_continuousSurjective
    (hG : IsProfiniteGroup G)
    {H : Type v} [Group H] [TopologicalSpace H] [IsTopologicalGroup H]
    (f : G →* H) (hf : Continuous f) (hfsurj : Function.Surjective f)
    {X : Set G} (hX : GeneratesAndConvergesToOne (G := G) X) :
    GeneratesAndConvergesToOne (G := H) (f '' X)

A surjective continuous homomorphism preserves generating sets converging to \(1\).

Show proof
theorem GeneratesAndConvergesToOne.image_of_continuousMulEquiv
    (hG : IsProfiniteGroup G)
    {H : Type v} [Group H] [TopologicalSpace H] [IsTopologicalGroup H]
    (e : G ≃ₜ* H) {X : Set G}
    (hX : GeneratesAndConvergesToOne (G := G) X) :
    GeneratesAndConvergesToOne (G := H) (e '' X)

A continuous multiplicative equivalence preserves generating sets converging to \(1\).

Show proof
theorem ConvergesToOne.image_of_continuousMulEquiv_iff
    (hG : IsProfiniteGroup G)
    {H : Type v} [Group H] [TopologicalSpace H] [IsTopologicalGroup H]
    (hH : IsProfiniteGroup H)
    (e : G ≃ₜ* H) {X : Set G} :
    ConvergesToOne (G := H) (e '' X) ↔ ConvergesToOne (G := G) X

Convergence to \(1\) is preserved and reflected by the indicated finite union, insertion, or continuous equivalence operation.

Show proof
theorem GeneratesAndConvergesToOne.image_of_continuousMulEquiv_iff
    (hG : IsProfiniteGroup G)
    {H : Type v} [Group H] [TopologicalSpace H] [IsTopologicalGroup H]
    (hH : IsProfiniteGroup H)
    (e : G ≃ₜ* H) {X : Set G} :
    GeneratesAndConvergesToOne (G := H) (e '' X) ↔ GeneratesAndConvergesToOne (G := G) X

Convergence to \(1\) is preserved and reflected by the indicated finite union, insertion, or continuous equivalence operation.

Show proof
theorem topologicalRank_eq_of_continuousMulEquiv
    (hG : IsProfiniteGroup G)
    {H : Type u} [Group H] [TopologicalSpace H] [IsTopologicalGroup H]
    (hH : IsProfiniteGroup H) (e : G ≃ₜ* H) :
    topologicalRank G = topologicalRank H

The topological rank equality of continuous multiplicative equivalence is compatible with the profinite topology and gives the continuous map or equivalence determined by the finite-quotient data.

Show proof