FenchelNielsenZomorrodian/Discrete/CompactFuchsian/SecondReduction/Relators/SourceMiddleTail.lean

1import FenchelNielsenZomorrodian.Discrete.CompactFuchsian.SecondReduction.Relators.SourceCore
3/-
4PUBLIC_PAGE_SNAPSHOT
5generated_at: 2026-05-27T09:47:29+09:00
6lean_source: lean4/FenchelNielsenZomorrodian/Discrete/CompactFuchsian/SecondReduction/Relators/SourceMiddleTail.lean
7translation_root: data/translation
8purpose: identifies the local data snapshot used to build pages/
9placement: after imports, never before imports
10-/
11/-!
12# Second compact zero-genus reduction
14The second explicit reduction step, with ordered target signatures, transport maps, source and target relator calculations, and quotient-basis comparison.
15-/
17namespace FenchelNielsen
20 {tailLen p q : ℕ}
21 (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ)
22 (hp : 2 ≤ p) (hq : 2 ≤ q)
23 (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂') (hm₃' : 2 ≤ m₃')
24 (htail : ∀ j, 2 ≤ tail j) (b : Fin p) (j : Fin tailLen) (k : Fin q) :
25 letI : NeZero q := ⟨Nat.ne_of_gt (lt_of_lt_of_le (by decide : 0 < 2) hq)⟩
26 let σ :=
28 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
29 let φ :=
31 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
32 letI : DecidableEq (FuchsianGenerator σ) := Classical.decEq _
33 let e :=
35 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
36 let η :=
38 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
39 let x : FuchsianGenerator σ :=
41 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
42 let iTail :=
44 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail b j
45 η
46 (e.symm
47 (⟨(FreeGroup.of x) ^ k.val * ((xWord σ iTail) ^ σ.periods iTail) *
48 ((FreeGroup.of x) ^ k.val)⁻¹, by
49 change φ
50 ((FreeGroup.of x) ^ k.val * ((xWord σ iTail) ^ σ.periods iTail) *
51 ((FreeGroup.of x) ^ k.val)⁻¹) = 1
52 have hrφ :
53 φ ((xWord σ iTail) ^ σ.periods iTail) = 1 :=
55 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
56 ((xWord σ iTail) ^ σ.periods iTail) (Or.inl ⟨iTail, rfl⟩)
57 simp only [Lean.Elab.WF.paramLet, map_mul, map_pow, hrφ, mul_one, map_inv, mul_inv_cancel]⟩ : φ.ker)) ∈
58 Subgroup.normalClosure
60 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) := by
61 classical
62 dsimp
63 letI : NeZero q := ⟨Nat.ne_of_gt (lt_of_lt_of_le (by decide : 0 < 2) hq)⟩
64 let σ :=
66 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
67 let τ :=
69 m₁' m₂' m₃' tail hm₁' hm₂' hm₃' htail
70 let φ :=
72 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
73 letI : DecidableEq (FuchsianGenerator σ) := Classical.decEq _
74 let e :=
76 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
77 let η :=
79 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
80 let x : FuchsianGenerator σ :=
82 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
83 let iTail :=
85 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail b j
86 let zTail :=
88 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail b j k
89 let z : φ.ker :=
90 ⟨(FreeGroup.of x) ^ k.val * ((xWord σ iTail) ^ σ.periods iTail) *
91 ((FreeGroup.of x) ^ k.val)⁻¹, by
92 change φ
93 ((FreeGroup.of x) ^ k.val * ((xWord σ iTail) ^ σ.periods iTail) *
94 ((FreeGroup.of x) ^ k.val)⁻¹) = 1
95 have hrφ : φ ((xWord σ iTail) ^ σ.periods iTail) = 1 :=
97 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
98 ((xWord σ iTail) ^ σ.periods iTail) (Or.inl ⟨iTail, rfl⟩)
99 simp only [Lean.Elab.WF.paramLet, map_mul, map_pow, hrφ, mul_one, map_inv, mul_inv_cancel]⟩
100 have hz : z = zTail ^ tail j := by
101 apply Subtype.ext
102 change
103 (FreeGroup.of x : FreeGroup (FuchsianGenerator σ)) ^ k.val *
104 ((xWord σ iTail) ^ σ.periods iTail) *
105 ((FreeGroup.of x : FreeGroup (FuchsianGenerator σ)) ^ k.val)⁻¹ =
106 ((zTail ^ tail j : φ.ker) : FreeGroup (FuchsianGenerator σ))
107 rw [show ((zTail ^ tail j : φ.ker) : FreeGroup (FuchsianGenerator σ)) =
108 ((zTail : φ.ker) : FreeGroup (FuchsianGenerator σ)) ^ tail j by
109 exact (map_pow (φ.ker.subtype) zTail (tail j))]
110 have hperiod : σ.periods iTail = tail j := by
114 secondReductionCanonicalZeroImageKernelElement, id_eq, conj_pow, σ, x, iTail, zTail]
115 have hmain : (η (e.symm zTail)) ^ tail j ∈ Subgroup.normalClosure
117 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) := by
118 have hword :=
120 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail b j k
121 have hrel :
123 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail
125 tail j ∈ Subgroup.normalClosure
127 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) := by
128 have hmem :
130 ((Fintype.equivFin (SecondReductionTransportIndex tailLen p q))
132 τ.periods
133 ((Fintype.equivFin (SecondReductionTransportIndex tailLen p q))
136 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail :=
138 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail _
143 Subgroup.subset_normalClosure hmem
144 simpa [σ, e, η, zTail, hword] using hrel
145 change η (e.symm z) ∈ Subgroup.normalClosure
147 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail)
148 rw [hz, map_pow]
149 simpa [zTail] using hmain
151 {tailLen p q : ℕ}
152 (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ)
153 (hp : 2 ≤ p) (hq : 2 ≤ q)
154 (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂') (hm₃' : 2 ≤ m₃')
155 (htail : ∀ j, 2 ≤ tail j) (r : Fin (p - 2)) (k : Fin q) :
156 letI : NeZero q := ⟨Nat.ne_of_gt (lt_of_lt_of_le (by decide : 0 < 2) hq)⟩
157 let σ :=
159 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
160 let φ :=
162 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
163 letI : DecidableEq (FuchsianGenerator σ) := Classical.decEq _
164 let e :=
166 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
167 let η :=
169 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
170 let x : FuchsianGenerator σ :=
172 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
173 let rSource : Fin p := ⟨2 + r.val, by omega⟩
174 let iMiddle :=
176 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail rSource
177 η
178 (e.symm
179 (⟨(FreeGroup.of x) ^ k.val * ((xWord σ iMiddle) ^ σ.periods iMiddle) *
180 ((FreeGroup.of x) ^ k.val)⁻¹, by
181 change φ
182 ((FreeGroup.of x) ^ k.val * ((xWord σ iMiddle) ^ σ.periods iMiddle) *
183 ((FreeGroup.of x) ^ k.val)⁻¹) = 1
184 have hrφ :
185 φ ((xWord σ iMiddle) ^ σ.periods iMiddle) = 1 :=
187 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
188 ((xWord σ iMiddle) ^ σ.periods iMiddle) (Or.inl ⟨iMiddle, rfl⟩)
189 simp only [Lean.Elab.WF.paramLet, map_mul, map_pow, hrφ, mul_one, map_inv, mul_inv_cancel]⟩ : φ.ker)) ∈
190 Subgroup.normalClosure
192 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) := by
193 classical
194 dsimp
195 letI : NeZero q := ⟨Nat.ne_of_gt (lt_of_lt_of_le (by decide : 0 < 2) hq)⟩
196 let σ :=
198 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
199 let τ :=
201 m₁' m₂' m₃' tail hm₁' hm₂' hm₃' htail
202 let φ :=
204 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
205 letI : DecidableEq (FuchsianGenerator σ) := Classical.decEq _
206 let e :=
208 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
209 let η :=
211 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
212 let x : FuchsianGenerator σ :=
214 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
215 let rSource : Fin p := ⟨2 + r.val, by omega⟩
216 let iMiddle :=
218 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail rSource
219 let zMiddle :=
221 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail r k
222 let z : φ.ker :=
223 ⟨(FreeGroup.of x) ^ k.val * ((xWord σ iMiddle) ^ σ.periods iMiddle) *
224 ((FreeGroup.of x) ^ k.val)⁻¹, by
225 change φ
226 ((FreeGroup.of x) ^ k.val * ((xWord σ iMiddle) ^ σ.periods iMiddle) *
227 ((FreeGroup.of x) ^ k.val)⁻¹) = 1
228 have hrφ : φ ((xWord σ iMiddle) ^ σ.periods iMiddle) = 1 :=
230 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
231 ((xWord σ iMiddle) ^ σ.periods iMiddle) (Or.inl ⟨iMiddle, rfl⟩)
232 simp only [Lean.Elab.WF.paramLet, map_mul, map_pow, hrφ, mul_one, map_inv, mul_inv_cancel]⟩
233 have hz : z = zMiddle ^ (q * m₃') := by
234 apply Subtype.ext
235 change
236 (FreeGroup.of x : FreeGroup (FuchsianGenerator σ)) ^ k.val *
237 ((xWord σ iMiddle) ^ σ.periods iMiddle) *
238 ((FreeGroup.of x : FreeGroup (FuchsianGenerator σ)) ^ k.val)⁻¹ =
239 ((zMiddle ^ (q * m₃') : φ.ker) : FreeGroup (FuchsianGenerator σ))
240 rw [show ((zMiddle ^ (q * m₃') : φ.ker) : FreeGroup (FuchsianGenerator σ)) =
241 ((zMiddle : φ.ker) : FreeGroup (FuchsianGenerator σ)) ^ (q * m₃') by
242 exact (map_pow (φ.ker.subtype) zMiddle (q * m₃'))]
243 have hperiod : σ.periods iMiddle = q * m₃' := by
247 secondReductionCanonicalZeroImageKernelElement, id_eq, conj_pow, σ, x, iMiddle, rSource, zMiddle]
248 have hmain : (η (e.symm zMiddle)) ^ (q * m₃') ∈
249 Subgroup.normalClosure
251 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) := by
252 have hword :=
254 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail r k
255 have hrel :
257 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail
259 (q * m₃') ∈ Subgroup.normalClosure
261 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) := by
262 have hmem :
264 ((Fintype.equivFin (SecondReductionTransportIndex tailLen p q))
266 τ.periods
267 ((Fintype.equivFin (SecondReductionTransportIndex tailLen p q))
270 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail :=
272 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail _
277 Subgroup.subset_normalClosure hmem
278 simpa [σ, e, η, zMiddle, hword] using hrel
279 change η (e.symm z) ∈ Subgroup.normalClosure
281 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail)
282 rw [hz, map_pow]
283 simpa [zMiddle] using hmain
285 {tailLen p q : ℕ}
286 (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ)
287 (hp : 2 ≤ p) (hq : 2 ≤ q)
288 (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂') (hm₃' : 2 ≤ m₃')
289 (htail : ∀ j, 2 ≤ tail j) (k : Fin q) :
290 letI : NeZero q := ⟨Nat.ne_of_gt (lt_of_lt_of_le (by decide : 0 < 2) hq)⟩
291 let σ :=
293 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
294 let φ :=
296 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
297 letI : DecidableEq (FuchsianGenerator σ) := Classical.decEq _
298 let e :=
300 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
301 let η :=
303 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
304 let x : FuchsianGenerator σ :=
306 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
307 let iMiddle :=
309 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail ⟨0, by omega⟩
310 η
311 (e.symm
312 (⟨(FreeGroup.of x) ^ k.val * ((xWord σ iMiddle) ^ σ.periods iMiddle) *
313 ((FreeGroup.of x) ^ k.val)⁻¹, by
314 change φ
315 ((FreeGroup.of x) ^ k.val * ((xWord σ iMiddle) ^ σ.periods iMiddle) *
316 ((FreeGroup.of x) ^ k.val)⁻¹) = 1
317 have hrφ :
318 φ ((xWord σ iMiddle) ^ σ.periods iMiddle) = 1 :=
320 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
321 ((xWord σ iMiddle) ^ σ.periods iMiddle) (Or.inl ⟨iMiddle, rfl⟩)
322 simp only [Lean.Elab.WF.paramLet, map_mul, map_pow, hrφ, mul_one, map_inv, mul_inv_cancel]⟩ : φ.ker)) ∈
323 Subgroup.normalClosure
325 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) := by
326 classical
327 dsimp
328 letI : NeZero q := ⟨Nat.ne_of_gt (lt_of_lt_of_le (by decide : 0 < 2) hq)⟩
329 let σ :=
331 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
332 let τ :=
334 m₁' m₂' m₃' tail hm₁' hm₂' hm₃' htail
335 let φ :=
337 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
338 letI : DecidableEq (FuchsianGenerator σ) := Classical.decEq _
339 let e :=
341 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
342 let η :=
344 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
345 let x : FuchsianGenerator σ :=
347 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
348 let iMiddle :=
350 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail ⟨0, by omega⟩
351 let zFirst :=
353 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
354 let z : φ.ker :=
355 ⟨(FreeGroup.of x) ^ k.val * ((xWord σ iMiddle) ^ σ.periods iMiddle) *
356 ((FreeGroup.of x) ^ k.val)⁻¹, by
357 change φ
358 ((FreeGroup.of x) ^ k.val * ((xWord σ iMiddle) ^ σ.periods iMiddle) *
359 ((FreeGroup.of x) ^ k.val)⁻¹) = 1
360 have hrφ : φ ((xWord σ iMiddle) ^ σ.periods iMiddle) = 1 :=
362 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
363 ((xWord σ iMiddle) ^ σ.periods iMiddle) (Or.inl ⟨iMiddle, rfl⟩)
364 simp only [Lean.Elab.WF.paramLet, map_mul, map_pow, hrφ, mul_one, map_inv, mul_inv_cancel]⟩
365 have hz : z = zFirst ^ m₃' := by
366 apply Subtype.ext
367 change
368 (FreeGroup.of x : FreeGroup (FuchsianGenerator σ)) ^ k.val *
369 ((xWord σ iMiddle) ^ σ.periods iMiddle) *
370 ((FreeGroup.of x : FreeGroup (FuchsianGenerator σ)) ^ k.val)⁻¹ =
371 ((zFirst ^ m₃' : φ.ker) : FreeGroup (FuchsianGenerator σ))
372 rw [show ((zFirst ^ m₃' : φ.ker) : FreeGroup (FuchsianGenerator σ)) =
373 ((zFirst : φ.ker) : FreeGroup (FuchsianGenerator σ)) ^ m₃' by
374 exact (map_pow (φ.ker.subtype) zFirst m₃')]
375 have hperiod : σ.periods iMiddle = q * m₃' := by
378 rw [hperiod]
380 add_zero, xWord, pow_mul, σ, x, iMiddle]
381 group
382 have hmain : (η (e.symm zFirst)) ^ m₃' ∈ Subgroup.normalClosure
384 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) := by
385 have hword :=
387 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
388 have hrel :
390 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail
391 (secondReductionCanonicalTransportDistinguishedIndex tailLen p q ⟨0, by decide⟩)) ^
392 m₃' ∈ Subgroup.normalClosure
394 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) := by
395 have hmem :
397 ((Fintype.equivFin (SecondReductionTransportIndex tailLen p q))
398 (secondReductionCanonicalTransportDistinguishedIndex tailLen p q ⟨0, by decide⟩))) ^
399 τ.periods
400 ((Fintype.equivFin (SecondReductionTransportIndex tailLen p q))
401 (secondReductionCanonicalTransportDistinguishedIndex tailLen p q ⟨0, by decide⟩)) ∈
403 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail :=
405 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail _
410 Subgroup.subset_normalClosure hmem
411 simpa [σ, e, η, zFirst, hword] using hrel
412 change η (e.symm z) ∈ Subgroup.normalClosure
414 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail)
415 rw [hz, map_pow]
416 simpa [zFirst] using hmain
418 {tailLen p q : ℕ}
419 (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ)
420 (hp : 2 ≤ p) (hq : 2 ≤ q)
421 (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂') (hm₃' : 2 ≤ m₃')
422 (htail : ∀ j, 2 ≤ tail j) : Prop :=
423 letI : NeZero q := ⟨Nat.ne_of_gt (lt_of_lt_of_le (by decide : 0 < 2) hq)⟩
424 let σ :=
426 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
427 let τ :=
429 m₁' m₂' m₃' tail hm₁' hm₂' hm₃' htail
430 let φ :=
432 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
433 letI : DecidableEq (FuchsianGenerator σ) := Classical.decEq _
434 let e :=
436 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
437 let η :=
439 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
440 let x : FuchsianGenerator σ :=
442 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
443 let iMiddle :=
445 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail ⟨1, by omega⟩
446 ∀ k : Fin q,
447 η
448 (e.symm
449 (⟨(FreeGroup.of x) ^ k.val * ((xWord σ iMiddle) ^ σ.periods iMiddle) *
450 ((FreeGroup.of x) ^ k.val)⁻¹, by
451 change φ
452 ((FreeGroup.of x) ^ k.val * ((xWord σ iMiddle) ^ σ.periods iMiddle) *
453 ((FreeGroup.of x) ^ k.val)⁻¹) = 1
454 have hrφ :
455 φ ((xWord σ iMiddle) ^ σ.periods iMiddle) = 1 :=
457 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
458 ((xWord σ iMiddle) ^ σ.periods iMiddle) (Or.inl ⟨iMiddle, rfl⟩)
459 simp only [Lean.Elab.WF.paramLet, map_mul, map_pow, hrφ, mul_one, map_inv, mul_inv_cancel]⟩ : φ.ker)) ∈
460 Subgroup.normalClosure
462 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail)
464 {tailLen p q : ℕ}
465 (m₁' m₂' m₃' : ℕ) (tail : Fin tailLen → ℕ)
466 (hp : 2 ≤ p) (hq : 2 ≤ q)
467 (hm₁' : 2 ≤ m₁') (hm₂' : 2 ≤ m₂') (hm₃' : 2 ≤ m₃')
468 (htail : ∀ j, 2 ≤ tail j) :
470 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail := by
471 classical
473 intro k
474 letI : NeZero q := ⟨Nat.ne_of_gt (lt_of_lt_of_le (by decide : 0 < 2) hq)⟩
475 let σ :=
477 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
478 let τ :=
480 m₁' m₂' m₃' tail hm₁' hm₂' hm₃' htail
481 let φ :=
483 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
484 letI : DecidableEq (FuchsianGenerator σ) := Classical.decEq _
485 let e :=
487 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
488 let θ :=
490 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
491 let η :=
493 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
494 let x : FuchsianGenerator σ :=
496 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
497 let iMiddle :=
499 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail ⟨1, by omega⟩
500 let y : FuchsianGenerator σ := FuchsianGenerator.elliptic iMiddle
501 let edge : Fin q → φ.ker :=
503 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
504 let lower :=
505 (List.ofFn (fun i : Fin k.val => edge ⟨k.val - i.val, by omega⟩)).prod
506 let wrap := edge ⟨0, lt_of_lt_of_le (by decide : 0 < 2) hq⟩
507 let upper :=
508 (List.ofFn (fun i : Fin (q - 1 - k.val) => edge ⟨q - 1 - i.val, by omega⟩)).prod
509 let cycle := lower * wrap * upper
510 let base :=
512 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
513 let z : φ.ker :=
514 ⟨(FreeGroup.of x) ^ k.val * ((xWord σ iMiddle) ^ σ.periods iMiddle) *
515 ((FreeGroup.of x) ^ k.val)⁻¹, by
516 change φ
517 ((FreeGroup.of x) ^ k.val * ((xWord σ iMiddle) ^ σ.periods iMiddle) *
518 ((FreeGroup.of x) ^ k.val)⁻¹) = 1
519 have hrφ : φ ((xWord σ iMiddle) ^ σ.periods iMiddle) = 1 :=
521 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
522 ((xWord σ iMiddle) ^ σ.periods iMiddle) (Or.inl ⟨iMiddle, rfl⟩)
523 simp only [Lean.Elab.WF.paramLet, map_mul, map_pow, hrφ, mul_one, map_inv, mul_inv_cancel]⟩
524 have hcycleSource :
525 cycle =
526 (⟨(FreeGroup.of x) ^ k.val * (FreeGroup.of y) ^ q *
527 ((FreeGroup.of x) ^ k.val)⁻¹, by
528 rw [MonoidHom.mem_ker]
529 have hx : φ (FreeGroup.of x) = Multiplicative.ofAdd (1 : ZMod q) := by
530 simp only [Lean.Elab.WF.paramLet, secondReductionCanonicalDistinguishedGenerator,
531 secondReductionCanonicalSourceFreeQuotientHom_firstDistinguished m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail, φ, x]
532 have hy : φ (FreeGroup.of y) = Multiplicative.ofAdd (-1 : ZMod q) := by
533 simp only [Lean.Elab.WF.paramLet, secondReductionCanonicalSourceFreeQuotientHom, id_eq,
535 secondReductionCanonicalSourceQuotientImage, Nat.succ_ne_self, ↓reduceIte, ofAdd_neg, φ, y, iMiddle]
536 rw [map_mul, map_inv, map_mul, map_pow, map_pow, hx, hy]
537 apply (Multiplicative.toAdd : Multiplicative (ZMod q) ≃ ZMod q).injective
538 simp only [ofAdd_neg, inv_pow, mul_inv_cancel_comm, toAdd_inv, toAdd_pow, toAdd_ofAdd, nsmul_eq_mul,
539 CharP.cast_eq_zero, mul_one, neg_zero, toAdd_one]⟩ : φ.ker) := by
540 simpa [σ, φ, x, y, iMiddle, edge, lower, wrap, upper, cycle] using
542 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail k
543 have hz : z = cycle ^ m₃' := by
544 apply Subtype.ext
545 change
546 (FreeGroup.of x : FreeGroup (FuchsianGenerator σ)) ^ k.val *
547 ((xWord σ iMiddle) ^ σ.periods iMiddle) *
548 ((FreeGroup.of x : FreeGroup (FuchsianGenerator σ)) ^ k.val)⁻¹ =
549 ((cycle ^ m₃' : φ.ker) : FreeGroup (FuchsianGenerator σ))
550 rw [show ((cycle ^ m₃' : φ.ker) : FreeGroup (FuchsianGenerator σ)) =
551 ((cycle : φ.ker) : FreeGroup (FuchsianGenerator σ)) ^ m₃' by
552 exact (map_pow (φ.ker.subtype) cycle m₃')]
553 have hcycleCoe :=
554 congrArg (fun u : φ.ker => (u : FreeGroup (FuchsianGenerator σ))) hcycleSource
555 have hcycleCoe' :
556 ((cycle : φ.ker) : FreeGroup (FuchsianGenerator σ)) =
557 (FreeGroup.of x : FreeGroup (FuchsianGenerator σ)) ^ k.val *
558 (FreeGroup.of y) ^ q *
559 ((FreeGroup.of x : FreeGroup (FuchsianGenerator σ)) ^ k.val)⁻¹ := by
560 simpa using hcycleCoe
561 rw [hcycleCoe']
562 have hperiod : σ.periods iMiddle = q * m₃' := by
564 rw [hperiod]
566 add_zero, xWord, Nat.reduceAdd, pow_mul, conj_pow, σ, x, iMiddle, y]
567 have hbasePower : (η (e.symm base)) ^ m₃' ∈ Subgroup.normalClosure
569 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) := by
570 let idxB := secondReductionCanonicalTransportDistinguishedIndex tailLen p q ⟨1, by decide⟩
571 let B :=
572 xWord τ ((Fintype.equivFin (SecondReductionTransportIndex tailLen p q)) idxB)
573 have hTheta : θ B = e.symm base := by
574 simpa [σ, τ, e, θ, idxB, B, base] using
576 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
577 have hmod :
578 η (e.symm base) * B⁻¹ ∈ Subgroup.normalClosure
580 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) := by
581 have htoInv :=
583 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
584 change η (θ B) * B⁻¹ ∈ Subgroup.normalClosure
586 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) at htoInv
587 rw [hTheta] at htoInv
588 simpa using htoInv
589 have hBrel : B ^ m₃' ∈ Subgroup.normalClosure
591 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) := by
592 have hmem :
594 ((Fintype.equivFin (SecondReductionTransportIndex tailLen p q)) idxB)) ^
595 τ.periods
596 ((Fintype.equivFin (SecondReductionTransportIndex tailLen p q)) idxB) ∈
598 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail :=
600 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail _
604 secondReductionSourceCycleCount] using Subgroup.subset_normalClosure hmem
605 exact
606 ReidemeisterSchreier.Discrete.Presentations.pow_mem_normalClosure_of_mul_inv_mem
608 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail)
609 (u := η (e.symm base)) (v := B) hmod hBrel
610 have htailSplit :
611 (List.ofFn (fun i : Fin (q - 1) => edge ⟨q - 1 - i.val, by omega⟩)).prod =
612 upper * lower := by
613 have hlist := secondReduction_list_ofFn_desc_split (p := q) (k := k.val) k.isLt edge
614 simpa [upper, lower] using congrArg List.prod hlist
615 have hbaseEq : base = (wrap * upper) * lower := by
616 have hdesc :
617 wrap *
618 (List.ofFn (fun i : Fin (q - 1) =>
619 edge ⟨q - 1 - i.val, by omega⟩)).prod =
620 base := by
621 simpa [σ, φ, edge, wrap, base] using
623 m₁' m₂' m₃' tail hp hq hm₁' hm₂' hm₃' htail
624 rw [htailSplit] at hdesc
625 calc
626 base = wrap * (upper * lower) := hdesc.symm
627 _ = (wrap * upper) * lower := by group
628 let a := η (e.symm (wrap * upper))
629 let b := η (e.symm lower)
630 have hbaseAB : (a * b) ^ m₃' ∈ Subgroup.normalClosure
632 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) := by
633 rw [hbaseEq] at hbasePower
634 simpa [a, b, map_mul, mul_assoc] using hbasePower
635 have hrot :
636 (b * a) ^ m₃' ∈ Subgroup.normalClosure
638 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) :=
639 ReidemeisterSchreier.Discrete.Presentations.cyclic_rotation_pow_mem_normalClosure
641 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail)
642 (a := a) (b := b) hbaseAB
643 have hcycleTarget :
644 (η (e.symm cycle)) ^ m₃' ∈ Subgroup.normalClosure
646 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail) := by
647 have hcycleImage : η (e.symm cycle) = b * a := by
648 simp only [Lean.Elab.WF.paramLet, mul_assoc, map_mul, cycle, b, a]
649 simpa [hcycleImage] using hrot
650 change η (e.symm z) ∈ Subgroup.normalClosure
652 m₁' m₂' m₃' tail hq hm₁' hm₂' hm₃' htail)
653 rw [hz, map_pow]
654 simpa [cycle] using hcycleTarget
656end FenchelNielsen