Module

TransferNaturality.lean

Nyll.ClassFieldTheory.AbstractClassFieldTheory.Reciprocity.Construction.TransferNaturality
11 declarations indexed from sourceView source ↗

Naturality of transfer under a quotient

This file supplies the group-theoretic source used in transfer--norm naturality. If a surjection has kernel contained in a finite-index subgroup, it identifies the two left-coset spaces and transfer commutes with the induced maps on abelianizations.

Declarations

ClassFormation.leftCosetEquivMapOfSurjective

A surjection identifies left cosets of H with left cosets of its image when its kernel is contained in H.

Source context 5 commands

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

namespace ClassFormation
noncomputable section
open Function
open scoped Pointwise
variable {P : Type*} {Q : Type*} [Group P] [Group Q]
def leftCosetEquivMapOfSurjective
    (f : P →* Q) (hf : Function.Surjective f)
    (H : Subgroup P) (hker : f.ker ≤ H) :
    P ⧸ H ≃ Q ⧸ H.map f
ClassFormation.leftCosetEquivMapOfSurjective_mk

Establishes the identity leftCosetEquivMapOfSurjective f hf H hker (QuotientGroup.mk p) = QuotientGroup.mk (f p).

Source context 5 commands

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

namespace ClassFormation
noncomputable section
open Function
open scoped Pointwise
variable {P : Type*} {Q : Type*} [Group P] [Group Q]
theorem leftCosetEquivMapOfSurjective_mk
    (f : P →* Q) (hf : Function.Surjective f)
    (H : Subgroup P) (hker : f.ker ≤ H) (p : P) :
    leftCosetEquivMapOfSurjective f hf H hker (QuotientGroup.mk p) =
      QuotientGroup.mk (f p)
ClassFormation.leftCosetEquivMapOfSurjective_smul

Establishes the identity leftCosetEquivMapOfSurjective f hf H hker (p • q) = f p • leftCosetEquivMapOfSurjective f hf H hker q.

Source context 5 commands

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

namespace ClassFormation
noncomputable section
open Function
open scoped Pointwise
variable {P : Type*} {Q : Type*} [Group P] [Group Q]
theorem leftCosetEquivMapOfSurjective_smul
    (f : P →* Q) (hf : Function.Surjective f)
    (H : Subgroup P) (hker : f.ker ≤ H)
    (p : P) (q : P ⧸ H) :
    leftCosetEquivMapOfSurjective f hf H hker (p • q) =
      f p • leftCosetEquivMapOfSurjective f hf H hker q
ClassFormation.leftTransversalMapOfSurjective

A left transversal descends along the same quotient map. It is built from the induced equivalence of left-coset spaces, so its chosen representatives are literally the images of the original representatives.

Source context 5 commands

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

namespace ClassFormation
noncomputable section
open Function
open scoped Pointwise
variable {P : Type*} {Q : Type*} [Group P] [Group Q]
def leftTransversalMapOfSurjective
    (f : P →* Q) (hf : Function.Surjective f)
    (H : Subgroup P) (hker : f.ker ≤ H)
    (T : H.LeftTransversal) : (H.map f).LeftTransversal
ClassFormation.leftTransversalMapOfSurjective_apply

The defining evaluation formula for leftTransversalMapOfSurjective is ((leftTransversalMapOfSurjective f hf H hker T).2.leftQuotientEquiv q : Q) = f (T.2.leftQuotientEquiv ((leftCosetEquivMapOfSurjective f hf H hker).symm q) : P).

Source context 5 commands

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

namespace ClassFormation
noncomputable section
open Function
open scoped Pointwise
variable {P : Type*} {Q : Type*} [Group P] [Group Q]
theorem leftTransversalMapOfSurjective_apply
    (f : P →* Q) (hf : Function.Surjective f)
    (H : Subgroup P) (hker : f.ker ≤ H)
    (T : H.LeftTransversal) (q : Q ⧸ H.map f) :
    ((leftTransversalMapOfSurjective f hf H hker T).2.leftQuotientEquiv q : Q) =
      f (T.2.leftQuotientEquiv
        ((leftCosetEquivMapOfSurjective f hf H hker).symm q) : P)
ClassFormation.leftQuotientEquiv_mk_of_mem
Source context 5 commands

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

namespace ClassFormation
noncomputable section
open Function
open scoped Pointwise
variable {P : Type*} {Q : Type*} [Group P] [Group Q]
theorem leftQuotientEquiv_mk_of_mem
    (H : Subgroup P) (T : H.LeftTransversal) (p : P)
    (hp : p ∈ (T : Set P)) :
    (T.2.leftQuotientEquiv (QuotientGroup.mk p) : P) = p
ClassFormation.mem_leftTransversalMapOfSurjective_iff
Source context 5 commands

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

namespace ClassFormation
noncomputable section
open Function
open scoped Pointwise
variable {P : Type*} {Q : Type*} [Group P] [Group Q]
theorem mem_leftTransversalMapOfSurjective_iff
    (f : P →* Q) (hf : Function.Surjective f)
    (H : Subgroup P) (hker : f.ker ≤ H)
    (T : H.LeftTransversal) (q : Q) :
    q ∈ (leftTransversalMapOfSurjective f hf H hker T : Set Q) ↔
      ∃ p ∈ (T : Set P), f p = q
ClassFormation.leftTransversalMapOfSurjective_smul
Source context 5 commands

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

