% Parallel "bubblesort" % needs nat.clf list.clf dest : type. ld : dest -> list -> dest -> list -> type. #mode ld + + + -. mem : dest -> nat -> dest -> type. #mode mem - - -. coll : dest -> list -> dest -> type. #mode coll + - +. ld/cons : ld D0 (cons N Ns) D Ks o- (Pi d'. mem D N d' -o ld D0 Ns d' Ks). ld/nil : ld D0 nil Dn Ks o- {coll D0 Ks Dn}. % exchange neighbors if out of order swap : mem D1 M D2 * mem D2 N D3 * lt N M -o {mem D1 N D2 * mem D2 M D3}. coll/nil : coll Dn nil Dn. coll/cons : coll D (cons N Ks) Dn o- mem D N D' o- coll D' Ks Dn. sort : list -> list -> type. #mode sort + -. sort/top : sort Ns Ks o- (Pi d0. ld d0 Ns d0 Ks). #query * * * 4 sort (cons e (cons (d (d e b1) b1) (cons (d (d e b1) b0) (cons e nil)))) Ks.