FenchelNielsenZomorrodian.Discrete.CompactFuchsian.SecondReduction.TransportMaps

2 Theorem | 3 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

noncomputable def secondReductionCanonicalTransportToSchreierGenerator
    {tailLen p q : ℕ}
    (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ)
    (hp : 2 ≤ p) (hq : 2 ≤ q)
    (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂') (hm₃' : 2 ≤ m₃')
    (htail : ∀ j, 2 ≤ tail j) :
    letI : NeZero q := ⟨Nat.ne_of_gt (lt_of_lt_of_le (by decide : 0 < 2) hq)⟩
    let σ :=
      secondReductionCanonicalSourceSignature
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
    letI : DecidableEq (FuchsianGenerator σ) := Classical.decEq _
    let hT :=
      secondReductionCanonicalSchreierTransversal_isRightSchreierTransversal
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
    SecondReductionTransportIndex tailLen p q → FreeGroup ↥(schreierGeneratorSet hT) := by
  classical
  dsimp
  letI : NeZero q := ⟨Nat.ne_of_gt (lt_of_lt_of_le (by decide : 0 < 2) hq)⟩
  let σ :=
    secondReductionCanonicalSourceSignature
      m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
  let φ :=
    secondReductionCanonicalSourceFreeQuotientHom
      m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
  let x : FuchsianGenerator σ :=
    secondReductionCanonicalDistinguishedGenerator
      m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
  let y : FuchsianGenerator σ :=
    FuchsianGenerator.elliptic
      (secondReductionCanonicalSourceMiddleIndex
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail ⟨1, by omega⟩)
  have hx : φ (FreeGroup.of x) = Multiplicative.ofAdd (1 : ZMod q) := by
    simp only [Lean.Elab.WF.paramLet, secondReductionCanonicalDistinguishedGenerator,
  secondReductionCanonicalSourceFreeQuotientHom_firstDistinguished m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail, φ, x]
  let hT :=
    secondReductionCanonicalSchreierTransversal_isRightSchreierTransversal
      m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
  let e :=
    secondReductionCanonicalSchreierBasisEquiv
      m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
  let distinguishedPos : φ.ker := ⟨(FreeGroup.of x) ^ q, by
    rw [MonoidHom.mem_ker, map_pow, hx]
    apply (Multiplicative.toAdd : Multiplicative (ZMod q) ≃ ZMod q).injective
    simp only [toAdd_pow, toAdd_ofAdd, nsmul_eq_mul, CharP.cast_eq_zero, mul_one, toAdd_one]⟩
  let distinguishedNeg : φ.ker := ⟨(FreeGroup.of y) ^ q, by
    have hy : φ (FreeGroup.of y) = Multiplicative.ofAdd (-1 : ZMod q) := by
      simp only [Lean.Elab.WF.paramLet, secondReductionCanonicalSourceFreeQuotientHom, id_eq,
  secondReductionCanonicalSourceMiddleIndex, Nat.reduceAdd, FreeGroup.lift_apply_of, ellipticQuotientGeneratorImage,
  secondReductionCanonicalSourceQuotientImage, Nat.succ_ne_self, ↓reduceIte, ofAdd_neg, φ, y]
    rw [MonoidHom.mem_ker, map_pow, hy]
    apply (Multiplicative.toAdd : Multiplicative (ZMod q) ≃ ZMod q).injective
    simp only [ofAdd_neg, inv_pow, toAdd_inv, toAdd_pow, toAdd_ofAdd, nsmul_eq_mul, CharP.cast_eq_zero, mul_one,
  neg_zero, toAdd_one]⟩
  let zeroConjugateKernel :
      (i : Fin σ.numPeriods) →
        φ (xWord σ i) = 1 → Fin q → φ.ker := fun i hi k =>
    ⟨(FreeGroup.of x) ^ k.val * xWord σ i * ((FreeGroup.of x) ^ k.val)⁻¹, by
      change
        φ ((FreeGroup.of x) ^ k.val * xWord σ i *
          ((FreeGroup.of x) ^ k.val)⁻¹) = 1
      simp only [Lean.Elab.WF.paramLet, map_mul, map_pow, hx, hi, mul_one, map_inv, mul_inv_cancel]⟩
  intro idx
  rcases idx with ⟨src, k⟩
  cases src with
  | inl head =>
      by_cases h0 : head.val = 0
      · let i :=
          secondReductionCanonicalSourceZeroIndex
            m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
        exact e.symm (zeroConjugateKernel i (by
          simp only [Lean.Elab.WF.paramLet, secondReductionCanonicalSourceFreeQuotientHom, id_eq, xWord,
  secondReductionCanonicalSourceZeroIndex, FreeGroup.lift_apply_of, ellipticQuotientGeneratorImage,
  secondReductionCanonicalSourceQuotientImage, OfNat.zero_ne_ofNat, ↓reduceIte, φ, i]) k)
      · have h1 : head.val = 1 := by omega
        let i :=
          secondReductionCanonicalSourceOneIndex
            m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
        exact e.symm (zeroConjugateKernel i (by
          simp only [Lean.Elab.WF.paramLet, secondReductionCanonicalSourceFreeQuotientHom, id_eq, xWord,
  secondReductionCanonicalSourceOneIndex, FreeGroup.lift_apply_of, ellipticQuotientGeneratorImage,
  secondReductionCanonicalSourceQuotientImage, OfNat.one_ne_ofNat, ↓reduceIte, φ, i]) k)
  | inr rest =>
      cases rest with
      | inl distinguished =>
          by_cases h0 : distinguished.val = 0
          · exact e.symm distinguishedPos
          · have h1 : distinguished.val = 1 := by omega
            exact e.symm distinguishedNeg
      | inr rest =>
          cases rest with
          | inl r =>
              let i :=
                secondReductionCanonicalSourceMiddleIndex
                  m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
                  ⟨2 + r.val, by omega⟩
              exact e.symm (zeroConjugateKernel i (by
                have hnot3 : ¬ 2 + (2 + r.val) = 3 := by omega
                simp only [Lean.Elab.WF.paramLet, secondReductionCanonicalSourceFreeQuotientHom, id_eq, xWord,
  secondReductionCanonicalSourceMiddleIndex, FreeGroup.lift_apply_of, ellipticQuotientGeneratorImage,
  secondReductionCanonicalSourceQuotientImage, Nat.add_eq_left, Nat.add_eq_zero_iff, OfNat.ofNat_ne_zero, false_and,
  ↓reduceIte, hnot3, φ, i]) k)
          | inr jk =>
              rcases jk with ⟨j, b⟩
              let i :=
                secondReductionCanonicalSourceTailIndex
                  m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail b j
              exact e.symm (zeroConjugateKernel i (by
                have hnot2 : ¬ 2 + p + b.val * tailLen + j.val = 2 := by omega
                have hnot3 : ¬ 2 + p + b.val * tailLen + j.val = 3 := by omega
                simp only [Lean.Elab.WF.paramLet, secondReductionCanonicalSourceFreeQuotientHom, id_eq, xWord,
  secondReductionCanonicalSourceTailIndex, FreeGroup.lift_apply_of, ellipticQuotientGeneratorImage,
  secondReductionCanonicalSourceQuotientImage, hnot2, ↓reduceIte, hnot3, φ, i]) k)

The second-reduction Schreier word or generator is evaluated by the chosen transversal and equals the prescribed target word.

noncomputable def secondReductionCanonicalTransportToSchreierGeneratorImage
    {tailLen p q : ℕ}
    (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ)
    (hp : 2 ≤ p) (hq : 2 ≤ q)
    (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂') (hm₃' : 2 ≤ m₃')
    (htail : ∀ j, 2 ≤ tail j) :
    letI : NeZero q := ⟨Nat.ne_of_gt (lt_of_lt_of_le (by decide : 0 < 2) hq)⟩
    let σ :=
      secondReductionCanonicalSourceSignature
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
    let τ :=
      secondReductionTransportSignature (p := p) hq
        m₁' m₂' m₃' tail hm₁' hm₂' hm₃' htail
    letI : DecidableEq (FuchsianGenerator σ) := Classical.decEq _
    let hT :=
      secondReductionCanonicalSchreierTransversal_isRightSchreierTransversal
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
    FuchsianGenerator τ → FreeGroup ↥(schreierGeneratorSet hT)
  | .elliptic i =>
      secondReductionCanonicalTransportToSchreierGenerator
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
        ((Fintype.equivFin (SecondReductionTransportIndex tailLen p q)).symm i)
  | .surfaceA _ => 1
  | .surfaceB _ => 1

The second-reduction Schreier word or generator is evaluated by the chosen transversal and equals the prescribed target word.

noncomputable def secondReductionCanonicalTransportToSchreierHom
    {tailLen p q : ℕ}
    (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ)
    (hp : 2 ≤ p) (hq : 2 ≤ q)
    (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂') (hm₃' : 2 ≤ m₃')
    (htail : ∀ j, 2 ≤ tail j) :
    letI : NeZero q := ⟨Nat.ne_of_gt (lt_of_lt_of_le (by decide : 0 < 2) hq)⟩
    let σ :=
      secondReductionCanonicalSourceSignature
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
    let τ :=
      secondReductionTransportSignature (p := p) hq
        m₁' m₂' m₃' tail hm₁' hm₂' hm₃' htail
    letI : DecidableEq (FuchsianGenerator σ) := Classical.decEq _
    let hT :=
      secondReductionCanonicalSchreierTransversal_isRightSchreierTransversal
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
    FreeGroup (FuchsianGenerator τ) →* FreeGroup ↥(schreierGeneratorSet hT) :=
  FreeGroup.lift
    (secondReductionCanonicalTransportToSchreierGeneratorImage
      m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail)

The homomorphism from the transported second-reduction presentation to the canonical Schreier presentation.

private theorem secondReductionCanonicalTransportSchreierGenerator_power_mem_normalClosure
    {tailLen p q : ℕ}
    (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ)
    (hp : 2 ≤ p) (hq : 2 ≤ q)
    (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂') (hm₃' : 2 ≤ m₃')
    (htail : ∀ j, 2 ≤ tail j)
    (idx : SecondReductionTransportIndex tailLen p q) :
    letI : NeZero q

The named second-reduction relator follows from the source presentation relators and therefore lies in their normal closure.

Show proof
theorem secondReductionCanonicalTransportToSchreier_powerRelator_mem_normalClosure
    {tailLen p q : ℕ}
    (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ)
    (hp : 2 ≤ p) (hq : 2 ≤ q)
    (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂') (hm₃' : 2 ≤ m₃')
    (htail : ∀ j, 2 ≤ tail j)
    (i :
      Fin
        (secondReductionTransportSignature (p := p) hq
          m₁' m₂' m₃' tail hm₁' hm₂' hm₃' htail).numPeriods) :
    letI : NeZero q

The named second-reduction relator follows from the source presentation relators and therefore lies in their normal closure.

Show proof