Module

GeneratorAddition.lean

Nyll.ProCGroups.ReidemeisterSchreier.Discrete.Presentations.Tietze.GeneratorAddition
22 declarations indexed from sourceView source ↗

Reidemeister Schreier / Discrete / Presentations / Tietze / Generator Addition

This module formalizes adjoining generators with defining words. It builds the inclusion and elimination homomorphisms, transforms the relators, and packages the resulting presented-group equivalence.

Declarations

ReidemeisterSchreier.Discrete.Presentations.Presented.includeAdjoinedGenerators

Include the old free group into the free group with a family of new generators.

Source context 6 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
def includeAdjoinedGenerators : FreeGroup X →* FreeGroup (Sum X Y)
ReidemeisterSchreier.Discrete.Presentations.Presented.eliminateAdjoinedGeneratorsHom

The elimination homomorphism sends every new generator \(y : Y\) to \(\mathrm{word}(y)\).

Source context 7 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
def eliminateAdjoinedGeneratorsHom (word : Y → FreeGroup X) :
    FreeGroup (Sum X Y) →* FreeGroup X
ReidemeisterSchreier.Discrete.Presentations.Presented.eliminateAdjoinedGeneratorsHom_inl

The elimination homomorphism fixes each original generator \(x : X\).

Source context 7 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
theorem eliminateAdjoinedGeneratorsHom_inl
    (word : Y → FreeGroup X) (x : X) :
    eliminateAdjoinedGeneratorsHom word (FreeGroup.of (Sum.inl x)) =
      FreeGroup.of x
ReidemeisterSchreier.Discrete.Presentations.Presented.eliminateAdjoinedGeneratorsHom_inr

The elimination homomorphism sends each adjoined generator \(y : Y\) to its defining word.

Source context 7 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
theorem eliminateAdjoinedGeneratorsHom_inr
    (word : Y → FreeGroup X) (y : Y) :
    eliminateAdjoinedGeneratorsHom word (FreeGroup.of (Sum.inr y)) =
      word y
ReidemeisterSchreier.Discrete.Presentations.Presented.eliminateAdjoinedGeneratorsHom_comp_include

Eliminating the adjoined generators after including the original free group is the identity on the original free group.

Source context 7 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
theorem eliminateAdjoinedGeneratorsHom_comp_include
    (word : Y → FreeGroup X) :
    (eliminateAdjoinedGeneratorsHom word).comp (includeAdjoinedGenerators X Y) =
      MonoidHom.id (FreeGroup X)
ReidemeisterSchreier.Discrete.Presentations.Presented.adjoinGeneratorsRelators

Relators after adjoining generators \(y : Y\) and relations \(y = \mathrm{word}(y)\).

Source context 7 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
def adjoinGeneratorsRelators
    (R : Set (FreeGroup X)) (word : Y → FreeGroup X) :
    Set (FreeGroup (Sum X Y))
ReidemeisterSchreier.Discrete.Presentations.Presented.adjoinGenerators_relation_mem

Each defining relation \(y = \mathrm{word}(y)\) for an adjoined generator belongs to the adjoined-generator relator set.

Source context 7 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
theorem adjoinGenerators_relation_mem
    (R : Set (FreeGroup X)) (word : Y → FreeGroup X) (y : Y) :
    FreeGroup.of (Sum.inr y) *
        (includeAdjoinedGenerators X Y (word y))⁻¹ ∈
      adjoinGeneratorsRelators R word
ReidemeisterSchreier.Discrete.Presentations.Presented.include_eliminateAdjoinedGeneratorsHom_mod_relators

Including the result of eliminating adjoined generators is congruent to the original word modulo the adjoined-generator relators.

Source context 7 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
theorem include_eliminateAdjoinedGeneratorsHom_mod_relators
    (R : Set (FreeGroup X)) (word : Y → FreeGroup X)
    (z : FreeGroup (Sum X Y)) :
    includeAdjoinedGenerators X Y (eliminateAdjoinedGeneratorsHom word z) *
        z⁻¹ ∈
      Subgroup.normalClosure (adjoinGeneratorsRelators R word)
