Library zoo_std.queue_2__code
Require Import zoo.prelude.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo.options.
Notation "'queue_2٠Null'" := (
in_type "zoo_std.queue_2.node" 0
)(in custom zoo_tag
).
Notation "'queue_2٠Node'" := (
in_type "zoo_std.queue_2.node" 1
)(in custom zoo_tag
).
Notation "'queue_2٠next'" := (
in_type "zoo_std.queue_2.node.Node" 0
)(in custom zoo_field
).
Notation "'queue_2٠data'" := (
in_type "zoo_std.queue_2.node.Node" 1
)(in custom zoo_field
).
Notation "'queue_2٠front'" := (
in_type "zoo_std.queue_2.t" 0
)(in custom zoo_field
).
Notation "'queue_2٠back'" := (
in_type "zoo_std.queue_2.t" 1
)(in custom zoo_field
).
Definition queue_2٠create : val :=
𝗳𝘂𝗻 ⎽ →
𝗹𝗲𝘁 "front" = ‘queue_2٠Node{ §queue_2٠Null, () } 𝗶𝗻
{ "front", "front" }.
Definition queue_2٠is_empty : val :=
𝗳𝘂𝗻 "t" →
"t".{queue_2٠front} == "t".{queue_2٠back}.
Definition queue_2٠push : val :=
𝗳𝘂𝗻 "t" "v" →
𝗺𝗮𝘁𝗰𝗵
‘queue_2٠Node{ §queue_2٠Null, () }
𝘄𝗶𝘁𝗵
| queue_2٠Node ⎽ ⎽ 𝗮𝘀 "new_back" →
𝗺𝗮𝘁𝗰𝗵 "t".{queue_2٠back} 𝘄𝗶𝘁𝗵
| queue_2٠Node ⎽ ⎽ 𝗮𝘀 "back_r" →
"back_r" <-{queue_2٠next} "new_back" ⍮
"back_r" <-{queue_2٠data} "v" ⍮
"t" <-{queue_2٠back} "new_back"
𝗲𝗻𝗱
𝗲𝗻𝗱.
Definition queue_2٠pop : val :=
𝗳𝘂𝗻 "t" →
𝗺𝗮𝘁𝗰𝗵 "t".{queue_2٠front} 𝘄𝗶𝘁𝗵
| queue_2٠Node ⎽ ⎽ 𝗮𝘀 "front_r" →
𝗺𝗮𝘁𝗰𝗵 "front_r".{queue_2٠next} 𝘄𝗶𝘁𝗵
| queue_2٠Null →
§None
| queue_2٠Node ⎽ ⎽ 𝗮𝘀 "next" →
"t" <-{queue_2٠front} "next" ⍮
‘Some( "front_r".{queue_2٠data} )
𝗲𝗻𝗱
𝗲𝗻𝗱.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo.options.
Notation "'queue_2٠Null'" := (
in_type "zoo_std.queue_2.node" 0
)(in custom zoo_tag
).
Notation "'queue_2٠Node'" := (
in_type "zoo_std.queue_2.node" 1
)(in custom zoo_tag
).
Notation "'queue_2٠next'" := (
in_type "zoo_std.queue_2.node.Node" 0
)(in custom zoo_field
).
Notation "'queue_2٠data'" := (
in_type "zoo_std.queue_2.node.Node" 1
)(in custom zoo_field
).
Notation "'queue_2٠front'" := (
in_type "zoo_std.queue_2.t" 0
)(in custom zoo_field
).
Notation "'queue_2٠back'" := (
in_type "zoo_std.queue_2.t" 1
)(in custom zoo_field
).
Definition queue_2٠create : val :=
𝗳𝘂𝗻 ⎽ →
𝗹𝗲𝘁 "front" = ‘queue_2٠Node{ §queue_2٠Null, () } 𝗶𝗻
{ "front", "front" }.
Definition queue_2٠is_empty : val :=
𝗳𝘂𝗻 "t" →
"t".{queue_2٠front} == "t".{queue_2٠back}.
Definition queue_2٠push : val :=
𝗳𝘂𝗻 "t" "v" →
𝗺𝗮𝘁𝗰𝗵
‘queue_2٠Node{ §queue_2٠Null, () }
𝘄𝗶𝘁𝗵
| queue_2٠Node ⎽ ⎽ 𝗮𝘀 "new_back" →
𝗺𝗮𝘁𝗰𝗵 "t".{queue_2٠back} 𝘄𝗶𝘁𝗵
| queue_2٠Node ⎽ ⎽ 𝗮𝘀 "back_r" →
"back_r" <-{queue_2٠next} "new_back" ⍮
"back_r" <-{queue_2٠data} "v" ⍮
"t" <-{queue_2٠back} "new_back"
𝗲𝗻𝗱
𝗲𝗻𝗱.
Definition queue_2٠pop : val :=
𝗳𝘂𝗻 "t" →
𝗺𝗮𝘁𝗰𝗵 "t".{queue_2٠front} 𝘄𝗶𝘁𝗵
| queue_2٠Node ⎽ ⎽ 𝗮𝘀 "front_r" →
𝗺𝗮𝘁𝗰𝗵 "front_r".{queue_2٠next} 𝘄𝗶𝘁𝗵
| queue_2٠Null →
§None
| queue_2٠Node ⎽ ⎽ 𝗮𝘀 "next" →
"t" <-{queue_2٠front} "next" ⍮
‘Some( "front_r".{queue_2٠data} )
𝗲𝗻𝗱
𝗲𝗻𝗱.