ProCGroups.ReidemeisterSchreier.Discrete.Presentations.Tietze.GeneratorDeletion

16 Theorems | 30 Definitions

This module formalizes deletion of generators forced to be trivial. It defines the elimination homomorphism and relator transformations and packages the induced equivalence of presented quotients.

import
Imported by

Declarations

def trivializeGeneratorsHom : FreeGroup (Sum X Y) →* FreeGroup X :=
  eliminateAdjoinedGeneratorsHom (fun _ : Y => 1)

The substitution map sends the generators in \(Y\) to \(1\), while keeping the old generators \(X\). It is used by the Tietze move deleting generators with relators \(y = 1\).

@[simp]
theorem trivializeGeneratorsHom_inl (x : X) :
    trivializeGeneratorsHom X Y (FreeGroup.of (Sum.inl x)) =
      FreeGroup.of x

The trivializing homomorphism fixes each retained generator \(x : X\).

Show Lean proof
@[simp]
theorem trivializeGeneratorsHom_inr (y : Y) :
    trivializeGeneratorsHom X Y (FreeGroup.of (Sum.inr y)) = 1

The trivializing homomorphism sends each deleted generator \(y : Y\) to \(1\).

Show Lean proof
theorem trivializeGeneratorsHom_comp_include :
    (trivializeGeneratorsHom X Y).comp (includeAdjoinedGenerators X Y) =
      MonoidHom.id (FreeGroup X)

Trivializing the deleted generators after including the retained generators is the identity on the retained free group.

Show Lean proof
def trivialGeneratorRelators :
    Set (FreeGroup (Sum X Y)) :=
  {q | ∃ y : Y, q = FreeGroup.of (Sum.inr y)}

Relators \(y = 1\) for a family of generators to be deleted.

def relatorsWithTrivialGenerators
    (R : Set (FreeGroup (Sum X Y))) :
    Set (FreeGroup (Sum X Y)) :=
  R ∪ trivialGeneratorRelators (X := X) (Y := Y)

Adds the relators \(y = 1\) to a presentation over \(X \oplus Y\), trivializing the auxiliary generators.

def relatorsAfterDeletingTrivialGenerators
    (R : Set (FreeGroup (Sum X Y))) :
    Set (FreeGroup X) :=
  trivializeGeneratorsHom X Y '' R

The relators after deleting the \(Y\)-generators are obtained by substituting them with \(1\).

theorem trivialGeneratorRelator_mem (y : Y) :
    FreeGroup.of (Sum.inr y) ∈
      trivialGeneratorRelators (X := X) (Y := Y)

Each trivial-generator relation \(y = 1\) belongs to the trivial-generator relator set.

Show Lean proof
theorem trivialGeneratorRelator_mem_relatorsWithTrivialGenerators
    (R : Set (FreeGroup (Sum X Y))) (y : Y) :
    FreeGroup.of (Sum.inr y) ∈ relatorsWithTrivialGenerators R

Each trivial-generator relation \(y = 1\) belongs to the relator set with trivial generators.

Show Lean proof
theorem relator_mem_relatorsWithTrivialGenerators
    {R : Set (FreeGroup (Sum X Y))} {r : FreeGroup (Sum X Y)}
    (hr : r ∈ R) :
    r ∈ relatorsWithTrivialGenerators R

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

Show Lean proof
theorem include_trivializeGeneratorsHom_mod_trivialGeneratorRelators
    (z : FreeGroup (Sum X Y)) :
    includeAdjoinedGenerators X Y (trivializeGeneratorsHom X Y z) * z⁻¹ ∈
      Subgroup.normalClosure (trivialGeneratorRelators (X := X) (Y := Y))

Including the result of trivializing deleted generators is congruent to the original word modulo the trivial-generator relators.

Show Lean proof
theorem include_trivializeGeneratorsHom_mod_relatorsWithTrivialGenerators
    (R : Set (FreeGroup (Sum X Y))) (z : FreeGroup (Sum X Y)) :
    includeAdjoinedGenerators X Y (trivializeGeneratorsHom X Y z) * z⁻¹ ∈
      Subgroup.normalClosure (relatorsWithTrivialGenerators R)

Including the result of trivializing deleted generators is congruent to the original word modulo the relators with trivial generators.

