Documentation

TauCeti.GroupTheory.Presentation.Schreier.IndexTwo

Index-two Reidemeister--Schreier rewriting for presentations by involutions #

Let G = ⟨X | R⟩ be a group presented by involutions: every generator squares to the identity in G, and every relator of R other than those squares is a word of even length. Sending every generator to the nontrivial element of C₂ then defines the parity homomorphism G →* C₂, and its kernel is a subgroup of index at most two. The Reidemeister--Schreier method presents that kernel on the Schreier generators of the transversal {1, a} for a distinguished generator a: the generator attached to x ≠ a is a x, the one attached to a is trivial, and a source word x₁ x₂ x₃ ⋯ of even length rewrites as (a x₁)⁻¹ (a x₂) (a x₃)⁻¹ ⋯, the sign of each letter alternating with its position. The rewrite of a relator r and of its conjugate a r a together present the kernel.

This file proves that theorem for such presentations. TauCeti.schreierWord is the rewrite, TauCeti.schreierRelators is the rewritten relator set, TauCeti.IsSchreierIndexTwoSource records the hypotheses on the source presentation, and TauCeti.IsSchreierIndexTwoSource.mulEquivKerParityHom is the identification of the rewritten presented group with the kernel of the parity homomorphism. The kernel is the commutator subgroup as soon as all generators agree in the abelianization, TauCeti.IsSchreierIndexTwoSource.commutator_eq_ker_parityHom.

The generator index type of the rewritten presentation is left free, as an equivalence e between the source generators other than a and a type β, so that a transcription indexed by Fin n is a direct instance.

Main definitions #

Main results #

References #

The length parity #

The length parity of a word: the homomorphism from the free group on α to C₂ sending every generator to the nontrivial element. On the word L it is the parity of the length of L, TauCeti.lengthParity_mk.

