FenchelNielsenZomorrodian.Discrete.CompactFuchsian.SecondReduction.Signatures

22 Theorem | 10 Definition

This module studies signatures for fenchel nielsen zomorrodian. The period function of the second-reduction canonical source signature. The zero-index period of the second-reduction canonical source signature.

import
Imported by

Declarations

def secondReductionCanonicalSourcePeriod
    {tailLen p q : ℕ}
    (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ)
    (i : Fin (2 + (p + tailLen * p))) : ℕ :=
  if _h0 : i.val = 0 then
    m₁'
  else if _h1 : i.val = 1 then
    m₂'
  else if _hmid : i.val < 2 + p then
    q * m₃'
  else if hTailLen : 0 < tailLen then
    tail ⟨(i.val - (2 + p)) % tailLen, Nat.mod_lt _ hTailLen⟩
  else
    m₁'
@[local simp]

The period function of the second-reduction canonical source signature.

theorem secondReductionCanonicalSourcePeriod_zero
    {tailLen p q : ℕ}
    (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ) :
    secondReductionCanonicalSourcePeriod (tailLen := tailLen) (p := p) (q := q)
        m₁' m₂' m₃' tail ⟨0, by omega⟩ = m₁'

The zero-index period of the second-reduction canonical source signature.

Show proof
theorem secondReductionCanonicalSourcePeriod_one
    {tailLen p q : ℕ}
    (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ) :
    secondReductionCanonicalSourcePeriod (tailLen := tailLen) (p := p) (q := q)
        m₁' m₂' m₃' tail ⟨1, by omega⟩ = m₂'

The first distinguished period of the second-reduction canonical source signature.

Show proof
theorem secondReductionCanonicalSourcePeriod_middle
    {tailLen p q : ℕ}
    (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ) (r : Fin p) :
    secondReductionCanonicalSourcePeriod (tailLen := tailLen) (p := p) (q := q)
        m₁' m₂' m₃' tail ⟨2 + r.val, by omega⟩ = q * m₃'

The middle period of the second-reduction canonical source signature.

Show proof
theorem secondReductionCanonicalSourcePeriod_tail
    {tailLen p q : ℕ}
    (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ)
    (k : Fin p) (j : Fin tailLen) :
    secondReductionCanonicalSourcePeriod (tailLen := tailLen) (p := p) (q := q)
        m₁' m₂' m₃' tail
        ⟨2 + p + k.val * tailLen + j.val, by
          have hblock : k.val * tailLen + j.val < (k.val + 1) * tailLen := by
            calc
              k.val * tailLen + j.val < k.val * tailLen + tailLen :=
                Nat.add_lt_add_left j.isLt _
              _ = (k.val + 1) * tailLen := by rw [Nat.add_mul, one_mul]
          have hle : (k.val + 1) * tailLen ≤ p * tailLen :=
            Nat.mul_le_mul_right tailLen (Nat.succ_le_of_lt k.isLt)
          have hmain : k.val * tailLen + j.val < p * tailLen :=
            lt_of_lt_of_le hblock hle
          have hcomm : p * tailLen = tailLen * p := Nat.mul_comm p tailLen
          omega⟩ = tail j

A tail period of the second-reduction canonical source signature.

