Skip to content

Commit bc3fe05

Browse files
feat(parking): select sorted cyclic representatives
1 parent 62a4bcc commit bc3fe05

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

RealRooted/ParkingFunctions/Descents/DiaconisHicks.lean

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,27 @@ theorem isParkingWord_sortChains_iff {n : ℕ} (L : List (List (Fin n)))
275275
IsParkingWord (sortChains L w) ↔ IsParkingWord w :=
276276
isParkingWord_iff_of_multiset_eq (map_sortChains_univ L hL w)
277277

278+
/-- The Diaconis--Hicks value action followed by sorting along a chain family. -/
279+
def cyclicSortChains {n : ℕ} (L : List (List (Fin n))) (c : Fin (n + 1))
280+
(w : Fin n → Fin (n + 1)) : Fin n → Fin (n + 1) :=
281+
sortChains L (cyclicValueShift c w)
282+
283+
/-- Chain sorting does not affect whether a cyclic value shift is a parking word. -/
284+
theorem isParkingWord_cyclicSortChains_iff {n : ℕ} (L : List (List (Fin n)))
285+
(hL : ∀ l ∈ L, l.Nodup) (c : Fin (n + 1))
286+
(w : Fin n → Fin (n + 1)) :
287+
IsParkingWord (cyclicSortChains L c w) ↔ IsParkingWord (cyclicValueShift c w) := by
288+
exact isParkingWord_sortChains_iff L hL _
289+
290+
/-- Every cyclic-shift-and-sort orbit has a unique parking-word representative. -/
291+
theorem existsUnique_isParkingWord_cyclicSortChains {n : ℕ} (L : List (List (Fin n)))
292+
(hL : ∀ l ∈ L, l.Nodup) (w : Fin n → Fin (n + 1)) :
293+
∃! c : Fin (n + 1), IsParkingWord (cyclicSortChains L c w) := by
294+
obtain ⟨c, hc, hunique⟩ := existsUnique_isParkingWord_cyclicValueShift w
295+
refine ⟨c, (isParkingWord_cyclicSortChains_iff L hL c w).mpr hc, ?_⟩
296+
intro c' hc'
297+
exact hunique c' ((isParkingWord_cyclicSortChains_iff L hL c' w).mp hc')
298+
278299
@[simp]
279300
theorem cyclicValueShift_apply {n : ℕ} (c : Fin (n + 1))
280301
(w : Fin n → Fin (n + 1)) (i : Fin n) :
@@ -397,6 +418,15 @@ theorem existsUnique_cyclicValueShift_mem_embeddedParkingFunctions {n : ℕ}
397418
simpa only [mem_embeddedParkingFunctions_iff_isParkingWord] using
398419
(existsUnique_isParkingWord_cyclicValueShift w)
399420

421+
/-- Sorting along duplicate-free chains preserves the unique cyclic parking
422+
representative in the embedded finite family. -/
423+
theorem existsUnique_cyclicSortChains_mem_embeddedParkingFunctions {n : ℕ}
424+
(L : List (List (Fin (n + 1)))) (hL : ∀ l ∈ L, l.Nodup)
425+
(w : Fin (n + 1) → Fin (n + 2)) :
426+
∃! c : Fin (n + 2), cyclicSortChains L c w ∈ embeddedParkingFunctions n := by
427+
simpa only [mem_embeddedParkingFunctions_iff_isParkingWord] using
428+
(existsUnique_isParkingWord_cyclicSortChains L hL w)
429+
400430
/-- The parking descent polynomial is the descent-generating polynomial of its
401431
embedded finite word family. -/
402432
theorem parkingDescentPolynomial_succ_eq_descentGeneratingPolynomial_embedded

0 commit comments

Comments
 (0)