-- `runTask` spawns one Lean `Task` per thread of every `parallel` block.
#check @runTask
-- The real-threads run leaves exactly the heap the canonical sequential run leaves. The `Task`
-- scheduler may interleave however it likes; `wfB` is what makes the outcome independent of it.
#check @runTask_eq
-- So a wall-clock comparison of the two is fair *by theorem* rather than by observation.
#check @runTask_eq_runTaskSeq
-- run the pipeline on real threads and read cell 4 back
#eval evalTask pipeline (fun _ => .int 0) [4]