Library zoo_std.list__code
Require Import zoo.prelude.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo.options.
Definition listู singleton : val :=
๐ณ๐๐ป "v" โ
"v" :: [].
Definition listู head : val :=
๐ณ๐๐ป "param" โ
๐บ๐ฎ๐๐ฐ๐ต "param" ๐๐ถ๐๐ต
| [] โ
๐ณ๐ฎ๐ถ๐น
| "v" :: โฝ โ
"v"
๐ฒ๐ป๐ฑ.
Definition listู tail : val :=
๐ณ๐๐ป "param" โ
๐บ๐ฎ๐๐ฐ๐ต "param" ๐๐ถ๐๐ต
| [] โ
๐ณ๐ฎ๐ถ๐น
| โฝ :: "t" โ
"t"
๐ฒ๐ป๐ฑ.
Definition listู is_empty : val :=
๐ณ๐๐ป "param" โ
๐บ๐ฎ๐๐ฐ๐ต "param" ๐๐ถ๐๐ต
| [] โ
true
| โฝ :: โฝ โ
false
๐ฒ๐ป๐ฑ.
Definition listู get : val :=
๐ฟ๐ฒ๐ฐ "get" "t" "i" โ
๐ถ๐ณ "i" โค 0 ๐๐ต๐ฒ๐ป (
listู head "t"
) ๐ฒ๐น๐๐ฒ (
"get" (listู tail "t") ("i" - 1)
).
Definition listู initiโ : val :=
๐ฟ๐ฒ๐ฐ "initi" "sz" "fn" "i" โ
๐ถ๐ณ "sz" โค "i" ๐๐ต๐ฒ๐ป (
[]
) ๐ฒ๐น๐๐ฒ (
๐น๐ฒ๐ "v" = "fn" "i" ๐ถ๐ป
"v" :: "initi" "sz" "fn" ("i" + 1)
).
Definition listู initi : val :=
๐ณ๐๐ป "sz" "fn" โ
listู initiโ "sz" "fn" 0.
Definition listู init : val :=
๐ณ๐๐ป "sz" "fn" โ
listู initi "sz" (๐ณ๐๐ป "_i" โ "fn" ()).
Definition listู foldliโ : val :=
๐ฟ๐ฒ๐ฐ "foldli" "fn" "i" "acc" "t" โ
๐บ๐ฎ๐๐ฐ๐ต "t" ๐๐ถ๐๐ต
| [] โ
"acc"
| "v" :: "t" โ
"foldli" "fn" ("i" + 1) ("fn" "i" "acc" "v") "t"
๐ฒ๐ป๐ฑ.
Definition listู foldli : val :=
๐ณ๐๐ป "fn" โ
listู foldliโ "fn" 0.
Definition listู foldl : val :=
๐ณ๐๐ป "fn" โ
listู foldli (๐ณ๐๐ป "_i" โ "fn").
Definition listู foldriโ : val :=
๐ฟ๐ฒ๐ฐ "foldri" "fn" "i" "t" "acc" โ
๐บ๐ฎ๐๐ฐ๐ต "t" ๐๐ถ๐๐ต
| [] โ
"acc"
| "v" :: "t" โ
"fn" "i" "v" ("foldri" "fn" ("i" + 1) "t" "acc")
๐ฒ๐ป๐ฑ.
Definition listู foldri : val :=
๐ณ๐๐ป "fn" โ
listู foldriโ "fn" 0.
Definition listู foldr : val :=
๐ณ๐๐ป "fn" โ
listู foldri (๐ณ๐๐ป "_i" โ "fn").
Definition listู size : val :=
๐ณ๐๐ป "t" โ
listู foldl (๐ณ๐๐ป "acc" โฝ โ "acc" + 1) 0 "t".
Definition listู rev_app : val :=
๐ณ๐๐ป "t1" "t2" โ
listู foldl (๐ณ๐๐ป "acc" "v" โ "v" :: "acc") "t2" "t1".
Definition listู rev : val :=
๐ณ๐๐ป "t" โ
listู rev_app "t" [].
Definition listู app : val :=
๐ณ๐๐ป "t1" "t2" โ
listู foldr (๐ณ๐๐ป "v" "acc" โ "v" :: "acc") "t1" "t2".
Definition listู snoc : val :=
๐ณ๐๐ป "t" "v" โ
listู app "t" (listู singleton "v").
Definition listู iteri : val :=
๐ณ๐๐ป "fn" โ
listู foldli (๐ณ๐๐ป "i" โฝ โ "fn" "i") ().
Definition listู iter : val :=
๐ณ๐๐ป "fn" โ
listู iteri (๐ณ๐๐ป "_i" โ "fn").
Definition listู mapiโ : val :=
๐ฟ๐ฒ๐ฐ "mapi" "fn" "i" "t" โ
๐บ๐ฎ๐๐ฐ๐ต "t" ๐๐ถ๐๐ต
| [] โ
[]
| "v" :: "t" โ
๐น๐ฒ๐ "v" = "fn" "i" "v" ๐ถ๐ป
"v" :: "mapi" "fn" ("i" + 1) "t"
๐ฒ๐ป๐ฑ.
Definition listู mapi : val :=
๐ณ๐๐ป "fn" โ
listู mapiโ "fn" 0.
Definition listู map : val :=
๐ณ๐๐ป "fn" โ
listู mapi (๐ณ๐๐ป "_i" โ "fn").
Definition listู โ : val :=
๐ฟ๐ฒ๐ฐ "forall" "pred" "param" โ
๐บ๐ฎ๐๐ฐ๐ต "param" ๐๐ถ๐๐ต
| [] โ
true
| "v" :: "t" โ
"pred" "v" ๐ฎ๐ป๐ฑ "forall" "pred" "t"
๐ฒ๐ป๐ฑ.
Definition listู โ : val :=
๐ฟ๐ฒ๐ฐ "exists" "pred" "param" โ
๐บ๐ฎ๐๐ฐ๐ต "param" ๐๐ถ๐๐ต
| [] โ
false
| "v" :: "t" โ
"pred" "v" ๐ผ๐ฟ "exists" "pred" "t"
๐ฒ๐ป๐ฑ.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo.options.
Definition listู singleton : val :=
๐ณ๐๐ป "v" โ
"v" :: [].
Definition listู head : val :=
๐ณ๐๐ป "param" โ
๐บ๐ฎ๐๐ฐ๐ต "param" ๐๐ถ๐๐ต
| [] โ
๐ณ๐ฎ๐ถ๐น
| "v" :: โฝ โ
"v"
๐ฒ๐ป๐ฑ.
Definition listู tail : val :=
๐ณ๐๐ป "param" โ
๐บ๐ฎ๐๐ฐ๐ต "param" ๐๐ถ๐๐ต
| [] โ
๐ณ๐ฎ๐ถ๐น
| โฝ :: "t" โ
"t"
๐ฒ๐ป๐ฑ.
Definition listู is_empty : val :=
๐ณ๐๐ป "param" โ
๐บ๐ฎ๐๐ฐ๐ต "param" ๐๐ถ๐๐ต
| [] โ
true
| โฝ :: โฝ โ
false
๐ฒ๐ป๐ฑ.
Definition listู get : val :=
๐ฟ๐ฒ๐ฐ "get" "t" "i" โ
๐ถ๐ณ "i" โค 0 ๐๐ต๐ฒ๐ป (
listู head "t"
) ๐ฒ๐น๐๐ฒ (
"get" (listู tail "t") ("i" - 1)
).
Definition listู initiโ : val :=
๐ฟ๐ฒ๐ฐ "initi" "sz" "fn" "i" โ
๐ถ๐ณ "sz" โค "i" ๐๐ต๐ฒ๐ป (
[]
) ๐ฒ๐น๐๐ฒ (
๐น๐ฒ๐ "v" = "fn" "i" ๐ถ๐ป
"v" :: "initi" "sz" "fn" ("i" + 1)
).
Definition listู initi : val :=
๐ณ๐๐ป "sz" "fn" โ
listู initiโ "sz" "fn" 0.
Definition listู init : val :=
๐ณ๐๐ป "sz" "fn" โ
listู initi "sz" (๐ณ๐๐ป "_i" โ "fn" ()).
Definition listู foldliโ : val :=
๐ฟ๐ฒ๐ฐ "foldli" "fn" "i" "acc" "t" โ
๐บ๐ฎ๐๐ฐ๐ต "t" ๐๐ถ๐๐ต
| [] โ
"acc"
| "v" :: "t" โ
"foldli" "fn" ("i" + 1) ("fn" "i" "acc" "v") "t"
๐ฒ๐ป๐ฑ.
Definition listู foldli : val :=
๐ณ๐๐ป "fn" โ
listู foldliโ "fn" 0.
Definition listู foldl : val :=
๐ณ๐๐ป "fn" โ
listู foldli (๐ณ๐๐ป "_i" โ "fn").
Definition listู foldriโ : val :=
๐ฟ๐ฒ๐ฐ "foldri" "fn" "i" "t" "acc" โ
๐บ๐ฎ๐๐ฐ๐ต "t" ๐๐ถ๐๐ต
| [] โ
"acc"
| "v" :: "t" โ
"fn" "i" "v" ("foldri" "fn" ("i" + 1) "t" "acc")
๐ฒ๐ป๐ฑ.
Definition listู foldri : val :=
๐ณ๐๐ป "fn" โ
listู foldriโ "fn" 0.
Definition listู foldr : val :=
๐ณ๐๐ป "fn" โ
listู foldri (๐ณ๐๐ป "_i" โ "fn").
Definition listู size : val :=
๐ณ๐๐ป "t" โ
listู foldl (๐ณ๐๐ป "acc" โฝ โ "acc" + 1) 0 "t".
Definition listู rev_app : val :=
๐ณ๐๐ป "t1" "t2" โ
listู foldl (๐ณ๐๐ป "acc" "v" โ "v" :: "acc") "t2" "t1".
Definition listู rev : val :=
๐ณ๐๐ป "t" โ
listู rev_app "t" [].
Definition listู app : val :=
๐ณ๐๐ป "t1" "t2" โ
listู foldr (๐ณ๐๐ป "v" "acc" โ "v" :: "acc") "t1" "t2".
Definition listู snoc : val :=
๐ณ๐๐ป "t" "v" โ
listู app "t" (listู singleton "v").
Definition listู iteri : val :=
๐ณ๐๐ป "fn" โ
listู foldli (๐ณ๐๐ป "i" โฝ โ "fn" "i") ().
Definition listู iter : val :=
๐ณ๐๐ป "fn" โ
listู iteri (๐ณ๐๐ป "_i" โ "fn").
Definition listู mapiโ : val :=
๐ฟ๐ฒ๐ฐ "mapi" "fn" "i" "t" โ
๐บ๐ฎ๐๐ฐ๐ต "t" ๐๐ถ๐๐ต
| [] โ
[]
| "v" :: "t" โ
๐น๐ฒ๐ "v" = "fn" "i" "v" ๐ถ๐ป
"v" :: "mapi" "fn" ("i" + 1) "t"
๐ฒ๐ป๐ฑ.
Definition listู mapi : val :=
๐ณ๐๐ป "fn" โ
listู mapiโ "fn" 0.
Definition listู map : val :=
๐ณ๐๐ป "fn" โ
listู mapi (๐ณ๐๐ป "_i" โ "fn").
Definition listู โ : val :=
๐ฟ๐ฒ๐ฐ "forall" "pred" "param" โ
๐บ๐ฎ๐๐ฐ๐ต "param" ๐๐ถ๐๐ต
| [] โ
true
| "v" :: "t" โ
"pred" "v" ๐ฎ๐ป๐ฑ "forall" "pred" "t"
๐ฒ๐ป๐ฑ.
Definition listู โ : val :=
๐ฟ๐ฒ๐ฐ "exists" "pred" "param" โ
๐บ๐ฎ๐๐ฐ๐ต "param" ๐๐ถ๐๐ต
| [] โ
false
| "v" :: "t" โ
"pred" "v" ๐ผ๐ฟ "exists" "pred" "t"
๐ฒ๐ป๐ฑ.