FenchelNielsenZomorrodian/Discrete/CompactFuchsian/FirstReduction/KernelEquivalence.lean

1import FenchelNielsenZomorrodian.Discrete.CompactFuchsian.FirstReduction.ActualTransport
2import FenchelNielsenZomorrodian.Discrete.CompactFuchsian.FirstReduction.RelatorProofs
4/-
5PUBLIC_PAGE_SNAPSHOT
6generated_at: 2026-05-27T09:47:29+09:00
7lean_source: lean4/FenchelNielsenZomorrodian/Discrete/CompactFuchsian/FirstReduction/KernelEquivalence.lean
8translation_root: data/translation
9purpose: identifies the local data snapshot used to build pages/
10placement: after imports, never before imports
11-/
12/-!
13# First compact zero-genus reduction
15The first explicit finite quotient reduction for compact zero-genus Fuchsian presentations, including quotient maps, basis transport, signatures, and relator verification.
16-/
18namespace FenchelNielsen
20 (tailLen : ℕ) :
21 OriginalFirstReductionIndex tailLen ≃ Fin (2 + tailLen) :=
22 (Equiv.sumCongr (Equiv.refl (Fin 2)) (Equiv.refl (Fin tailLen))).trans
23 finSumFinEquiv
25 {tailLen p : ℕ}
26 (m₁' m₂' : ℕ) (tail : Fin tailLen → ℕ)
27 (hp : 2 ≤ p) (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂')
28 (htail : ∀ j, 2 ≤ tail j) (hTailLen : 0 < tailLen) :
29 Nonempty
31 (firstReductionSourceSignature m₁' m₂' tail hp
32 (lt_of_lt_of_le (by decide : 0 < 2) hm₁')
33 (lt_of_lt_of_le (by decide : 0 < 2) hm₂') htail hTailLen)
34 ≃*
37 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen)) := by
38 classical
39 refine
41 (firstReductionSourceSignature m₁' m₂' tail hp
42 (lt_of_lt_of_le (by decide : 0 < 2) hm₁')
43 (lt_of_lt_of_le (by decide : 0 < 2) hm₂') htail hTailLen)
45 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen)
46 ?_ ?_
51 · intro x
52 cases x using Sum.casesOn <;> rename_i x
53 · fin_cases x
54 · calc
55 (firstReductionSourceSignature m₁' m₂' tail hp
56 (lt_of_lt_of_le (by decide : 0 < 2) hm₁')
57 (lt_of_lt_of_le (by decide : 0 < 2) hm₂') htail hTailLen).periods
58 (originalFirstReductionOrderedIndexEquiv tailLen (.inl (0 : Fin 2))) =
59 p * m₁' := by
62 Nat.zero_mod, ↓reduceDIte]
63 _ =
65 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen).periods
66 (originalFirstReductionIndexEquivCanonicalSourceFin tailLen (.inl (0 : Fin 2))) := by
69 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen).symm
70 · calc
71 (firstReductionSourceSignature m₁' m₂' tail hp
72 (lt_of_lt_of_le (by decide : 0 < 2) hm₁')
73 (lt_of_lt_of_le (by decide : 0 < 2) hm₂') htail hTailLen).periods
74 (originalFirstReductionOrderedIndexEquiv tailLen (.inl (1 : Fin 2))) =
75 p * m₂' := by
77 have hOneFin : (1 : Fin (2 + tailLen)) = ⟨1, by omega⟩ := by
78 apply Fin.ext
79 simp only [Fin.coe_ofNat_eq_mod]
80 rw [Nat.mod_eq_of_lt (by omega : 1 < 2 + tailLen)]
81 rw [hOneFin]
83 _ =
85 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen).periods
86 (originalFirstReductionIndexEquivCanonicalSourceFin tailLen (.inl (1 : Fin 2))) := by
89 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen).symm
90 · calc
91 (firstReductionSourceSignature m₁' m₂' tail hp
92 (lt_of_lt_of_le (by decide : 0 < 2) hm₁')
93 (lt_of_lt_of_le (by decide : 0 < 2) hm₂') htail hTailLen).periods
95 tail x := by
98 OfNat.ofNat_ne_zero, false_and, ↓reduceDIte, add_tsub_cancel_left, Fin.eta, dite_eq_ite, ite_eq_right_iff]
99 omega
100 _ =
102 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen).periods
106 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen x).symm
108 {tailLen p : ℕ}
109 (m₁' m₂' : ℕ) (tail : Fin tailLen → ℕ)
110 (hp : 2 ≤ p) (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂')
111 (htail : ∀ j, 2 ≤ tail j) (hTailLen : 0 < tailLen) :
114 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen) →*
115 Multiplicative (ZMod p) := by
116 classical
117 let σ :=
118 firstReductionCanonicalSourceSignature m₁' m₂' tail hp hm₁' hm₂' htail hTailLen
119 let ξ :=
121 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen
124 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen)
126 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen)
128 {tailLen p : ℕ}
129 (m₁' m₂' : ℕ) (tail : Fin tailLen → ℕ)
130 (hp : 2 ≤ p) (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂')
131 (htail : ∀ j, 2 ≤ tail j) (hTailLen : 0 < tailLen) :
133 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen).ker ≃*
136 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen) := by
139 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen
141 (tailLen p : ℕ) :
142 FirstReductionIndex tailLen p ≃ Fin (2 + p * tailLen) :=
143 (Equiv.sumCongr (Equiv.refl (Fin 2))
144 ((Equiv.prodComm (Fin tailLen) (Fin p)).trans finProdFinEquiv)).trans
145 finSumFinEquiv
147 {tailLen p : ℕ}
148 (m₁' m₂' : ℕ) (tail : Fin tailLen → ℕ)
149 (hp : 2 ≤ p) (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂')
150 (htail : ∀ j, 2 ≤ tail j) (hTailLen : 0 < tailLen) :
151 Nonempty
154 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen)
155 ≃*
158 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen)) := by
159 classical
160 refine
163 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen)
165 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen)
166 ?_ ?_
168 (Fintype.equivFin (FirstReductionIndex tailLen p)) ?_
171 · intro x
172 cases x using Sum.casesOn <;> rename_i x
173 · fin_cases x
174 · calc
176 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen).periods
177 (firstReductionIndexEquivCanonicalTargetFin tailLen p (.inl (0 : Fin 2))) =
178 m₁' := by
182 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen
183 _ =
185 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen).periods
186 ((Fintype.equivFin (FirstReductionIndex tailLen p)) (.inl (0 : Fin 2))) := by
188 firstReductionPeriods, twoPeriods, Nat.reduceAdd, Fin.cases_zero]
189 · calc
191 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen).periods
192 (firstReductionIndexEquivCanonicalTargetFin tailLen p (.inl (1 : Fin 2))) =
193 m₂' := by
197 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen
198 _ =
200 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen).periods
201 ((Fintype.equivFin (FirstReductionIndex tailLen p)) (.inl (1 : Fin 2))) := by
204 · rcases x with ⟨j, k⟩
205 calc
207 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen).periods
209 tail j := by
212 Nat.add_assoc, Nat.add_comm, Nat.mul_comm] using
214 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen k j
215 _ =
217 m₁' m₂' tail hp hm₁' hm₂' htail hTailLen).periods
218 ((Fintype.equivFin (FirstReductionIndex tailLen p)) (.inr (j, k))) := by
221 {tailLen p q : ℕ}
222 (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ)
223 (hp : 2 ≤ p) (hq : 2 ≤ q)
224 (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂') (hm₃' : 0 < m₃')
225 (htail : ∀ j, 2 ≤ tail j) :
226 Nonempty
230 hp hm₁' hm₂'
232 (Nat.succ_pos _))
233 ≃*
235 (secondReductionSourceSignature (p := p) m₁' m₂' m₃' tail hq hm₁' hm₂'
236 hm₃' htail)) := by
238 m₁' m₂' (firstReductionTailIncludingThird (q := q) m₃' tail)
239 hp hm₁' hm₂' (firstReductionTailIncludingThird_ge_two_of_pos hq m₃' tail hm₃' htail)
240 (Nat.succ_pos _) with ⟨e₁⟩
242 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail with ⟨e₂⟩
243 exact ⟨e₁.trans e₂⟩
245 {tailLen p q : ℕ}
246 (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ)
247 (hp : 2 ≤ p) (hq : 2 ≤ q)
248 (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂') (hm₃' : 0 < m₃')
249 (htail : ∀ j, 2 ≤ tail j) :
252 hp hm₁' hm₂'
254 (Nat.succ_pos _)).ker ≃*
256 (secondReductionSourceSignature (p := p) m₁' m₂' m₃' tail hq hm₁' hm₂'
257 hm₃' htail) :=
259 m₁' m₂' (firstReductionTailIncludingThird (q := q) m₃' tail)
260 hp hm₁' hm₂'
262 (Nat.succ_pos _)).trans
263 (Classical.choice
265 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail))