Library zoo_std.xdeque__code
Require Import zoo.prelude.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo.options.
Notation "'xdequeู prev'" := (
in_type "zoo_std.xdeque.node" 0
)(in custom zoo_field
).
Notation "'xdequeู next'" := (
in_type "zoo_std.xdeque.node" 1
)(in custom zoo_field
).
Notation "'xdequeู data'" := (
in_type "zoo_std.xdeque.node" 2
)(in custom zoo_field
).
Definition xdequeู create : val :=
๐ณ๐๐ป โฝ โ
๐น๐ฒ๐ "t" = { (), (), () } ๐ถ๐ป
"t" <-{xdequeู prev} "t" โฎ
"t" <-{xdequeู next} "t" โฎ
"t".
Definition xdequeู is_empty : val :=
๐ณ๐๐ป "t" โ
"t".{xdequeู next} == "t".
Definition xdequeู link : val :=
๐ณ๐๐ป "node1" "node2" โ
"node1" <-{xdequeู next} "node2" โฎ
"node2" <-{xdequeู prev} "node1".
Definition xdequeู insert : val :=
๐ณ๐๐ป "prev" "node" "next" โ
xdequeู link "prev" "node" โฎ
xdequeู link "node" "next".
Definition xdequeู push_front : val :=
๐ณ๐๐ป "t" "front" โ
xdequeู insert "t" "front" "t".{xdequeู next}.
Definition xdequeู push_back : val :=
๐ณ๐๐ป "t" "back" โ
xdequeู insert "t".{xdequeู prev} "back" "t".
Definition xdequeู pop_front : val :=
๐ณ๐๐ป "t" โ
๐ถ๐ณ xdequeู is_empty "t" ๐๐ต๐ฒ๐ป (
ยงNone
) ๐ฒ๐น๐๐ฒ (
๐น๐ฒ๐ "old_front" = "t".{xdequeู next} ๐ถ๐ป
๐น๐ฒ๐ "front" = "old_front".{xdequeู next} ๐ถ๐ป
xdequeู link "t" "front" โฎ
โSome( "old_front" )
).
Definition xdequeู pop_back : val :=
๐ณ๐๐ป "t" โ
๐ถ๐ณ xdequeู is_empty "t" ๐๐ต๐ฒ๐ป (
ยงNone
) ๐ฒ๐น๐๐ฒ (
๐น๐ฒ๐ "old_back" = "t".{xdequeู prev} ๐ถ๐ป
๐น๐ฒ๐ "back" = "old_back".{xdequeู prev} ๐ถ๐ป
xdequeู link "back" "t" โฎ
โSome( "old_back" )
).
Definition xdequeู remove : val :=
๐ณ๐๐ป "node" โ
๐น๐ฒ๐ "prev" = "node".{xdequeู prev} ๐ถ๐ป
๐น๐ฒ๐ "next" = "node".{xdequeู next} ๐ถ๐ป
xdequeู link "prev" "next".
Definition xdequeู iter_aux : val :=
๐ฟ๐ฒ๐ฐ "iter_aux" "fn" "t" "node" โ
๐ถ๐ณ "node" == "t" ๐๐ต๐ฒ๐ป (
()
) ๐ฒ๐น๐๐ฒ (
"fn" "node" โฎ
"iter_aux" "fn" "t" "node".{xdequeู next}
).
Definition xdequeู iter : val :=
๐ณ๐๐ป "fn" "t" โ
xdequeู iter_aux "fn" "t" "t".{xdequeู next}.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo.options.
Notation "'xdequeู prev'" := (
in_type "zoo_std.xdeque.node" 0
)(in custom zoo_field
).
Notation "'xdequeู next'" := (
in_type "zoo_std.xdeque.node" 1
)(in custom zoo_field
).
Notation "'xdequeู data'" := (
in_type "zoo_std.xdeque.node" 2
)(in custom zoo_field
).
Definition xdequeู create : val :=
๐ณ๐๐ป โฝ โ
๐น๐ฒ๐ "t" = { (), (), () } ๐ถ๐ป
"t" <-{xdequeู prev} "t" โฎ
"t" <-{xdequeู next} "t" โฎ
"t".
Definition xdequeู is_empty : val :=
๐ณ๐๐ป "t" โ
"t".{xdequeู next} == "t".
Definition xdequeู link : val :=
๐ณ๐๐ป "node1" "node2" โ
"node1" <-{xdequeู next} "node2" โฎ
"node2" <-{xdequeู prev} "node1".
Definition xdequeู insert : val :=
๐ณ๐๐ป "prev" "node" "next" โ
xdequeู link "prev" "node" โฎ
xdequeู link "node" "next".
Definition xdequeู push_front : val :=
๐ณ๐๐ป "t" "front" โ
xdequeู insert "t" "front" "t".{xdequeู next}.
Definition xdequeู push_back : val :=
๐ณ๐๐ป "t" "back" โ
xdequeู insert "t".{xdequeู prev} "back" "t".
Definition xdequeู pop_front : val :=
๐ณ๐๐ป "t" โ
๐ถ๐ณ xdequeู is_empty "t" ๐๐ต๐ฒ๐ป (
ยงNone
) ๐ฒ๐น๐๐ฒ (
๐น๐ฒ๐ "old_front" = "t".{xdequeู next} ๐ถ๐ป
๐น๐ฒ๐ "front" = "old_front".{xdequeู next} ๐ถ๐ป
xdequeู link "t" "front" โฎ
โSome( "old_front" )
).
Definition xdequeู pop_back : val :=
๐ณ๐๐ป "t" โ
๐ถ๐ณ xdequeู is_empty "t" ๐๐ต๐ฒ๐ป (
ยงNone
) ๐ฒ๐น๐๐ฒ (
๐น๐ฒ๐ "old_back" = "t".{xdequeู prev} ๐ถ๐ป
๐น๐ฒ๐ "back" = "old_back".{xdequeู prev} ๐ถ๐ป
xdequeู link "back" "t" โฎ
โSome( "old_back" )
).
Definition xdequeู remove : val :=
๐ณ๐๐ป "node" โ
๐น๐ฒ๐ "prev" = "node".{xdequeู prev} ๐ถ๐ป
๐น๐ฒ๐ "next" = "node".{xdequeู next} ๐ถ๐ป
xdequeู link "prev" "next".
Definition xdequeู iter_aux : val :=
๐ฟ๐ฒ๐ฐ "iter_aux" "fn" "t" "node" โ
๐ถ๐ณ "node" == "t" ๐๐ต๐ฒ๐ป (
()
) ๐ฒ๐น๐๐ฒ (
"fn" "node" โฎ
"iter_aux" "fn" "t" "node".{xdequeู next}
).
Definition xdequeู iter : val :=
๐ณ๐๐ป "fn" "t" โ
xdequeู iter_aux "fn" "t" "t".{xdequeู next}.