namespace ClassFormation
noncomputable section
open Function
open scoped Pointwise
variable {P : Type*} {Q : Type*} [Group P] [Group Q]
theorem leftTransversalMapOfSurjective_smul
    (f : P →* Q) (hf : Function.Surjective f)
    (H : Subgroup P) (hker : f.ker ≤ H)
    (T : H.LeftTransversal) (p : P) :
    leftTransversalMapOfSurjective f hf H hker (p • T) =
      f p • leftTransversalMapOfSurjective f hf H hker T
ClassFormation.leftTransversals_diff_natural_of_surjective
Source context 5 commands

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

namespace ClassFormation
noncomputable section
open Function
open scoped Pointwise
variable {P : Type*} {Q : Type*} [Group P] [Group Q]
theorem leftTransversals_diff_natural_of_surjective
    (f : P →* Q) (hf : Function.Surjective f)
    (H : Subgroup P) (hker : f.ker ≤ H) [H.FiniteIndex]
    (S T : H.LeftTransversal) :
    let J := H.map f
    letI : J.FiniteIndex := by
      rw [Subgroup.finiteIndex_iff, H.index_map_eq hf hker]
      exact Subgroup.FiniteIndex.index_ne_zero
    Abelianization.map (f.subgroupMap H)
        (Subgroup.leftTransversals.diff
          (Abelianization.of : H →* Abelianization H) S T) =
      Subgroup.leftTransversals.diff
        (Abelianization.of : J →* Abelianization J)
        (leftTransversalMapOfSurjective f hf H hker S)
        (leftTransversalMapOfSurjective f hf H hker T) := by
  dsimp only
  let : (H.map f).FiniteIndex := by
    rw [Subgroup.finiteIndex_iff, H.index_map_eq hf hker]
    exact Subgroup.FiniteIndex.index_ne_zero
  classical
  let : Fintype (P ⧸ H) := H.fintypeQuotientOfFiniteIndex
  let : Fintype (Q ⧸ H.map f) :=
    (H.map f).fintypeQuotientOfFiniteIndex
  let e := leftCosetEquivMapOfSurjective f hf H hker
  simp only [Subgroup.leftTransversals.diff, map_prod,
    Abelianization.map_of, leftTransversalMapOfSurjective_apply]
  rw [← e.prod_comp]
  apply Finset.prod_congr rfl
  intro q _
  apply congrArg Abelianization.of
  apply Subtype.ext
  simp [e]
ClassFormation.abelianization_transfer_natural_of_surjective

Transfer is natural for a surjective homomorphism whose kernel is contained in the finite-index subgroup. Both transfer maps are Mathlib's actual MonoidHom.transfer; the proof descends an arbitrary left transversal and compares the defining products term by term.

Source context 5 commands

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

namespace ClassFormation
noncomputable section
open Function
open scoped Pointwise
variable {P : Type*} {Q : Type*} [Group P] [Group Q]
theorem abelianization_transfer_natural_of_surjective
    (f : P →* Q) (hf : Function.Surjective f)
    (H : Subgroup P) (hker : f.ker ≤ H) [H.FiniteIndex] :
    let J := H.map f
    letI : J.FiniteIndex := by
      rw [Subgroup.finiteIndex_iff, H.index_map_eq hf hker]
      exact Subgroup.FiniteIndex.index_ne_zero
    (Abelianization.map (f.subgroupMap H)).comp
        (Abelianization.lift
          (MonoidHom.transfer
            (Abelianization.of : H →* Abelianization H))) =
      (Abelianization.lift
          (MonoidHom.transfer
            (Abelianization.of : J →* Abelianization J))).comp
        (Abelianization.map f) := by
  dsimp only
  let : (H.map f).FiniteIndex := by
    rw [Subgroup.finiteIndex_iff, H.index_map_eq hf hker]
    exact Subgroup.FiniteIndex.index_ne_zero
  apply Abelianization.hom_ext
  apply MonoidHom.ext
  intro p
  simp only [MonoidHom.comp_apply, Abelianization.lift_apply_of,
    Abelianization.map_of]
  let T : H.LeftTransversal := default
  rw [MonoidHom.transfer_def
    (Abelianization.of : H →* Abelianization H) T p]
  rw [MonoidHom.transfer_def
    (Abelianization.of : H.map f →* Abelianization (H.map f))
    (leftTransversalMapOfSurjective f hf H hker T) (f p)]
  rw [← leftTransversalMapOfSurjective_smul f hf H hker T p]
  exact leftTransversals_diff_natural_of_surjective
    f hf H hker T (p • T)
ClassFormation.abelianization_transfer_congr_subgroup

Replacing a finite-index subgroup by an equal subgroup only transports the codomain of transfer along the corresponding canonical equivalence.

Source context 5 commands

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

namespace ClassFormation
noncomputable section
open Function
open scoped Pointwise
variable {P : Type*} {Q : Type*} [Group P] [Group Q]
theorem abelianization_transfer_congr_subgroup
    (H J : Subgroup P) (h : H = J)
    [H.FiniteIndex] [J.FiniteIndex] :
    (MulEquiv.subgroupCongr h).abelianizationCongr.toMonoidHom.comp
        (Abelianization.lift
          (MonoidHom.transfer
            (Abelianization.of : H →* Abelianization H))) =
      Abelianization.lift
        (MonoidHom.transfer
          (Abelianization.of : J →* Abelianization J))