Module

WordProductsAndClosure.lean

Nyll.ProCGroups.Generation.WordProductsAndClosure
10 declarations indexed from sourceView source ↗

Finite word products and subgroup closure

The word-product filtration is related to multiplication, inversion, and the abstract subgroup generated by a set. Under compactness hypotheses its finite levels are compact or closed, which supports separation of a finite level by an open normal subgroup and later finite-quotient generation arguments.

Declarations

ProCGroups.Generation.wordProducts_one

The identity element belongs to the word-product set.

Source context 8 commands

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

open Set
open scoped Topology Pointwise
namespace ProCGroups.Generation
universe u
open ProCGroups.ProC
variable {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
section WordProducts
omit [TopologicalSpace G] [IsTopologicalGroup G] in
theorem wordProducts_one (X : Set G) :
    wordProducts X 1 = X
ProCGroups.Generation.wordProducts_mul_wordProducts

Multiplying elements from two word-product sets lands in the word-product set with summed length.

Source context 8 commands

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

open Set
open scoped Topology Pointwise
namespace ProCGroups.Generation
universe u
open ProCGroups.ProC
variable {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
section WordProducts
omit [TopologicalSpace G] [IsTopologicalGroup G] in
theorem wordProducts_mul_wordProducts (X : Set G) :
    ∀ m n, wordProducts X m * wordProducts X n = wordProducts X (m + n)
  | m, 0 => by
      simp only [wordProducts, mul_singleton, mul_one, image_id', add_zero]
  | m, n + 1 => by
      calc
        wordProducts X m * wordProducts X (n + 1)
            = wordProducts X m * (wordProducts X n * X) := by
                rfl
        _ = (wordProducts X m * wordProducts X n) * X := by
              rw [mul_assoc]
        _ = wordProducts X (m + n) * X := by
              rw [wordProducts_mul_wordProducts X m n]
        _ = wordProducts X (m + n + 1) := by
              rfl
ProCGroups.Generation.one_mem_wordProducts

The identity element belongs to the corresponding word-product set.

Source context 8 commands

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

open Set
open scoped Topology Pointwise
namespace ProCGroups.Generation
universe u
open ProCGroups.ProC
variable {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
section WordProducts
omit [TopologicalSpace G] [IsTopologicalGroup G] in
theorem one_mem_wordProducts {X : Set G} (h1 : (1 : G) ∈ X) :
    ∀ n, (1 : G) ∈ wordProducts X n
  | 0 => by
      simp only [wordProducts, mem_singleton_iff]
  | n + 1 => by
      exact ⟨1, one_mem_wordProducts h1 n, 1, h1, by simp only [mul_one]⟩
ProCGroups.Generation.wordProducts_subset_closure

Every word product of elements of \(X\) lies in the subgroup generated by \(X\).

Source context 8 commands

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

open Set
open scoped Topology Pointwise
namespace ProCGroups.Generation
universe u
open ProCGroups.ProC
variable {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
section WordProducts
omit [TopologicalSpace G] [IsTopologicalGroup G] in
theorem wordProducts_subset_closure (X : Set G) :
    ∀ n, wordProducts X n ⊆ ((Subgroup.closure X : Subgroup G) : Set G)
  | 0 => by
      intro x hx
      simp only [wordProducts, mem_singleton_iff] at hx
      simp only [hx, SetLike.mem_coe, one_mem]
  | n + 1 => by
      intro x hx
      rcases hx with ⟨a, ha, b, hb, rfl⟩
      exact (Subgroup.closure X).mul_mem
        (wordProducts_subset_closure X n ha)
        (Subgroup.subset_closure hb)
ProCGroups.Generation.wordProducts_inv_mem

The word-product set is closed under taking inverses.

Source context 8 commands

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

open Set
open scoped Topology Pointwise
namespace ProCGroups.Generation
universe u
open ProCGroups.ProC
variable {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
section WordProducts
omit [TopologicalSpace G] [IsTopologicalGroup G] in
theorem wordProducts_inv_mem {X : Set G} (hXinv : X = Inv.inv '' X) :
    ∀ {n : ℕ} {x : G}, x ∈ wordProducts X n → x⁻¹ ∈ wordProducts X n
  | 0, x, hx => by
      simpa [wordProducts] using hx
  | n + 1, x, hx => by
      rcases hx with ⟨a, ha, b, hb, rfl⟩
      have hb' : b⁻¹ ∈ X := by
        rw [hXinv]
        exact ⟨b, hb, by simp only⟩
      have ha' : a⁻¹ ∈ wordProducts X n := wordProducts_inv_mem hXinv ha
      have hmem : b⁻¹ * a⁻¹ ∈ wordProducts X 1 * wordProducts X n := by
        exact ⟨b⁻¹, by
          show b⁻¹ ∈ wordProducts X 1
          simpa [wordProducts_one] using hb', a⁻¹, ha', rfl⟩
      have hEq : wordProducts X 1 * wordProducts X n = wordProducts X (1 + n) := by
        simpa using (wordProducts_mul_wordProducts X 1 n)
      have hmem' : b⁻¹ * a⁻¹ ∈ wordProducts X (1 + n) := by
        exact hEq ▸ hmem
      simpa [Nat.succ_eq_add_one, Nat.add_comm] using hmem'
ProCGroups.Generation.wordProducts_mono_len

Word-product sets are monotone in the allowed word length.

Source context 8 commands

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

open Set
open scoped Topology Pointwise
namespace ProCGroups.Generation
universe u
open ProCGroups.ProC
variable {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
section WordProducts
omit [TopologicalSpace G] [IsTopologicalGroup G] in
theorem wordProducts_mono_len {X : Set G} (h1 : (1 : G) ∈ X) {m n : ℕ} (hmn : m ≤ n) :
    wordProducts X m ⊆ wordProducts X n
ProCGroups.Generation.subgroupClosure_eq_iUnion_wordProducts

The subgroup generated by word products has the stated closure property.

Source context 8 commands

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

open Set
open scoped Topology Pointwise
namespace ProCGroups.Generation
universe u
open ProCGroups.ProC
variable {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
section WordProducts
omit [TopologicalSpace G] [IsTopologicalGroup G] in
theorem subgroupClosure_eq_iUnion_wordProducts {X : Set G}
    (hXinv : X = Inv.inv '' X) :
    (((Subgroup.closure X : Subgroup G) : Set G)) = ⋃ n, wordProducts X n
ProCGroups.Generation.wordProducts_isCompact

Every bounded word-product set of a closed subset of a compact group is compact.

Source context 7 commands

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

open Set
open scoped Topology Pointwise
namespace ProCGroups.Generation
universe u
open ProCGroups.ProC
variable {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
section WordProducts
theorem wordProducts_isCompact [CompactSpace G] {X : Set G}
    (hXclosed : IsClosed X) :
    ∀ n, IsCompact (wordProducts X n)
  | 0 => by
      simp only [wordProducts, finite_singleton, Finite.isCompact]
  | n + 1 => by
      have hprev : IsCompact (wordProducts X n) := wordProducts_isCompact hXclosed n
      have hEq :
          wordProducts X (n + 1) =
            (fun p : G × G => p.1 * p.2) '' ((wordProducts X n) ×ˢ X) := by
        ext x
        constructor
        · intro hx
          rcases hx with ⟨a, ha, b, hb, rfl⟩
          exact ⟨(a, b), ⟨ha, hb⟩, rfl⟩
        · intro hx
          rcases hx with ⟨⟨a, b⟩, hab, rfl⟩
          exact ⟨a, hab.1, b, hab.2, rfl⟩
      rw [hEq]
      exact (hprev.prod hXclosed.isCompact).image (continuous_fst.mul continuous_snd)
ProCGroups.Generation.wordProducts_isClosed

The word-product set is closed in the profinite topology.

Source context 7 commands

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

open Set
open scoped Topology Pointwise
namespace ProCGroups.Generation
universe u
open ProCGroups.ProC
variable {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
section WordProducts
theorem wordProducts_isClosed [CompactSpace G] [T2Space G] {X : Set G}
    (hXclosed : IsClosed X) (n : ℕ) :
    IsClosed (wordProducts X n)
ProCGroups.Generation.exists_openNormalSubgroup_inf_eq_bot_of_finite

A finite subgroup of a profinite group can be separated from 1 by an open normal subgroup.

Source context 7 commands

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

open Set
open scoped Topology Pointwise
namespace ProCGroups.Generation
universe u
open ProCGroups.ProC
variable {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
section WordProducts
theorem exists_openNormalSubgroup_inf_eq_bot_of_finite
    [CompactSpace G] [TotallyDisconnectedSpace G]
    (K : Subgroup G) [Finite K] :
    ∃ U : OpenNormalSubgroup G, ((U : Subgroup G) ⊓ K) = ⊥