Zulip Chat Archive

Stream: Is there code for X?

Topic: QuotientGroup.sound


Alex Kontorovich (Aug 26 2023 at 13:53):

I don't see a version of Quotient.sound for QuotientGroup; there's probably a much simpler way to do it than this?

import Mathlib.GroupTheory.QuotientGroup

open Set

open scoped Pointwise

variable (G : Type _) [Group G] (Γ : Subgroup G) [Subgroup.Normal Γ]

theorem QuotientGroup.sound [Subgroup.Normal Γ] (U : Set (G  Γ)) (g : (Subgroup.opposite Γ)) :
    g  (QuotientGroup.mk' Γ) ⁻¹' U = (QuotientGroup.mk' Γ) ⁻¹' U := by
  rw [QuotientGroup.coe_mk']
  ext x
  simp only [mem_preimage]
  constructor
  · intro hx
    rw [Set.mem_smul_set] at hx
    obtain y, y_mem, gy_eq_x := hx
    simp only [mem_preimage] at y_mem
    convert y_mem using 1
    symm
    apply Quotient.sound (b := x) (s := (QuotientGroup.leftRel Γ)) (a := y)
    rw [ gy_eq_x]
    refine g⁻¹, by simp
  · intro hx
    rw [Set.mem_smul_set]
    refine g⁻¹  x, ?_, by simp
    simp only [mem_preimage]
    convert hx using 1
    symm
    apply Quotient.sound (b := g⁻¹  x) (s := (QuotientGroup.leftRel Γ)) (a := x)
    refine g, by simp

Eric Wieser (Aug 26 2023 at 14:02):

docs#QuotientGroup.eq

Alex Kontorovich (Aug 26 2023 at 14:08):

Yes I saw that, but it's for individual elements, whereas I want to move the preimage under the quotient map of an arbitrary set in the quotient, by an element of the subgroup...? Maybe I'm missing something trivial?

Alex Kontorovich (Aug 26 2023 at 14:17):

I can hit it with Set.mem_inv_smul_set_iff first; should help. I'm still struggling with QuotientGroup.eq because it doesn't recognize Subgroup.opposite Γ as a Subgroup G...?

Alex Kontorovich (Aug 26 2023 at 14:20):

Ok now I can just use Quotient.sound directly. Still, maybe there's a cleaner way?

import Mathlib.GroupTheory.QuotientGroup

open Set

open scoped Pointwise

variable (G : Type _) [Group G] (Γ : Subgroup G) [Subgroup.Normal Γ]

theorem QuotientGroup.sound [Subgroup.Normal Γ] (U : Set (G  Γ)) (g : (Subgroup.opposite Γ)) :
    g  (QuotientGroup.mk' Γ) ⁻¹' U = (QuotientGroup.mk' Γ) ⁻¹' U := by
  rw [QuotientGroup.coe_mk']
  ext x
  simp only [mem_preimage]
  have := @Set.mem_inv_smul_set_iff (x := x) (A := (mk' Γ) ⁻¹' U) (a := g⁻¹) _ _
  simp only [inv_inv, coe_mk', mem_preimage] at this
  convert this using 2
  apply @Quotient.sound (a := x) (s := (QuotientGroup.leftRel Γ)) (b := g⁻¹  x)
  use g
  simp

Eric Wieser (Aug 26 2023 at 14:24):

Isn't sound just one direction of eq?

Antoine Chambert-Loir (Aug 26 2023 at 15:13):

If Gamma is a subgroup of G, why would Opposite Gamma be a subgroup of G? The law is reversed.


Last updated: Dec 20 2023 at 11:08 UTC