aboutsummaryrefslogtreecommitdiffstats
path: root/lib/extraction/prelude.v
blob: ef35bcb21a594271cdb054c5b19e18e9b260e32f (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Require Import Coq.Numbers.DecimalString ExtrOcamlBasic ExtrOcamlString.
From stdpp Require Import strings stringmap gmap.
From mininix Require Import nix.interp.

Definition attr_set_insert (x : string) (α : attr) (αs : gmap string attr) : gmap string attr :=
  <[x:=α]> αs.

Definition attr_set_contains (x : string) (αs : gmap string attr) : bool :=
  bool_decide (x ∈ dom αs).

Definition attr_set_fold {A} (f : string → attr → A → A) (init : A) (αs : gmap string attr) : A :=
  map_fold f init αs.

Definition attr_set_empty : gmap string attr := ∅.

Definition env_fold {A} (f : string → (kind * thunk) → A → A) (init : A) (E : env) : A :=
  map_fold f init E.

Definition env_insert_abs (x : string) (t : thunk) (E : env) : env :=
  <[x:=(ABS,t)]> E.

Definition thunk_map_fold {A} (f : string → thunk → A → A) (init : A) (bs : gmap string thunk) : A :=
  map_fold f init bs.

Definition thunk_map_insert (x : string) (t : thunk) (bs : gmap string thunk) : gmap string thunk :=
  <[x:=t]> bs.

Definition thunk_map_empty : gmap string thunk := ∅.

Definition matcher := gmap string (option expr).

Definition matcher_empty : matcher := ∅.

Definition matcher_insert (x : string) (me : option expr) (ms : matcher) : matcher :=
  <[x:=me]> ms.

Definition matcher_fold {A} (f : string → option expr → A → A) (init : A) (ms : matcher) : A :=
  map_fold f init ms.

Definition env_empty : env := ∅.

Definition string_of_Z (x : Z) : string :=
  NilZero.string_of_int (Z.to_int x).

Definition string_to_Z (s : string) : option Z :=
  Z.of_int <$> NilZero.int_of_string s.

Separate Extraction
  attr_set_insert env_insert_abs matcher_insert thunk_map_insert
  attr_set_contains attr_set_fold env_fold matcher_fold thunk_map_fold
  env_empty attr_set_empty matcher_empty thunk_map_empty string_of_Z
  string_to_Z interp' forallb.