ReidemeisterSchreier.Discrete.Presentations.Tietze.GeneratorDeletion

16 Theorem | 30 Definition

This module develops the maps induced by continuous homomorphisms. It organizes the relevant quotient pullbacks and finite-stage maps, then proves the compatibility statements needed for the completed construction.

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\).

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 proof
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 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 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 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 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 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 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 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}

The subtype of generators kept after deleting those satisfying the predicate.

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

The subtype of generators deleted by the chosen decidable predicate.

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]

@[simp]

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

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 generator-partition equivalence sends a deleted generator to the right summand.

Show proof
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 generator-partition equivalence sends a kept generator to the left summand.

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

The inverse generator-partition equivalence sends a kept generator back to the original generator type.

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

The inverse generator-partition equivalence sends a deleted generator back to the original generator type.

Show 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 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 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

Presented-group isomorphism obtained by substituting defined generators after splitting the generator type by an equivalence \(Z \simeq X \oplus Y\).

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

Substitute generators defined by words satisfying the given predicate.

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 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 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

Presented-group isomorphism obtained by deleting trivial generators after splitting the generator type by an equivalence \(Z \simeq X \oplus Y\).

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

This declaration deletes generators proved trivial by the given predicate.