Show Lean proof
def deleteTrivialGeneratorsMutualMapData
    (R : Set (FreeGroup (Sum X Y))) :
    RelatorQuotientMutualMapData
      (relatorsWithTrivialGenerators R)
      (relatorsAfterDeletingTrivialGenerators R) where
  toHom := trivializeGeneratorsHom X Y
  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, rflsimp only [trivializeGeneratorsHom_inr, one_mem]
  mapsTargetRelators := by
    intro s hs
    rcases hs with ⟨r, hr, rfllet N : Subgroup (FreeGroup (Sum X Y)) :=
      Subgroup.normalClosure (relatorsWithTrivialGenerators R)
    have hmod :
        includeAdjoinedGenerators X Y (trivializeGeneratorsHom X Y r) *
            r⁻¹ ∈ N :=
      include_trivializeGeneratorsHom_mod_relatorsWithTrivialGenerators
        (X := X) (Y := Y) R r
    have hrN : r ∈ N :=
      Subgroup.subset_normalClosure
        (relator_mem_relatorsWithTrivialGenerators (R := R) hr)
    have hprod := Subgroup.mul_mem N hmod hrN
    convert hprod using 1
    group
  inv_toHom := by
    intro z
    exact include_trivializeGeneratorsHom_mod_relatorsWithTrivialGenerators
      (X := X) (Y := Y) R z
  to_invHom := by
    intro z
    have hcomp := congrArg (fun f : FreeGroup X →* FreeGroup X => f z)
      (trivializeGeneratorsHom_comp_include (X := X) (Y := Y))
    have hz :
        trivializeGeneratorsHom X Y (includeAdjoinedGenerators X Y z) = z := by
      simpa using hcomp
    simp only [hz, mul_inv_cancel, one_mem]

Deleting generators forced to be trivial gives mutual maps between the original presentation and the reduced presentation.

def deleteTrivialGeneratorsTietzeEquiv
    (R : Set (FreeGroup (Sum X Y))) :
    TietzeEquiv
      (relatorsWithTrivialGenerators R)
      (relatorsAfterDeletingTrivialGenerators R) :=
  TietzeEquiv.ofMutualMapData
    (deleteTrivialGeneratorsMutualMapData R)

Tietze equivalence deleting generators forced to be trivial by the relators \(y = 1\).

noncomputable def deleteTrivialGenerators
    (R : Set (FreeGroup (Sum X Y))) :
    PresentedGroup (relatorsWithTrivialGenerators R) ≃*
      PresentedGroup (relatorsAfterDeletingTrivialGenerators R) :=
  (deleteTrivialGeneratorsTietzeEquiv R).presentedEquiv

Tietze move deleting a family of generators that have relators y = 1. Every remaining relator is pushed forward by substituting those deleted generators with 1.

