FenchelNielsenZomorrodian.Discrete.CompactFuchsian.PeriodFamilies

4 Theorem | 6 Definition | 6 Abbreviation

This module studies period families for fenchel nielsen zomorrodian. The two-entry period family has the prescribed periods. The zero-index value of the two-entry period family.

import
Imported by

Declarations

def twoPeriods {α : Type*} (a b : α) : Fin 2 → α :=
  Fin.cases a (fun _ => b)

The two-entry period family has the prescribed periods.

@[simp 900] theorem twoPeriods_zero {α : Type*} (a b : α) :
    twoPeriods a b 0 = a

The zero-index value of the two-entry period family.

Show proof
@[simp 900] theorem twoPeriods_one {α : Type*} (a b : α) :
    twoPeriods a b 1 = b

The one-index value of the two-entry period family.

Show proof
@[simp 900] theorem fin_cases_const_one {α : Type*} (a b : α) :
    Fin.cases a (fun _ : Fin 1 => b) 1 = b

Case analysis for finite indices in the constant-one period family.

Show proof
abbrev OriginalFirstReductionIndex (tailLen : ℕ) := Sum (Fin 2) (Fin tailLen)

The index type for the original first-reduction period family.

def originalFirstReductionPeriods {tailLen p : ℕ}
    (m₁' m₂' : ℕ) (tail : Fin tailLen → ℕ) :
    OriginalFirstReductionIndex tailLen → ℕ
  | .inl i => twoPeriods (p * m₁') (p * m₂') i
  | .inr j => tail j

The original period family transported for the first reduction.

abbrev FirstReductionIndex (tailLen p : ℕ) := Sum (Fin 2) (Fin tailLen × Fin p)

Index type used for the first reduction of period families.

def firstReductionPeriods {tailLen p : ℕ}
    (m₁' m₂' : ℕ) (tail : Fin tailLen → ℕ) :
    FirstReductionIndex tailLen p → ℕ
  | .inl i => twoPeriods m₁' m₂' i
  | .inr jk => tail jk.1

The period family used in the first reduction.

abbrev FirstSecondInputIndex (tailLen p : ℕ) := Sum (Fin 2) (Sum (Fin p) (Fin tailLen × Fin p))

Index type combining the first and second period-family inputs.

abbrev SecondReductionSourceIndex (tailLen p : ℕ) :=
  Sum (Fin 2) (Sum (Fin 2) (Sum (Fin (p - 2)) (Fin tailLen × Fin p)))

The index type for the source periods in the second reduction.

def secondReductionSourcePeriods {tailLen p q : ℕ}
    (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ) :
    SecondReductionSourceIndex tailLen p → ℕ
  | .inl i => twoPeriods m₁' m₂' i
  | .inr (.inl _) => q * m₃'
  | .inr (.inr (.inl _)) => q * m₃'
  | .inr (.inr (.inr jk)) => tail jk.1

The source period family used in the second reduction.

def secondReductionSourceCycleCount {tailLen p q : ℕ} :
    SecondReductionSourceIndex tailLen p → ℕ
  | .inl _ => q
  | .inr (.inl _) => 1
  | .inr (.inr (.inl _)) => q
  | .inr (.inr (.inr _)) => q

The source cycle count for the second reduction is the expected period-family cycle length.

def secondReductionSourceTransportPeriods {tailLen p q : ℕ}
    (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ) :
    ∀ i : SecondReductionSourceIndex tailLen p,
      Fin (secondReductionSourceCycleCount (q := q) i) → ℕ
  | .inl i, _ => twoPeriods m₁' m₂' i
  | .inr (.inl _), _ => m₃'
  | .inr (.inr (.inl _)), _ => q * m₃'
  | .inr (.inr (.inr jk)), _ => tail jk.1

The transported source period family used in the second reduction.

abbrev SecondReductionTransportIndex (tailLen p q : ℕ) :=
  Σ i : SecondReductionSourceIndex tailLen p,
    Fin (secondReductionSourceCycleCount (tailLen := tailLen) (p := p) (q := q) i)

The index type for transported periods in the second reduction.

abbrev secondReductionTransportPeriods {tailLen p q : ℕ}
    (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ) :
    SecondReductionTransportIndex tailLen p q → ℕ :=
  singermanTransportPeriodsFamily
    (secondReductionSourceTransportPeriods (p := p) (q := q) m₁' m₂' m₃' tail)

The transported period family used in the second reduction.

theorem secondReductionTransport_hasEqualPartnerFamily
    {tailLen p q : ℕ} (hq : 2 ≤ q)
    (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ) :
    HasEqualPartnerFamily (secondReductionTransportPeriods (p := p) (q := q) m₁' m₂' m₃' tail)

The transported second-reduction period family has the required equal-partner pairing.

Show proof