Library zoo_persistent.pqueue__code

Require Import zoo.prelude.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo_std.list.
Require Import zoo.options.

Notation "'pqueueู front'" := (
  in_type "zoo_persistent.pqueue.t" 0
)(in custom zoo_proj
).
Notation "'pqueueู back'" := (
  in_type "zoo_persistent.pqueue.t" 1
)(in custom zoo_proj
).

Definition pqueueู empty : val :=
  ([], []).

Definition pqueueู is_empty : val :=
  ๐—ณ๐˜‚๐—ป "t" โ†’
    listู is_empty "t".<pqueueู front>
    ๐—ฎ๐—ป๐—ฑ
    listู is_empty "t".<pqueueู back>.

Definition pqueueู push : val :=
  ๐—ณ๐˜‚๐—ป "t" "v" โ†’
    ("t".<pqueueู front>, "v" :: "t".<pqueueู back>).

Definition pqueueู pop : val :=
  ๐—ณ๐˜‚๐—ป "t" โ†’
    ๐—บ๐—ฎ๐˜๐—ฐ๐—ต "t".<pqueueู front> ๐˜„๐—ถ๐˜๐—ต
    | "v" :: "front" โ†’
        โ€˜Some( ("v", ("front", "t".<pqueueู back>)) )
    | [] โ†’
        ๐—บ๐—ฎ๐˜๐—ฐ๐—ต listู rev "t".<pqueueู back> ๐˜„๐—ถ๐˜๐—ต
        | [] โ†’
            ยงNone
        | "v" :: "front" โ†’
            โ€˜Some( ("v", ("front", [])) )
        ๐—ฒ๐—ป๐—ฑ
    ๐—ฒ๐—ป๐—ฑ.