def Kept (delete : Z → Prop) : Type _ :=
  {z : Z // ¬ delete z}

Generators kept after deleting the generators satisfying delete.

def Deleted (delete : Z → Prop) : Type _ :=
  {z : Z // delete z}

Generators deleted by a predicate delete.

def equiv (delete : Z → Prop) [DecidablePred delete] :
    Z ≃ Sum (Kept delete) (Deleted delete) where
  toFun z :=
    if hz : delete z then
      Sum.inr ⟨z, hz⟩
    else
      Sum.inl ⟨z, hz⟩
  invFun z :=
    match z with
    | Sum.inl x => x.1
    | Sum.inr y => y.1
  left_inv z := by
    by_cases hz : delete z <;> simp only [hz, ↓reduceDIte]
  right_inv z := by
    cases z with
    | inl x =>
        simp only [Kept, Deleted, x.property, ↓reduceDIte, Subtype.coe_eta]
    | inr y =>
        simp only [Kept, Deleted, y.property, ↓reduceDIte, Subtype.coe_eta]

Split an arbitrary generator type into the generators kept and deleted by a decidable predicate.

@[simp]
theorem equiv_apply_of_delete
    (delete : Z → Prop) [DecidablePred delete]
    {z : Z} (hz : delete z) :
    equiv delete z = Sum.inr (⟨z, hz⟩ : Deleted delete)

The partition equivalence sends a generator satisfying the deletion predicate to the deleted summand.

Show Lean proof
@[simp]
theorem equiv_apply_of_not_delete
    (delete : Z → Prop) [DecidablePred delete]
    {z : Z} (hz : ¬ delete z) :
    equiv delete z = Sum.inl (⟨z, hz⟩ : Kept delete)

The partition equivalence sends a retained generator to the kept summand.

Show Lean proof
@[simp]
theorem equiv_symm_inl
    (delete : Z → Prop) [DecidablePred delete]
    (z : Kept delete) :
    (equiv delete).symm (Sum.inl z) = z.1

The inverse partition equivalence forgets the proof attached to a retained generator.

Show Lean proof
@[simp]
theorem equiv_symm_inr
    (delete : Z → Prop) [DecidablePred delete]
    (z : Deleted delete) :
    (equiv delete).symm (Sum.inr z) = z.1

The inverse partition equivalence forgets the proof attached to a deleted generator.

Show Lean proof
def definedGeneratorRelatorsAlongEquiv
    (e : Z ≃ Sum X Y) (word : Y → FreeGroup X) :
    Set (FreeGroup Z) :=
  (FreeGroup.freeGroupCongr e).symm ''
    definedGeneratorRelators (X := X) (Y := Y) word

Pull back the defining relators \(y = \mathrm{word}(y)\) along an equivalence that splits an arbitrary generator type into kept and deleted generators.

def relatorsWithDefinedGeneratorsAlongEquiv
    (R : Set (FreeGroup Z)) (e : Z ≃ Sum X Y)
    (word : Y → FreeGroup X) :
    Set (FreeGroup Z) :=
  R ∪ definedGeneratorRelatorsAlongEquiv e word

Add defining relators to an arbitrary presentation whose generator type is identified with \(X \oplus Y\).

def relatorsAfterSubstitutingDefinedGeneratorsAlongEquiv
    (R : Set (FreeGroup Z)) (e : Z ≃ Sum X Y)
    (word : Y → FreeGroup X) :
    Set (FreeGroup X) :=
  relatorsAfterSubstitutingDefinedGenerators
    (FreeGroup.freeGroupCongr e '' R) word

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

theorem freeGroupCongr_image_definedGeneratorRelatorsAlongEquiv
    (e : Z ≃ Sum X Y) (word : Y → FreeGroup X) :
    FreeGroup.freeGroupCongr e ''
        definedGeneratorRelatorsAlongEquiv e word =
      definedGeneratorRelators (X := X) (Y := Y) word

Renaming generators carries the pulled-back defining-generator relators to the defining-generator relators after the split.

Show Lean proof
theorem freeGroupCongr_image_relatorsWithDefinedGeneratorsAlongEquiv
    (R : Set (FreeGroup Z)) (e : Z ≃ Sum X Y)
    (word : Y → FreeGroup X) :
    FreeGroup.freeGroupCongr e ''
        relatorsWithDefinedGeneratorsAlongEquiv R e word =
      relatorsWithDefinedGenerators
        (FreeGroup.freeGroupCongr e '' R) word

Renaming generators carries the pulled-back relators with defined generators to the corresponding split relator set.

Show Lean proof
def substituteDefinedGeneratorsAlongEquivTietzeEquiv
    (R : Set (FreeGroup Z)) (e : Z ≃ Sum X Y)
    (word : Y → FreeGroup X) :
    TietzeEquiv
      (relatorsWithDefinedGeneratorsAlongEquiv R e word)
      (relatorsAfterSubstitutingDefinedGeneratorsAlongEquiv R e word) :=
  (renameGeneratorsTietzeEquiv
      (relatorsWithDefinedGeneratorsAlongEquiv R e word) e).trans
    ((TietzeEquiv.ofNormalClosureEq
      (R := FreeGroup.freeGroupCongr e ''
        relatorsWithDefinedGeneratorsAlongEquiv R e word)
      (S := relatorsWithDefinedGenerators
        (FreeGroup.freeGroupCongr e '' R) word)
      (by
        rw [freeGroupCongr_image_relatorsWithDefinedGeneratorsAlongEquiv])).trans
      (substituteDefinedGeneratorsTietzeEquiv
        (FreeGroup.freeGroupCongr e '' R) word))

Tietze move eliminating an arbitrary family of generators after splitting the generator type by an equivalence \(Z \simeq X \oplus Y\).

noncomputable def substituteDefinedGeneratorsAlongEquiv
    (R : Set (FreeGroup Z)) (e : Z ≃ Sum X Y)
    (word : Y → FreeGroup X) :
    PresentedGroup (relatorsWithDefinedGeneratorsAlongEquiv R e word) ≃*
      PresentedGroup
        (relatorsAfterSubstitutingDefinedGeneratorsAlongEquiv R e word) :=
  (substituteDefinedGeneratorsAlongEquivTietzeEquiv R e word).presentedEquiv

Defines substituteDefinedGeneratorsAlongEquiv.

def definedGeneratorRelatorsOfPredicate
    (delete : Z → Prop) [DecidablePred delete]
    (word :
      GeneratorPartition.Deleted delete →
        FreeGroup (GeneratorPartition.Kept delete)) :
    Set (FreeGroup Z) :=
  definedGeneratorRelatorsAlongEquiv
    (GeneratorPartition.equiv delete) word

Add defining relations for all generators satisfying the deletion predicate; the kept generator type is the subtype of generators not satisfying that predicate.

def relatorsWithDefinedGeneratorsOfPredicate
    (R : Set (FreeGroup Z)) (delete : Z → Prop) [DecidablePred delete]
    (word :
      GeneratorPartition.Deleted delete →
        FreeGroup (GeneratorPartition.Kept delete)) :
    Set (FreeGroup Z) :=
  relatorsWithDefinedGeneratorsAlongEquiv R
    (GeneratorPartition.equiv delete) word

The relator set obtained by adding defining relators for all generators satisfying the predicate.

def relatorsAfterSubstitutingDefinedGeneratorsOfPredicate
    (R : Set (FreeGroup Z)) (delete : Z → Prop) [DecidablePred delete]
    (word :
      GeneratorPartition.Deleted delete →
        FreeGroup (GeneratorPartition.Kept delete)) :
    Set (FreeGroup (GeneratorPartition.Kept delete)) :=
  relatorsAfterSubstitutingDefinedGeneratorsAlongEquiv R
    (GeneratorPartition.equiv delete) word

Relators obtained after substituting every generator satisfying the predicate by its defining word.

def substituteDefinedGeneratorsOfPredicateTietzeEquiv
    (R : Set (FreeGroup Z)) (delete : Z → Prop) [DecidablePred delete]
    (word :
      GeneratorPartition.Deleted delete →
        FreeGroup (GeneratorPartition.Kept delete)) :
    TietzeEquiv
      (relatorsWithDefinedGeneratorsOfPredicate R delete word)
      (relatorsAfterSubstitutingDefinedGeneratorsOfPredicate R delete word) :=
  substituteDefinedGeneratorsAlongEquivTietzeEquiv R
    (GeneratorPartition.equiv delete) word

Tietze equivalence substituting the generators satisfying the predicate by their defining words.

noncomputable def substituteDefinedGeneratorsOfPredicate
    (R : Set (FreeGroup Z)) (delete : Z → Prop) [DecidablePred delete]
    (word :
      GeneratorPartition.Deleted delete →
        FreeGroup (GeneratorPartition.Kept delete)) :
    PresentedGroup (relatorsWithDefinedGeneratorsOfPredicate R delete word) ≃*
      PresentedGroup
        (relatorsAfterSubstitutingDefinedGeneratorsOfPredicate R delete word) :=
  (substituteDefinedGeneratorsOfPredicateTietzeEquiv R delete word).presentedEquiv

Defines substituteDefinedGeneratorsOfPredicate.

def trivialGeneratorRelatorsAlongEquiv
    (e : Z ≃ Sum X Y) :
    Set (FreeGroup Z) :=
  (FreeGroup.freeGroupCongr e).symm ''
    trivialGeneratorRelators (X := X) (Y := Y)

Pull back the trivial-generator relators \(y = 1\) along an equivalence that splits an arbitrary generator type into kept and deleted generators.

def relatorsWithTrivialGeneratorsAlongEquiv
    (R : Set (FreeGroup Z)) (e : Z ≃ Sum X Y) :
    Set (FreeGroup Z) :=
  R ∪ trivialGeneratorRelatorsAlongEquiv e

Add trivial-generator relators to an arbitrary presentation whose generator type is identified with \(X \oplus Y\).

def relatorsAfterDeletingTrivialGeneratorsAlongEquiv
    (R : Set (FreeGroup Z)) (e : Z ≃ Sum X Y) :
    Set (FreeGroup X) :=
  relatorsAfterDeletingTrivialGenerators (FreeGroup.freeGroupCongr e '' R)

Relators after renaming by \(e\) and deleting every generator in \(Y\).

theorem freeGroupCongr_image_trivialGeneratorRelatorsAlongEquiv
    (e : Z ≃ Sum X Y) :
    FreeGroup.freeGroupCongr e ''
        trivialGeneratorRelatorsAlongEquiv (X := X) (Y := Y) e =
      trivialGeneratorRelators (X := X) (Y := Y)

Renaming generators carries the pulled-back trivial-generator relators to the trivial-generator relators after the split.

Show Lean proof
theorem freeGroupCongr_image_relatorsWithTrivialGeneratorsAlongEquiv
    (R : Set (FreeGroup Z)) (e : Z ≃ Sum X Y) :
    FreeGroup.freeGroupCongr e ''
        relatorsWithTrivialGeneratorsAlongEquiv R e =
      relatorsWithTrivialGenerators (FreeGroup.freeGroupCongr e '' R)

Renaming generators carries the pulled-back relators with trivial generators to the corresponding split relator set.

Show Lean proof
def deleteTrivialGeneratorsAlongEquivTietzeEquiv
    (R : Set (FreeGroup Z)) (e : Z ≃ Sum X Y) :
    TietzeEquiv
      (relatorsWithTrivialGeneratorsAlongEquiv R e)
      (relatorsAfterDeletingTrivialGeneratorsAlongEquiv R e) :=
  (renameGeneratorsTietzeEquiv
      (relatorsWithTrivialGeneratorsAlongEquiv R e) e).trans
    ((TietzeEquiv.ofNormalClosureEq
      (R := FreeGroup.freeGroupCongr e ''
        relatorsWithTrivialGeneratorsAlongEquiv R e)
      (S := relatorsWithTrivialGenerators
        (FreeGroup.freeGroupCongr e '' R))
      (by
        rw [freeGroupCongr_image_relatorsWithTrivialGeneratorsAlongEquiv])).trans
      (deleteTrivialGeneratorsTietzeEquiv
        (FreeGroup.freeGroupCongr e '' R)))

Tietze move deleting an arbitrary family of generators after splitting the generator type by an equivalence \(Z \simeq X \oplus Y\).

noncomputable def deleteTrivialGeneratorsAlongEquiv
    (R : Set (FreeGroup Z)) (e : Z ≃ Sum X Y) :
    PresentedGroup (relatorsWithTrivialGeneratorsAlongEquiv R e) ≃*
      PresentedGroup
        (relatorsAfterDeletingTrivialGeneratorsAlongEquiv R e) :=
  (deleteTrivialGeneratorsAlongEquivTietzeEquiv R e).presentedEquiv

Defines deleteTrivialGeneratorsAlongEquiv.

def trivialGeneratorRelatorsOfPredicate
    (delete : Z → Prop) [DecidablePred delete] :
    Set (FreeGroup Z) :=
  trivialGeneratorRelatorsAlongEquiv
    (X := GeneratorPartition.Kept delete)
    (Y := GeneratorPartition.Deleted delete)
    (GeneratorPartition.equiv delete)

Trivial-generator relators for the generators satisfying the deletion predicate.

def relatorsWithTrivialGeneratorsOfPredicate
    (R : Set (FreeGroup Z)) (delete : Z → Prop) [DecidablePred delete] :
    Set (FreeGroup Z) :=
  relatorsWithTrivialGeneratorsAlongEquiv R
    (X := GeneratorPartition.Kept delete)
    (Y := GeneratorPartition.Deleted delete)
    (GeneratorPartition.equiv delete)

The relator set obtained by adding trivial-generator relators for all generators satisfying the predicate.

def relatorsAfterDeletingTrivialGeneratorsOfPredicate
    (R : Set (FreeGroup Z)) (delete : Z → Prop) [DecidablePred delete] :
    Set (FreeGroup (GeneratorPartition.Kept delete)) :=
  relatorsAfterDeletingTrivialGeneratorsAlongEquiv R
    (X := GeneratorPartition.Kept delete)
    (Y := GeneratorPartition.Deleted delete)
    (GeneratorPartition.equiv delete)

Relators obtained after deleting every generator satisfying the predicate by substituting it with \(1\).

def deleteTrivialGeneratorsOfPredicateTietzeEquiv
    (R : Set (FreeGroup Z)) (delete : Z → Prop) [DecidablePred delete] :
    TietzeEquiv
      (relatorsWithTrivialGeneratorsOfPredicate R delete)
      (relatorsAfterDeletingTrivialGeneratorsOfPredicate R delete) :=
  deleteTrivialGeneratorsAlongEquivTietzeEquiv R
    (X := GeneratorPartition.Kept delete)
    (Y := GeneratorPartition.Deleted delete)
    (GeneratorPartition.equiv delete)

Tietze equivalence deleting the generators satisfying the chosen predicate.

noncomputable def deleteTrivialGeneratorsOfPredicate
    (R : Set (FreeGroup Z)) (delete : Z → Prop) [DecidablePred delete] :
    PresentedGroup (relatorsWithTrivialGeneratorsOfPredicate R delete) ≃*
      PresentedGroup
        (relatorsAfterDeletingTrivialGeneratorsOfPredicate R delete) :=
  (deleteTrivialGeneratorsOfPredicateTietzeEquiv R delete).presentedEquiv

Defines deleteTrivialGeneratorsOfPredicate.