def replaceRelators
{R S : Set (FreeGroup X)}
(hR_to_S : ∀ r ∈ R, RelatorEquivalent S r 1)
(hS_to_R : ∀ s ∈ S, RelatorEquivalent R s 1) :
TietzeScript (Presentation.ofRelators R) (Presentation.ofRelators S) :=
(Presented.replaceRelatorsTietzeEquiv hR_to_S hS_to_R).toScriptThis Tietze script step replaces a family of relators by equivalent relators.
def replaceRelator
{R : Set (FreeGroup X)} {oldRelator newRelator : FreeGroup X}
(holdRelator :
RelatorEquivalent (insert newRelator (R \ {oldRelator})) oldRelator 1)
(hnewRelator : RelatorEquivalent R newRelator 1) :
TietzeScript (Presentation.ofRelators R)
(Presentation.ofRelators (insert newRelator (R \ {oldRelator}))) :=
(Presented.replaceRelatorTietzeEquiv holdRelator hnewRelator).toScriptThis Tietze script step replaces one relator by an equivalent relator.
def addRedundantRelator
{R : Set (FreeGroup X)} {r : FreeGroup X}
(hr : r ∈ Subgroup.normalClosure R) :
TietzeScript (Presentation.ofRelators (insert r R))
(Presentation.ofRelators R) :=
(Presented.addRedundantRelatorTietzeEquiv hr).toScriptThis Tietze script step adds one redundant relator.
def addRedundantRelatorInverse
{R : Set (FreeGroup X)} {r : FreeGroup X}
(hr : r ∈ Subgroup.normalClosure R) :
TietzeScript (Presentation.ofRelators R)
(Presentation.ofRelators (insert r R)) :=
(Presented.addRedundantRelatorTietzeEquiv hr).symm.toScriptThis inverse Tietze script step removes a previously added redundant relator.
def removeRedundantRelator
{R : Set (FreeGroup X)} {r : FreeGroup X}
(hr : r ∈ Subgroup.normalClosure (R \ {r})) :
TietzeScript (Presentation.ofRelators R)
(Presentation.ofRelators (R \ {r})) :=
(Presented.removeRedundantRelatorTietzeEquiv hr).toScriptThis Tietze script step removes one redundant relator.
def addRedundantRelators
{R S : Set (FreeGroup X)}
(hS : S ⊆ Subgroup.normalClosure R) :
TietzeScript (Presentation.ofRelators (R ∪ S))
(Presentation.ofRelators R) :=
(Presented.addRedundantRelatorsTietzeEquiv hS).toScriptThis Tietze script step adds a family of redundant relators.
def addRedundantRelatorsRelatorEquivalent
{R S : Set (FreeGroup X)}
(hS : ∀ s ∈ S, RelatorEquivalent R s 1) :
TietzeScript (Presentation.ofRelators (R ∪ S))
(Presentation.ofRelators R) :=
(Presented.addRedundantRelatorsRelatorEquivalentTietzeEquiv hS).toScriptThe scripted addition of redundant relators preserves relator equivalence.
def addRedundantRelatorsInverse
{R S : Set (FreeGroup X)}
(hS : S ⊆ Subgroup.normalClosure R) :
TietzeScript (Presentation.ofRelators R)
(Presentation.ofRelators (R ∪ S)) :=
(Presented.addRedundantRelatorsTietzeEquiv hS).symm.toScriptThis inverse Tietze script step removes a previously added family of redundant relators.
def addRedundantRelatorsRelatorEquivalentInverse
{R S : Set (FreeGroup X)}
(hS : ∀ s ∈ S, RelatorEquivalent R s 1) :
TietzeScript (Presentation.ofRelators R)
(Presentation.ofRelators (R ∪ S)) :=
(Presented.addRedundantRelatorsRelatorEquivalentTietzeEquiv hS).symm.toScriptThe scripted inverse direction after adding redundant relators preserves relator equivalence.
def removeRelatorSubset
{R D : Set (FreeGroup X)}
(hD : ∀ d ∈ D, d ∈ R → d ∈ Subgroup.normalClosure (R \ D)) :
TietzeScript (Presentation.ofRelators R)
(Presentation.ofRelators (R \ D)) :=
(Presented.removeRelatorSubsetTietzeEquiv hD).toScriptThis Tietze script step removes a subset of redundant relators.
def removeRelatorSubsetRelatorEquivalent
{R D : Set (FreeGroup X)}
(hD : ∀ d ∈ D, d ∈ R → RelatorEquivalent (R \ D) d 1) :
TietzeScript (Presentation.ofRelators R)
(Presentation.ofRelators (R \ D)) :=
(Presented.removeRelatorSubsetRelatorEquivalentTietzeEquiv hD).toScriptThe scripted removal of a redundant relator subset preserves relator equivalence.
def removeRelatorSubsetInverse
{R D : Set (FreeGroup X)}
(hD : ∀ d ∈ D, d ∈ R → d ∈ Subgroup.normalClosure (R \ D)) :
TietzeScript (Presentation.ofRelators (R \ D))
(Presentation.ofRelators R) :=
(Presented.removeRelatorSubsetTietzeEquiv hD).symm.toScriptThis inverse Tietze script step adds back a removed relator subset.
def removeRelatorSubsetRelatorEquivalentInverse
{R D : Set (FreeGroup X)}
(hD : ∀ d ∈ D, d ∈ R → RelatorEquivalent (R \ D) d 1) :
TietzeScript (Presentation.ofRelators (R \ D))
(Presentation.ofRelators R) :=
(Presented.removeRelatorSubsetRelatorEquivalentTietzeEquiv hD).symm.toScriptThe scripted inverse direction after removing a relator subset preserves relator equivalence.
def replaceRelatorSubset
{R D E : Set (FreeGroup X)}
(hD :
∀ d ∈ D, d ∈ R → d ∈ Subgroup.normalClosure ((R \ D) ∪ E))
(hE : E ⊆ Subgroup.normalClosure R) :
TietzeScript (Presentation.ofRelators R)
(Presentation.ofRelators ((R \ D) ∪ E)) :=
(Presented.replaceRelatorSubsetTietzeEquiv hD hE).toScriptReplace a whole subfamily \(D\) of relators by a new family \(E\). Relators outside \(D\) are kept unchanged.
def replaceRelatorSubsetRelatorEquivalent
{R D E : Set (FreeGroup X)}
(hD :
∀ d ∈ D, d ∈ R → RelatorEquivalent ((R \ D) ∪ E) d 1)
(hE : ∀ e ∈ E, RelatorEquivalent R e 1) :
TietzeScript (Presentation.ofRelators R)
(Presentation.ofRelators ((R \ D) ∪ E)) :=
(Presented.replaceRelatorSubsetRelatorEquivalentTietzeEquiv hD hE).toScriptThe scripted replacement of a relator subset preserves relator equivalence.
def renameGenerators
(R : Set (FreeGroup X)) (e : X ≃ Y) :
TietzeScript (Presentation.ofRelators R)
(Presentation.ofRelators (FreeGroup.freeGroupCongr e '' R)) :=
(Presented.renameGeneratorsTietzeEquiv R e).toScriptThis Tietze script step renames the generators of the presentation.
def ofGeneratorMaps
{R : Set (FreeGroup X)} {S : Set (FreeGroup Y)}
(toGenerator : X → FreeGroup Y)
(invGenerator : Y → FreeGroup X)
(hR :
∀ r ∈ R,
FreeGroup.lift toGenerator r ∈ Subgroup.normalClosure S)
(hS :
∀ s ∈ S,
FreeGroup.lift invGenerator s ∈ Subgroup.normalClosure R)
(hinv_to :
∀ x : X,
RelatorEquivalent R
(FreeGroup.lift invGenerator (toGenerator x))
(FreeGroup.of x))
(hto_inv :
∀ y : Y,
RelatorEquivalent S
(FreeGroup.lift toGenerator (invGenerator y))
(FreeGroup.of y)) :
TietzeScript (Presentation.ofRelators R) (Presentation.ofRelators S) :=
(TietzeEquiv.ofGeneratorMaps
toGenerator invGenerator hR hS hinv_to hto_inv).toScriptCompatible generator maps define a Tietze script between the two presentations.
def ofGeneratorMapsRelatorEquivalent
{R : Set (FreeGroup X)} {S : Set (FreeGroup Y)}
(toGenerator : X → FreeGroup Y)
(invGenerator : Y → FreeGroup X)
(hR :
∀ r ∈ R,
RelatorEquivalent S (FreeGroup.lift toGenerator r) 1)
(hS :
∀ s ∈ S,
RelatorEquivalent R (FreeGroup.lift invGenerator s) 1)
(hinv_to :
∀ x : X,
RelatorEquivalent R
(FreeGroup.lift invGenerator (toGenerator x))
(FreeGroup.of x))
(hto_inv :
∀ y : Y,
RelatorEquivalent S
(FreeGroup.lift toGenerator (invGenerator y))
(FreeGroup.of y)) :
TietzeScript (Presentation.ofRelators R) (Presentation.ofRelators S) :=
(TietzeEquiv.ofGeneratorMapsRelatorEquivalent
toGenerator invGenerator hR hS hinv_to hto_inv).toScriptdef adjoinGenerators
(R : Set (FreeGroup X)) (word : Y → FreeGroup X) :
TietzeScript (Presentation.ofRelators R)
(Presentation.ofRelators (Presented.adjoinGeneratorsRelators R word)) :=
(Presented.adjoinGeneratorsTietzeEquiv R word).toScriptTietze move: adding a family of generators \(y : Y\) with relations \(y = \mathrm{word}(y)\).
def substituteDefinedGenerators
(R : Set (FreeGroup (Sum X Y))) (word : Y → FreeGroup X) :
TietzeScript
(Presentation.ofRelators (Presented.relatorsWithDefinedGenerators R word))
(Presentation.ofRelators
(Presented.relatorsAfterSubstitutingDefinedGenerators R word)) :=
(Presented.substituteDefinedGeneratorsTietzeEquiv R word).toScriptTietze move eliminating generators \(y : Y\) using relations \(y = \mathrm{word}(y)\), while substituting \(\mathrm{word}(y)\) into all remaining relators.
def deleteTrivialGenerators
(R : Set (FreeGroup (Sum X Y))) :
TietzeScript
(Presentation.ofRelators (Presented.relatorsWithTrivialGenerators R))
(Presentation.ofRelators
(Presented.relatorsAfterDeletingTrivialGenerators R)) :=
(Presented.deleteTrivialGeneratorsTietzeEquiv R).toScriptTietze 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 substituteDefinedGeneratorsAlongEquiv
(R : Set (FreeGroup Z)) (e : Z ≃ Sum X Y)
(word : Y → FreeGroup X) :
TietzeScript
(Presentation.ofRelators
(Presented.relatorsWithDefinedGeneratorsAlongEquiv R e word))
(Presentation.ofRelators
(Presented.relatorsAfterSubstitutingDefinedGeneratorsAlongEquiv
R e word)) :=
(Presented.substituteDefinedGeneratorsAlongEquivTietzeEquiv R e word).toScriptScriptable Tietze step substituting defined generators after splitting the generator type by an equivalence \(Z \simeq X \oplus Y\).
def deleteTrivialGeneratorsAlongEquiv
(R : Set (FreeGroup Z)) (e : Z ≃ Sum X Y) :
TietzeScript
(Presentation.ofRelators
(Presented.relatorsWithTrivialGeneratorsAlongEquiv R e))
(Presentation.ofRelators
(Presented.relatorsAfterDeletingTrivialGeneratorsAlongEquiv R e)) :=
(Presented.deleteTrivialGeneratorsAlongEquivTietzeEquiv R e).toScriptScriptable Tietze step deleting trivial generators after splitting the generator type by an equivalence \(Z \simeq X \oplus Y\).
def substituteDefinedGeneratorsOfPredicate
(R : Set (FreeGroup Z)) (delete : Z → Prop) [DecidablePred delete]
(word :
Presented.GeneratorPartition.Deleted delete →
FreeGroup (Presented.GeneratorPartition.Kept delete)) :
TietzeScript
(Presentation.ofRelators
(Presented.relatorsWithDefinedGeneratorsOfPredicate R delete word))
(Presentation.ofRelators
(Presented.relatorsAfterSubstitutingDefinedGeneratorsOfPredicate
R delete word)) :=
(Presented.substituteDefinedGeneratorsOfPredicateTietzeEquiv R delete word).toScriptThis Tietze script step substitutes generators defined by words satisfying the given predicate.
def deleteTrivialGeneratorsOfPredicate
(R : Set (FreeGroup Z)) (delete : Z → Prop) [DecidablePred delete] :
TietzeScript
(Presentation.ofRelators
(Presented.relatorsWithTrivialGeneratorsOfPredicate R delete))
(Presentation.ofRelators
(Presented.relatorsAfterDeletingTrivialGeneratorsOfPredicate
R delete)) :=
(Presented.deleteTrivialGeneratorsOfPredicateTietzeEquiv R delete).toScriptThis Tietze script step deletes generators proved trivial by the given predicate.