Library zoo_persistent.suf__code
From zoo Require Import
prelude.
From zoo.language Require Import
typeclasses
notations.
From zoo_persistent Require Import
sstore_2.
From zoo_persistent Require Import
suf__types.
From zoo Require Import
options.
Definition suf٠create : val :=
sstore_2٠create.
Definition suf٠make : val :=
fun: "t" ⇒
sstore_2٠ref "t" ‘Root( 0 ).
Definition suf٠repr : val :=
rec: "repr" "t" "elt" ⇒
match: sstore_2٠get "t" "elt" with
| Root ≠ ⇒
"elt"
| Link "parent" ⇒
let: "repr" := "repr" "t" "parent" in
sstore_2٠set "t" "elt" ‘Link( "repr" ) ;;
"repr"
end.
Definition suf٠equiv : val :=
fun: "t" "elt1" "elt2" ⇒
suf٠repr "t" "elt1" == suf٠repr "t" "elt2".
Definition suf٠rank : val :=
fun: "t" "elt" ⇒
match: sstore_2٠get "t" "elt" with
| Root "rank" ⇒
"rank"
| Link ≠ ⇒
Fail
end.
Definition suf٠union : val :=
fun: "t" "elt1" "elt2" ⇒
let: "repr1" := suf٠repr "t" "elt1" in
let: "rank1" := suf٠rank "t" "repr1" in
let: "repr2" := suf٠repr "t" "elt2" in
let: "rank2" := suf٠rank "t" "repr2" in
if: "repr1" != "repr2" then (
if: "rank1" < "rank2" then (
sstore_2٠set "t" "repr1" ‘Link( "repr2" )
) else (
sstore_2٠set "t" "repr2" ‘Link( "repr1" ) ;;
if: "rank1" == "rank2" then (
sstore_2٠set "t" "repr1" ‘Root( "rank1" + 1 )
)
)
).
Definition suf٠capture : val :=
sstore_2٠capture.
Definition suf٠restore : val :=
sstore_2٠restore.
prelude.
From zoo.language Require Import
typeclasses
notations.
From zoo_persistent Require Import
sstore_2.
From zoo_persistent Require Import
suf__types.
From zoo Require Import
options.
Definition suf٠create : val :=
sstore_2٠create.
Definition suf٠make : val :=
fun: "t" ⇒
sstore_2٠ref "t" ‘Root( 0 ).
Definition suf٠repr : val :=
rec: "repr" "t" "elt" ⇒
match: sstore_2٠get "t" "elt" with
| Root ≠ ⇒
"elt"
| Link "parent" ⇒
let: "repr" := "repr" "t" "parent" in
sstore_2٠set "t" "elt" ‘Link( "repr" ) ;;
"repr"
end.
Definition suf٠equiv : val :=
fun: "t" "elt1" "elt2" ⇒
suf٠repr "t" "elt1" == suf٠repr "t" "elt2".
Definition suf٠rank : val :=
fun: "t" "elt" ⇒
match: sstore_2٠get "t" "elt" with
| Root "rank" ⇒
"rank"
| Link ≠ ⇒
Fail
end.
Definition suf٠union : val :=
fun: "t" "elt1" "elt2" ⇒
let: "repr1" := suf٠repr "t" "elt1" in
let: "rank1" := suf٠rank "t" "repr1" in
let: "repr2" := suf٠repr "t" "elt2" in
let: "rank2" := suf٠rank "t" "repr2" in
if: "repr1" != "repr2" then (
if: "rank1" < "rank2" then (
sstore_2٠set "t" "repr1" ‘Link( "repr2" )
) else (
sstore_2٠set "t" "repr2" ‘Link( "repr1" ) ;;
if: "rank1" == "rank2" then (
sstore_2٠set "t" "repr1" ‘Root( "rank1" + 1 )
)
)
).
Definition suf٠capture : val :=
sstore_2٠capture.
Definition suf٠restore : val :=
sstore_2٠restore.