theorem
Hex.Perm.Cycle.scan_canonical
{n : Nat}
(p : Perm n)
(xs : List (Fin n))
(seen : Vector Bool n)
(cs : Array (Array (Fin n)))
(h : Decomposition p seen cs)
(outside : ∀ (x : Fin n), ¬x ∈ xs → seen[↑x] = true)
(sorted : List.Pairwise (fun (x1 x2 : Fin n) => x1 < x2) xs)
(least : ∀ (c : Array (Fin n)), c ∈ cs → Least c)
(ordered : List.Pairwise Precedes cs.toList)
(before : ∀ (c : Array (Fin n)), c ∈ cs → ∀ (x : Fin n), x ∈ xs → ∀ (hc : 0 < c.size), c[0] < x)
:
have result := (p.scanCycles xs seen cs).snd;
(∀ (c : Array (Fin n)), c ∈ result → Least c) ∧ List.Pairwise Precedes result.toList