ReidemeisterSchreier.Discrete.Presentations.Presented.adjoinGeneratorsMutualMapData

Adding generators with defining relations gives mutual maps between the original relator quotient and the enlarged one.

Source context 7 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
def adjoinGeneratorsMutualMapData
    (R : Set (FreeGroup X)) (word : Y → FreeGroup X) :
    RelatorQuotientMutualMapData R (adjoinGeneratorsRelators R word) where
  toHom := includeAdjoinedGenerators X Y
  invHom := eliminateAdjoinedGeneratorsHom word
  mapsRelators := by
    intro r hr
    exact Subgroup.subset_normalClosure (Or.inl ⟨r, hr, rfl⟩)
  mapsTargetRelators := by
    intro s hs
    rcases hs with hs | hs
    · rcases hs with ⟨r, hr, rfl⟩
      have hcomp := congrArg (fun f : FreeGroup X →* FreeGroup X => f r)
        (eliminateAdjoinedGeneratorsHom_comp_include word)
      have hrw :
          eliminateAdjoinedGeneratorsHom word (includeAdjoinedGenerators X Y r) = r := by
        simpa using hcomp
      simpa [hrw] using (Subgroup.subset_normalClosure hr :
        r ∈ Subgroup.normalClosure R)
    · rcases hs with ⟨y, rfl⟩
      have hw :
          eliminateAdjoinedGeneratorsHom word
              (includeAdjoinedGenerators X Y (word y)) = word y := by
        have hcomp := congrArg (fun f : FreeGroup X →* FreeGroup X => f (word y))
          (eliminateAdjoinedGeneratorsHom_comp_include word)
        simpa using hcomp
      simp only [map_mul, map_inv, eliminateAdjoinedGeneratorsHom_inr]
      change word y *
          (eliminateAdjoinedGeneratorsHom word
            (includeAdjoinedGenerators X Y (word y)))⁻¹ ∈
        Subgroup.normalClosure R
      simp only [hw, mul_inv_cancel, one_mem]
  inv_toHom := by
    intro x
    have hcomp := congrArg (fun f : FreeGroup X →* FreeGroup X => f x)
      (eliminateAdjoinedGeneratorsHom_comp_include word)
    have hx :
        eliminateAdjoinedGeneratorsHom word (includeAdjoinedGenerators X Y x) = x := by
      simpa using hcomp
    simp only [hx, mul_inv_cancel, one_mem]
  to_invHom := by
    intro z
    exact include_eliminateAdjoinedGeneratorsHom_mod_relators R word z
ReidemeisterSchreier.Discrete.Presentations.Presented.adjoinGeneratorsTietzeEquiv

The Tietze equivalence obtained by adjoining generators \(y : Y\) with defining relations \(y = \mathrm{word}(y)\).

Source context 7 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
def adjoinGeneratorsTietzeEquiv
    (R : Set (FreeGroup X)) (word : Y → FreeGroup X) :
    TietzeEquiv R (adjoinGeneratorsRelators R word)
ReidemeisterSchreier.Discrete.Presentations.Presented.adjoinGenerators

Tietze move: adding a family of generators \(y : Y\) with relations \(y = \mathrm{word}(y)\).

Source context 7 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
def adjoinGenerators
    (R : Set (FreeGroup X)) (word : Y → FreeGroup X) :
    PresentedGroup R ≃*
      PresentedGroup (adjoinGeneratorsRelators R word)
ReidemeisterSchreier.Discrete.Presentations.Presented.definedGeneratorRelators

Relations \(y = \mathrm{word}(y)\) for generators that will be eliminated from an arbitrary presentation over \(X \oplus Y\).

Source context 8 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
section SubstituteDefinedGenerators
def definedGeneratorRelators
    (word : Y → FreeGroup X) :
    Set (FreeGroup (Sum X Y))
ReidemeisterSchreier.Discrete.Presentations.Presented.relatorsWithDefinedGenerators

Add defining relations \(y = \mathrm{word}(y)\) to an arbitrary presentation over \(X \oplus Y\). Unlike \(\mathrm{adjoinGeneratorsRelators}\), the old relators may already involve the \(Y\)-generators.