Instances For
    @[simp]

    Every generator has odd length parity.

    The inverse of a generator has odd length parity.

    The length parity of a word is the parity of its length.

    The rewrite #

    def TauCeti.schreierWord {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) :

    The Reidemeister--Schreier rewrite of a word for the transversal {1, a}, on the Schreier generators indexed by β through e. The Boolean positive records whether the current transversal representative is a: a source letter x ≠ a read at representative a contributes the generator a x and read at representative 1 contributes its inverse, the letter a contributes nothing, and every letter switches the representative. The sign of a source letter is ignored, the source generators being involutions.

    Starting from false rewrites the word itself, starting from true rewrites its conjugate by a.

    Instances For
      @[simp]
      theorem TauCeti.schreierWord_nil {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (positive : Bool) :
      schreierWord a e positive [] = []

      The empty word rewrites to the empty word.

      @[simp]
      theorem TauCeti.schreierWord_cons {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (positive : Bool) (x : α) (s : Bool) (w : PresentationWord α) :
      schreierWord a e positive ((x, s) :: w) = (if h : x = a then [] else [(e ⟨x, h⟩, positive)]) ++ schreierWord a e (!positive) w

      One step of the rewrite: the letter a contributes nothing and any other letter contributes its Schreier generator, inverted exactly when the current representative is 1; the representative then switches.

      theorem TauCeti.schreierWord_not {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (positive : Bool) (w : PresentationWord α) :
      schreierWord a e (!positive) w = List.map (fun (p : β × Bool) => (p.1, !p.2)) (schreierWord a e positive w)

      Starting the rewrite from the other representative flips every sign.

      theorem TauCeti.schreierWord_cons_eq_append {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (positive : Bool) (x : α) (s : Bool) (w : PresentationWord α) :
      schreierWord a e positive ((x, s) :: w) = schreierWord a e positive [(x, s)] ++ schreierWord a e (!positive) w

      The rewrite of a word is the rewrite of its first letter followed by the rewrite of the rest from the other representative.

      def TauCeti.schreierRelators {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) :

      The Reidemeister--Schreier relators of a set W of source words: the rewrites of every word of W from both transversal representatives, that is, the rewrites of w and of a w a for every w ∈ W.

      Instances For
        @[simp]
        theorem TauCeti.mem_schreierRelators {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) {W : Set (PresentationWord α)} {r : FreeGroup β} :
        r ∈ schreierRelators a e W ↔ ∃ (positive : Bool), ∃ w ∈ W, FreeGroup.mk (schreierWord a e positive w) = r
        theorem TauCeti.mk_schreierWord_mem_schreierRelators {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) {W : Set (PresentationWord α)} (positive : Bool) {w : PresentationWord α} (hw : w ∈ W) :
        def TauCeti.schreierGenerator {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) (x : α) :

        The Schreier generator of a source generator in the rewritten presented group: the class of the generator indexed by x for x ≠ a, and the identity for x = a. It stands for the element a x of the source group, TauCeti.IsSchreierIndexTwoSource.toPresentedGroup_schreierGenerator.

        Instances For
          @[simp]
          theorem TauCeti.schreierGenerator_self {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) :
          theorem TauCeti.schreierGenerator_of_ne {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) {x : α} (hx : x ≠ a) :
          @[simp]
          theorem TauCeti.schreierGenerator_symm {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) (y : β) :

          The Schreier generator of the source generator indexed by y is the generator y.

          theorem TauCeti.mk_mk_schreierWord_singleton {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) (x : α) (s : Bool) :

          The class of the singleton rewrite of a source letter read at representative 1 is the inverse of its Schreier generator.

          Conjugation by the transversal element #

          def TauCeti.schreierInvHom {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) :

          Inverting every Schreier generator, as an endomorphism of the rewritten presented group. It is the action of conjugation by a on the kernel, since a (a x) a⁻¹ = x a = (a x)⁻¹ for involutions; it is an automorphism, TauCeti.schreierInvAut.

          Instances For
            @[simp]
            theorem TauCeti.schreierInvHom_of {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) (y : β) :
            @[simp]
            theorem TauCeti.schreierInvHom_apply_apply {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) (g : PresentedGroup (schreierRelators a e W)) :
            (schreierInvHom a e W) ((schreierInvHom a e W) g) = g

            Inverting every generator is an involution.

            @[simp]
            theorem TauCeti.schreierInvHom_schreierGenerator {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) (x : α) :

            Inverting every generator inverts every Schreier generator.

            def TauCeti.schreierInvAut {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) :

            Inverting every Schreier generator, as an automorphism of the rewritten presented group.

            Instances For
              @[simp]
              theorem TauCeti.schreierInvAut_apply {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) (g : PresentedGroup (schreierRelators a e W)) :
              (schreierInvAut a e W) g = (schreierInvHom a e W) g
              theorem TauCeti.schreierInvAut_sq {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) :
              schreierInvAut a e W ^ 2 = 1

              The inverting automorphism has order dividing two.

              def TauCeti.schreierConjAction {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) :

              The action of C₂ on the rewritten presented group through the inverting automorphism: the nontrivial element acts by TauCeti.schreierInvAut.

              Instances For
                theorem TauCeti.schreierConjAction_apply {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) (g : Multiplicative (ZMod 2)) :
                theorem TauCeti.schreierConjAction_ofAdd_one {α : Type u_1} {β : Type u_2} [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (W : Set (PresentationWord α)) :

                The nontrivial element of C₂ acts by inverting every Schreier generator.

                The source presentation #

                structure TauCeti.IsSchreierIndexTwoSource {α : Type u_1} (R : Set (FreeGroup α)) (W : Set (PresentationWord α)) :

                The hypotheses of index-two Reidemeister--Schreier rewriting on a source presentation. The group is PresentedGroup R; W is the set of source words to rewrite. Every generator is an involution in the presented group, every word of W has even length and is a relation of the presented group, and every relator of R is either the class of a word of W or the square of a generator. The squares are what the rewrite leaves out: they rewrite to words that are trivial in the free group.

                Instances For

                  Reading one letter of a word in the source presented group, whichever sign it carries.

                  The parity homomorphism #

                  The parity homomorphism of the source presented group: every generator goes to the nontrivial element of C₂.

                  Instances For

                    The parity homomorphism reads the parity of the length of a word.

                    The class of a word lies in the kernel of the parity homomorphism exactly when the word has even length.

                    The map from the rewritten presentation #

                    theorem TauCeti.IsSchreierIndexTwoSource.lift_mk_schreierWord {α : Type u_1} {β : Type u_2} {R : Set (FreeGroup α)} {W : Set (PresentationWord α)} (h : IsSchreierIndexTwoSource R W) [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (positive : Bool) (w : PresentationWord α) :
                    ((FreeGroup.lift fun (y : β) => PresentedGroup.of a * PresentedGroup.of ↑(e.symm y)) (FreeGroup.mk (schreierWord a e positive w)) * bif positive ^^ decide (Odd (List.length w)) then PresentedGroup.of a else 1) = (bif positive then PresentedGroup.of a else 1) * (PresentedGroup.mk R) (FreeGroup.mk w)

                    The lift of y ↦ a x_y to the free group evaluates a rewritten word against the source word, up to the transversal representatives at the two ends. Writing t true = a and t false = 1, the rewrite of w from representative t satisfies ρ(w) · t' = t · w, where t' is the representative reached after reading w.

                    theorem TauCeti.IsSchreierIndexTwoSource.lift_mk_schreierWord_of_mem {α : Type u_1} {β : Type u_2} {R : Set (FreeGroup α)} {W : Set (PresentationWord α)} (h : IsSchreierIndexTwoSource R W) [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) {w : PresentationWord α} (hw : w ∈ W) (positive : Bool) :
                    (FreeGroup.lift fun (y : β) => PresentedGroup.of a * PresentedGroup.of ↑(e.symm y)) (FreeGroup.mk (schreierWord a e positive w)) = 1

                    The homomorphism from the rewritten presented group to the source presented group, sending the Schreier generator indexed by y to a x_y, for x_y the source generator it names. It is injective, TauCeti.IsSchreierIndexTwoSource.toPresentedGroup_injective, with range the kernel of the parity homomorphism, TauCeti.IsSchreierIndexTwoSource.range_toPresentedGroup_eq_ker_parityHom.

                    Instances For
                      @[simp]
                      theorem TauCeti.IsSchreierIndexTwoSource.toPresentedGroup_of {α : Type u_1} {β : Type u_2} {R : Set (FreeGroup α)} {W : Set (PresentationWord α)} (h : IsSchreierIndexTwoSource R W) [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (y : β) :
                      theorem TauCeti.IsSchreierIndexTwoSource.toPresentedGroup_mk {α : Type u_1} {β : Type u_2} {R : Set (FreeGroup α)} {W : Set (PresentationWord α)} (h : IsSchreierIndexTwoSource R W) [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (z : FreeGroup β) :
                      @[simp]

                      The Schreier generator of x goes to a x.

                      The rewrite of an even-length word from representative 1 goes to the word itself.

                      theorem TauCeti.IsSchreierIndexTwoSource.parityHom_toPresentedGroup {α : Type u_1} {β : Type u_2} {R : Set (FreeGroup α)} {W : Set (PresentationWord α)} (h : IsSchreierIndexTwoSource R W) [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (g : PresentedGroup (schreierRelators a e W)) :
                      h.parityHom ((h.toPresentedGroup a e) g) = 1

                      The rewritten presented group maps onto the kernel of the parity homomorphism.

                      Injectivity, through the semidirect product H ⋊ C₂ #

                      theorem TauCeti.IsSchreierIndexTwoSource.toPresentedGroup_injective {α : Type u_1} {β : Type u_2} {R : Set (FreeGroup α)} {W : Set (PresentationWord α)} (h : IsSchreierIndexTwoSource R W) [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) :

                      The map from the rewritten presented group is injective: composed with the map of the source presented group into H ⋊ C₂ it is the inclusion of H.

                      The identification #

                      noncomputable def TauCeti.IsSchreierIndexTwoSource.mulEquivKerParityHom {α : Type u_1} {β : Type u_2} {R : Set (FreeGroup α)} {W : Set (PresentationWord α)} (h : IsSchreierIndexTwoSource R W) [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) :

                      Index-two Reidemeister--Schreier rewriting. The group presented by the rewrites of the source words is the kernel of the parity homomorphism of the source presented group, the Schreier generator indexed by y going to a x_y.

                      Instances For
                        @[simp]
                        theorem TauCeti.IsSchreierIndexTwoSource.coe_mulEquivKerParityHom_apply {α : Type u_1} {β : Type u_2} {R : Set (FreeGroup α)} {W : Set (PresentationWord α)} (h : IsSchreierIndexTwoSource R W) [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (g : PresentedGroup (schreierRelators a e W)) :
                        ↑((h.mulEquivKerParityHom a e) g) = (h.toPresentedGroup a e) g

                        The kernel of the parity homomorphism is the commutator subgroup as soon as all generators agree in the abelianization: an even-length word is then an even power of one element of order at most two there.

                        noncomputable def TauCeti.IsSchreierIndexTwoSource.mulEquivCommutator {α : Type u_1} {β : Type u_2} {R : Set (FreeGroup α)} {W : Set (PresentationWord α)} (h : IsSchreierIndexTwoSource R W) [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (habel : ∀ (x : α), Abelianization.of (PresentedGroup.of x) = Abelianization.of (PresentedGroup.of a)) :

                        Index-two Reidemeister--Schreier rewriting onto the commutator subgroup. When all generators agree in the abelianization, the group presented by the rewrites of the source words is the commutator subgroup of the source presented group.

                        Instances For
                          @[simp]
                          theorem TauCeti.IsSchreierIndexTwoSource.coe_mulEquivCommutator_apply {α : Type u_1} {β : Type u_2} {R : Set (FreeGroup α)} {W : Set (PresentationWord α)} (h : IsSchreierIndexTwoSource R W) [DecidableEq α] (a : α) (e : { x : α // x ≠ a } ≃ β) (habel : ∀ (x : α), Abelianization.of (PresentedGroup.of x) = Abelianization.of (PresentedGroup.of a)) (g : PresentedGroup (schreierRelators a e W)) :
                          ↑((h.mulEquivCommutator a e habel) g) = (h.toPresentedGroup a e) g

                          Presentation rows #

                          A transcribed presentation row presents the commutator subgroup of a source presentation when its relations have the same normal closure as the Reidemeister--Schreier relators of the source words, indexed by the row's generators through e, and the source generators agree in the abelianization. This is TauCeti.IsSchreierIndexTwoSource.mulEquivCommutator for a row in the auditable format, so that a transcription can be identified with the subgroup its source describes.

                          Instances For
                            @[simp]

                            The row generator indexed by i goes to a x, for x the source generator it names.