Show proof
def secondReductionCanonicalSourceSignature
    {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) :
    FuchsianSignature where
  orbitGenus := 0
  numCusps := 0
  numPeriods := 2 + (p + tailLen * p)
  periods :=
    secondReductionCanonicalSourcePeriod (tailLen := tailLen) (p := p) (q := q)
      m₁' m₂' m₃' tail
  period_ge_two := by
    intro i
    unfold secondReductionCanonicalSourcePeriod
    by_cases h0 : i.val = 0
    · rw [dif_pos h0]
      exact hm₁'
    · by_cases h1 : i.val = 1
      · rw [dif_neg h0, dif_pos h1]
        exact hm₂'
      · by_cases hmid : i.val < 2 + p
        · rw [dif_neg h0, dif_neg h1, dif_pos hmid]
          exact le_trans hq
            (Nat.le_mul_of_pos_right q (lt_of_lt_of_le (by decide : 0 < 2) hm₃'))
        · by_cases hTailLen : 0 < tailLen
          · rw [dif_neg h0, dif_neg h1, dif_neg hmid, dif_pos hTailLen]
            exact htail ⟨(i.val - (2 + p)) % tailLen, Nat.mod_lt _ hTailLen⟩
          · rw [dif_neg h0, dif_neg h1, dif_neg hmid, dif_neg hTailLen]
            exact hm₁'
  numCusps_eq_zero := rfl
  numPeriods_ge_three := by omega

The canonical source signature used in the second reduction.

def secondReductionCanonicalSourceZeroIndex
    {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) :
    Fin
      (secondReductionCanonicalSourceSignature
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail).numPeriods :=
  ⟨0, by simp only [secondReductionCanonicalSourceSignature, add_pos_iff, Nat.ofNat_pos, CanonicallyOrderedAdd.mul_pos,
  true_or]⟩

The zero-index component of the second-reduction canonical source signature.

def secondReductionCanonicalSourceOneIndex
    {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) :
    Fin
      (secondReductionCanonicalSourceSignature
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail).numPeriods :=
  ⟨1, by simp only [secondReductionCanonicalSourceSignature]; omega⟩

The first distinguished index of the second-reduction canonical source signature.

def secondReductionCanonicalSourceMiddleIndex
    {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) (r : Fin p) :
    Fin
      (secondReductionCanonicalSourceSignature
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail).numPeriods :=
  ⟨2 + r.val, by simp only [secondReductionCanonicalSourceSignature, add_lt_add_iff_left]; omega⟩

The middle index of the second-reduction canonical source signature.

def secondReductionCanonicalSourceTailIndex
    {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) (k : Fin p) (j : Fin tailLen) :
    Fin
      (secondReductionCanonicalSourceSignature
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail).numPeriods :=
  ⟨2 + p + k.val * tailLen + j.val, by
    have hblock : k.val * tailLen + j.val < (k.val + 1) * tailLen := by
      calc
        k.val * tailLen + j.val < k.val * tailLen + tailLen :=
          Nat.add_lt_add_left j.isLt _
        _ = (k.val + 1) * tailLen := by rw [Nat.add_mul, one_mul]
    have hle : (k.val + 1) * tailLen ≤ p * tailLen :=
      Nat.mul_le_mul_right tailLen (Nat.succ_le_of_lt k.isLt)
    have hmain : k.val * tailLen + j.val < p * tailLen :=
      lt_of_lt_of_le hblock hle
    have hcomm : p * tailLen = tailLen * p := Nat.mul_comm p tailLen
    simp only [secondReductionCanonicalSourceSignature, gt_iff_lt]
    omega⟩

The tail index of the second-reduction canonical source signature.

@[simp 900] theorem secondReductionCanonicalSourceSignature_period_zero
    {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) :
    (secondReductionCanonicalSourceSignature
      m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail).periods
        (secondReductionCanonicalSourceZeroIndex
          m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail) =
      m₁'

The canonical source signature has the prescribed zero-index period.

Show proof
@[simp 900] theorem secondReductionCanonicalSourceSignature_period_one
    {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) :
    (secondReductionCanonicalSourceSignature
      m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail).periods
        (secondReductionCanonicalSourceOneIndex
          m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail) =
      m₂'

The canonical source signature has the prescribed first distinguished period.

Show proof
@[simp 900] theorem secondReductionCanonicalSourceSignature_period_middle
    {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) (r : Fin p) :
    (secondReductionCanonicalSourceSignature
      m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail).periods
        (secondReductionCanonicalSourceMiddleIndex
          m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail r) =
      q * m₃'

The canonical source signature has the prescribed middle period.

Show proof
@[simp 900] theorem secondReductionCanonicalSourceSignature_period_tail
    {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) (k : Fin p) (j : Fin tailLen) :
    (secondReductionCanonicalSourceSignature
      m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail).periods
        (secondReductionCanonicalSourceTailIndex
          m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail k j) =
      tail j

The canonical source signature has the prescribed tail period.

Show proof
theorem secondReductionCanonicalSource_totalRelation_eq
    {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) :
    let σ

The second-reduction canonical source total relation equals the displayed product relation.

Show proof
def firstSecondInputIndexEquivCanonicalSecondSourceFin
    (tailLen p : ℕ) :
    FirstSecondInputIndex tailLen p ≃ Fin (2 + (p + tailLen * p)) :=
  (Equiv.sumCongr (Equiv.refl (Fin 2))
    ((Equiv.sumCongr (Equiv.refl (Fin p))
        ((Equiv.prodComm (Fin tailLen) (Fin p)).trans finProdFinEquiv)).trans
      (finSumFinEquiv.trans (finCongr (by rw [Nat.mul_comm p tailLen]))))).trans
    finSumFinEquiv
@[local simp]

The finite-index equivalence reindexes the first-second input periods as the canonical second-source periods.

theorem firstSecondInputIndexEquivCanonicalSecondSourceFin_inl_zero
    (tailLen p : ℕ) :
    firstSecondInputIndexEquivCanonicalSecondSourceFin tailLen p (.inl (0 : Fin 2)) =
      (⟨0, by omega⟩ : Fin (2 + (p + tailLen * p)))

The reindexing equivalence evaluates on the zero left component as specified by the construction.

Show proof
theorem firstSecondInputIndexEquivCanonicalSecondSourceFin_inl_one
    (tailLen p : ℕ) :
    firstSecondInputIndexEquivCanonicalSecondSourceFin tailLen p (.inl (1 : Fin 2)) =
      (⟨1, by omega⟩ : Fin (2 + (p + tailLen * p)))

The reindexing equivalence evaluates on the one left component as specified by the construction.

Show proof
theorem firstSecondInputIndexEquivCanonicalSecondSourceFin_middle
    {tailLen p : ℕ} (r : Fin p) :
    firstSecondInputIndexEquivCanonicalSecondSourceFin tailLen p (.inr (.inl r)) =
      (⟨2 + r.val, by omega⟩ : Fin (2 + (p + tailLen * p)))

The reindexing equivalence sends a middle component to the corresponding canonical index.

Show proof
theorem firstSecondInputIndexEquivCanonicalSecondSourceFin_tail
    {tailLen p : ℕ} (j : Fin tailLen) (k : Fin p) :
    firstSecondInputIndexEquivCanonicalSecondSourceFin tailLen p (.inr (.inr (j, k))) =
      (⟨2 + p + k.val * tailLen + j.val, by
        have hblock : k.val * tailLen + j.val < (k.val + 1) * tailLen := by
          calc
            k.val * tailLen + j.val < k.val * tailLen + tailLen :=
              Nat.add_lt_add_left j.isLt _
            _ = (k.val + 1) * tailLen := by rw [Nat.add_mul, one_mul]
        have hle : (k.val + 1) * tailLen ≤ p * tailLen :=
          Nat.mul_le_mul_right tailLen (Nat.succ_le_of_lt k.isLt)
        have hmain : k.val * tailLen + j.val < p * tailLen :=
          lt_of_lt_of_le hblock hle
        have hcomm : p * tailLen = tailLen * p := Nat.mul_comm p tailLen
        omega⟩ : Fin (2 + (p + tailLen * p)))

The reindexing equivalence sends a tail component to the corresponding canonical index.

Show proof
def secondReductionSourceIndexEquivCanonicalSourceFin
    {tailLen p : ℕ} (hp : 2 ≤ p) :
    SecondReductionSourceIndex tailLen p ≃ Fin (2 + (p + tailLen * p)) :=
  (firstSecondInputIndexEquivSecondReductionSourceIndex (tailLen := tailLen) hp).symm.trans
    (firstSecondInputIndexEquivCanonicalSecondSourceFin tailLen p)
@[local simp]

The finite-index equivalence reindexes the second-reduction source periods as the canonical source periods.

theorem secondReductionSourceIndexEquivCanonicalSourceFin_inl_zero
    {tailLen p : ℕ} (hp : 2 ≤ p) :
    secondReductionSourceIndexEquivCanonicalSourceFin (tailLen := tailLen) hp (.inl (0 : Fin 2)) =
      (⟨0, by omega⟩ : Fin (2 + (p + tailLen * p)))

The reindexing equivalence evaluates on the zero left component as specified by the construction.

Show proof
theorem secondReductionSourceIndexEquivCanonicalSourceFin_inl_one
    {tailLen p : ℕ} (hp : 2 ≤ p) :
    secondReductionSourceIndexEquivCanonicalSourceFin (tailLen := tailLen) hp (.inl (1 : Fin 2)) =
      (⟨1, by omega⟩ : Fin (2 + (p + tailLen * p)))

The reindexing equivalence evaluates on the one left component as specified by the construction.

Show proof
theorem secondReductionSourceIndexEquivCanonicalSourceFin_distinguished
    {tailLen p : ℕ} (hp : 2 ≤ p) (i : Fin 2) :
    secondReductionSourceIndexEquivCanonicalSourceFin (tailLen := tailLen) hp (.inr (.inl i)) =
      (⟨2 + i.val, by omega⟩ : Fin (2 + (p + tailLen * p)))

The reindexing equivalence sends the distinguished component to the distinguished canonical index.

Show proof
theorem secondReductionSourceIndexEquivCanonicalSourceFin_rest
    {tailLen p : ℕ} (hp : 2 ≤ p) (r : Fin (p - 2)) :
    secondReductionSourceIndexEquivCanonicalSourceFin
        (tailLen := tailLen) hp (.inr (.inr (.inl r))) =
      (⟨4 + r.val, by omega⟩ : Fin (2 + (p + tailLen * p)))

The reindexing equivalence sends a remaining component to the corresponding canonical index.

Show proof
theorem secondReductionSourceIndexEquivCanonicalSourceFin_tail
    {tailLen p : ℕ} (hp : 2 ≤ p) (j : Fin tailLen) (k : Fin p) :
    secondReductionSourceIndexEquivCanonicalSourceFin
        (tailLen := tailLen) hp (.inr (.inr (.inr (j, k)))) =
      (⟨2 + p + k.val * tailLen + j.val, by
        have hblock : k.val * tailLen + j.val < (k.val + 1) * tailLen := by
          calc
            k.val * tailLen + j.val < k.val * tailLen + tailLen :=
              Nat.add_lt_add_left j.isLt _
            _ = (k.val + 1) * tailLen := by rw [Nat.add_mul, one_mul]
        have hle : (k.val + 1) * tailLen ≤ p * tailLen :=
          Nat.mul_le_mul_right tailLen (Nat.succ_le_of_lt k.isLt)
        have hmain : k.val * tailLen + j.val < p * tailLen :=
          lt_of_lt_of_le hblock hle
        have hcomm : p * tailLen = tailLen * p := Nat.mul_comm p tailLen
        omega⟩ : Fin (2 + (p + tailLen * p)))

The reindexing equivalence sends a tail component to the corresponding canonical index.

Show proof
theorem secondReductionSourceSignature_mulEquiv_canonicalSourceSignature_exists
    {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) :
    Nonempty
      (FuchsianPresentedGroup
          (secondReductionSourceSignature (p := p) m₁' m₂' m₃' tail hq hm₁' hm₂'
            (lt_of_lt_of_le (by decide : 0 < 2) hm₃') htail)
        ≃*
        FuchsianPresentedGroup
          (secondReductionCanonicalSourceSignature
            m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail))

There is a multiplicative equivalence between the second-reduction source signature and the canonical source signature.

Show proof
noncomputable def secondReductionCanonicalSourceQuotientImage
    {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) :
    (let σ :=
      secondReductionCanonicalSourceSignature m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
     Fin σ.numPeriods → Multiplicative (ZMod q)) :=
  fun i =>
    if i.val = 2 then Multiplicative.ofAdd (1 : ZMod q)
    else if i.val = 3 then Multiplicative.ofAdd (-1 : ZMod q)
    else 1

Generator images for the second-reduction canonical source quotient.

theorem secondReductionCanonicalSourceQuotientImage_pow
    {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) :
    let σ

The second-reduction source quotient image satisfies the prescribed power relation.

Show proof
theorem secondReductionCanonicalSourceQuotientImage_prod
    {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) :
    let σ

The second-reduction source quotient image satisfies the prescribed product relation.

Show proof
noncomputable def secondReductionCanonicalSourceQuotientHom
    {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) :
    FuchsianPresentedGroup
      (secondReductionCanonicalSourceSignature
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail) →*
        Multiplicative (ZMod q) := by
  classical
  let σ :=
    secondReductionCanonicalSourceSignature m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
  exact
    ellipticQuotientHom σ
      (secondReductionCanonicalSourceQuotientImage
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail)
      (secondReductionCanonicalSourceQuotientImage_pow
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail)
      (secondReductionCanonicalSourceQuotientImage_prod
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail)
@[local simp]

The canonical second-reduction source quotient homomorphism.

theorem secondReductionCanonicalSourceQuotientHom_firstDistinguished
    {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) :
    secondReductionCanonicalSourceQuotientHom
        m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
        (PresentedGroup.of
          (rels := relators
            (secondReductionCanonicalSourceSignature
              m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail))
          (FuchsianGenerator.elliptic
            (secondReductionCanonicalSourceMiddleIndex
              m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail ⟨0, by omega⟩))) =
      Multiplicative.ofAdd (1 : ZMod q)

The canonical second-reduction source quotient homomorphism sends the first distinguished generator to the prescribed quotient value.

Show proof