ProCGroups.ReidemeisterSchreier.Discrete.OpenSubgroups.ClassicalGeneratorBasis
This module identifies the classical Schreier generators with the free basis obtained from complement edges, including the inverse-basis convention needed for the standard generator formula.
Theorem
ReidemeisterSchreier.Discrete.OpenSubgroups.IsRightSchreierTransversal.exists_schreierBasisEquiv
theorem IsRightSchreierTransversal.exists_schreierBasisEquiv
{X : Type u} [DecidableEq X] {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
(hT : IsRightSchreierTransversal (X := X) L T) :
∃ e : FreeGroup ↥(schreierGeneratorSet (X := X) hT) ≃* L,
∀ z : ↥(schreierGeneratorSet (X := X) hT),
e (FreeGroup.of z) = (z : L)Positive-valued Schreier-basis existence statement on the classical Schreier generator set. It is equivalent to the nontrivial Schreier-pair basis equivalence used in the main formulation.
Show Lean proof
by
classical
rcases Internal.IsRightSchreierTransversal.exists_inverseSchreierBasisEquiv hT with
⟨eInverse, hInverse⟩
let e : FreeGroup ↥(schreierGeneratorSet (X := X) hT) ≃* L :=
(FreeGroup.generatorInversionEquiv ↥(schreierGeneratorSet (X := X) hT)).trans eInverse
refine ⟨e, ?_⟩
intro z
dsimp [e]
calc
eInverse ((FreeGroup.of z)⁻¹) = (eInverse (FreeGroup.of z))⁻¹ := by simp only [map_inv]
_ = ((z : L)⁻¹)⁻¹ := by rw [hInverse z]
_ = (z : L) := inv_inv _
noncomputable def schreierGeneratorInverseBasisEquiv
{X : Type u} [DecidableEq X] {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
(hT : IsRightSchreierTransversal (X := X) L T) :
FreeGroup ↥(schreierGeneratorSet (X := X) hT) ≃* L :=
Classical.choose (Internal.IsRightSchreierTransversal.exists_inverseSchreierBasisEquiv hT)The inverse-valued free-group equivalence on the classical Schreier generator value set is equivalent to the nontrivial Schreier-pair basis equivalence used in the main formulation.
theorem schreierGeneratorInverseBasisEquiv_of
{X : Type u} [DecidableEq X] {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
(hT : IsRightSchreierTransversal (X := X) L T)
(z : ↥(schreierGeneratorSet (X := X) hT)) :
schreierGeneratorInverseBasisEquiv (X := X) hT (FreeGroup.of z) = (z : L)⁻¹The inverse-valued classical generator-set equivalence sends a free generator to the inverse of the represented Schreier generator.
Show Lean proof
Classical.choose_spec (Internal.IsRightSchreierTransversal.exists_inverseSchreierBasisEquiv hT) z