Source context 8 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
section SubstituteDefinedGenerators
def relatorsWithDefinedGenerators
    (R : Set (FreeGroup (Sum X Y))) (word : Y → FreeGroup X) :
    Set (FreeGroup (Sum X Y))
ReidemeisterSchreier.Discrete.Presentations.Presented.relatorsAfterSubstitutingDefinedGenerators

Relators after substituting every generator \(y : Y\) by \(\mathrm{word}(y)\).

Source context 8 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
section SubstituteDefinedGenerators
def relatorsAfterSubstitutingDefinedGenerators
    (R : Set (FreeGroup (Sum X Y))) (word : Y → FreeGroup X) :
    Set (FreeGroup X)
ReidemeisterSchreier.Discrete.Presentations.Presented.definedGeneratorRelator_mem

Each defining relation \(y = \mathrm{word}(y)\) belongs to the defining-generator relator set.

Source context 8 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
section SubstituteDefinedGenerators
theorem definedGeneratorRelator_mem
    (word : Y → FreeGroup X) (y : Y) :
    FreeGroup.of (Sum.inr y) *
        (includeAdjoinedGenerators X Y (word y))⁻¹ ∈
      definedGeneratorRelators word
ReidemeisterSchreier.Discrete.Presentations.Presented.definedGeneratorRelator_mem_relatorsWithDefinedGenerators

Each defining relation \(y = \mathrm{word}(y)\) belongs to the relator set with defined generators.

Source context 8 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
section SubstituteDefinedGenerators
theorem definedGeneratorRelator_mem_relatorsWithDefinedGenerators
    (R : Set (FreeGroup (Sum X Y))) (word : Y → FreeGroup X) (y : Y) :
    FreeGroup.of (Sum.inr y) *
        (includeAdjoinedGenerators X Y (word y))⁻¹ ∈
      relatorsWithDefinedGenerators R word
ReidemeisterSchreier.Discrete.Presentations.Presented.relator_mem_relatorsWithDefinedGenerators

Every original relator belongs to the relator set with defined generators.

Source context 8 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
section SubstituteDefinedGenerators
theorem relator_mem_relatorsWithDefinedGenerators
    {R : Set (FreeGroup (Sum X Y))} {word : Y → FreeGroup X}
    {r : FreeGroup (Sum X Y)} (hr : r ∈ R) :
    r ∈ relatorsWithDefinedGenerators R word
ReidemeisterSchreier.Discrete.Presentations.Presented.include_eliminateAdjoinedGeneratorsHom_mod_definedGeneratorRelators

Including the result of eliminating adjoined generators is congruent to the original word modulo the defining-generator relators.

Source context 8 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
section SubstituteDefinedGenerators
theorem include_eliminateAdjoinedGeneratorsHom_mod_definedGeneratorRelators
    (word : Y → FreeGroup X) (z : FreeGroup (Sum X Y)) :
    includeAdjoinedGenerators X Y (eliminateAdjoinedGeneratorsHom word z) *
        z⁻¹ ∈
      Subgroup.normalClosure (definedGeneratorRelators word)
ReidemeisterSchreier.Discrete.Presentations.Presented.include_eliminateAdjoinedGeneratorsHom_mod_relatorsWithDefinedGenerators

Including the result of eliminating defined generators is congruent to the original word modulo the relators with defined generators.

Source context 8 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
section SubstituteDefinedGenerators
theorem include_eliminateAdjoinedGeneratorsHom_mod_relatorsWithDefinedGenerators
    (R : Set (FreeGroup (Sum X Y))) (word : Y → FreeGroup X)
    (z : FreeGroup (Sum X Y)) :
    includeAdjoinedGenerators X Y (eliminateAdjoinedGeneratorsHom word z) *
        z⁻¹ ∈
      Subgroup.normalClosure (relatorsWithDefinedGenerators R word)
ReidemeisterSchreier.Discrete.Presentations.Presented.substituteDefinedGeneratorsMutualMapData

Substituting each defined generator by its defining word gives mutual maps for the presentation with those generators eliminated.

Source context 8 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
section SubstituteDefinedGenerators
def substituteDefinedGeneratorsMutualMapData
    (R : Set (FreeGroup (Sum X Y))) (word : Y → FreeGroup X) :
    RelatorQuotientMutualMapData
      (relatorsWithDefinedGenerators R word)
      (relatorsAfterSubstitutingDefinedGenerators R word) where
  toHom := eliminateAdjoinedGeneratorsHom word
  invHom := includeAdjoinedGenerators X Y
  mapsRelators := by
    intro r hr
    rcases hr with hr | hr
    · exact Subgroup.subset_normalClosure ⟨r, hr, rfl⟩
    · rcases hr with ⟨y, rfl⟩
      have hw :
          eliminateAdjoinedGeneratorsHom word
              (includeAdjoinedGenerators X Y (word y)) = word y := by
        have hcomp := congrArg (fun f : FreeGroup X →* FreeGroup X => f (word y))
          (eliminateAdjoinedGeneratorsHom_comp_include word)
        simpa using hcomp
      simp only [map_mul, map_inv, eliminateAdjoinedGeneratorsHom_inr]
      change word y *
          (eliminateAdjoinedGeneratorsHom word
            (includeAdjoinedGenerators X Y (word y)))⁻¹ ∈
        Subgroup.normalClosure (relatorsAfterSubstitutingDefinedGenerators R word)
      simp only [hw, mul_inv_cancel, one_mem]
  mapsTargetRelators := by
    intro s hs
    rcases hs with ⟨r, hr, rfl⟩
    let N : Subgroup (FreeGroup (Sum X Y)) :=
      Subgroup.normalClosure (relatorsWithDefinedGenerators R word)
    have hmod :
        includeAdjoinedGenerators X Y (eliminateAdjoinedGeneratorsHom word r) *
            r⁻¹ ∈ N :=
      include_eliminateAdjoinedGeneratorsHom_mod_relatorsWithDefinedGenerators
        (X := X) (Y := Y) R word r
    have hrN : r ∈ N :=
      Subgroup.subset_normalClosure
        (relator_mem_relatorsWithDefinedGenerators (R := R) (word := word) hr)
    have hprod := Subgroup.mul_mem N hmod hrN
    convert hprod using 1
    group
  inv_toHom := by
    intro z
    exact include_eliminateAdjoinedGeneratorsHom_mod_relatorsWithDefinedGenerators
      (X := X) (Y := Y) R word z
  to_invHom := by
    intro z
    have hcomp := congrArg (fun f : FreeGroup X →* FreeGroup X => f z)
      (eliminateAdjoinedGeneratorsHom_comp_include word)
    have hz :
        eliminateAdjoinedGeneratorsHom word (includeAdjoinedGenerators X Y z) = z := by
      simpa using hcomp
    simp only [hz, mul_inv_cancel, one_mem]
ReidemeisterSchreier.Discrete.Presentations.Presented.substituteDefinedGeneratorsTietzeEquiv

The Tietze equivalence obtained by substituting each defined generator by its defining word.

Source context 8 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
section SubstituteDefinedGenerators
def substituteDefinedGeneratorsTietzeEquiv
    (R : Set (FreeGroup (Sum X Y))) (word : Y → FreeGroup X) :
    TietzeEquiv
      (relatorsWithDefinedGenerators R word)
      (relatorsAfterSubstitutingDefinedGenerators R word)
ReidemeisterSchreier.Discrete.Presentations.Presented.substituteDefinedGenerators

Tietze move eliminating generators \(y : Y\) using relations \(y = \mathrm{word}(y)\), while substituting \(\mathrm{word}(y)\) into all remaining relators.

Source context 8 commands

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

universe u v w
namespace ReidemeisterSchreier.Discrete.Presentations
namespace Presented
variable {X Y : Type*}
section AdjoinGenerators
variable (X Y)
variable {X Y}
section SubstituteDefinedGenerators
def substituteDefinedGenerators
    (R : Set (FreeGroup (Sum X Y))) (word : Y → FreeGroup X) :
    PresentedGroup (relatorsWithDefinedGenerators R word) ≃*
      PresentedGroup (relatorsAfterSubstitutingDefinedGenerators R word)