blob: 38739b3ece35548c1a89d01467e6858ef44a006f (
plain)
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
53
54
55
56
57
|
open Bwd
type syn =
| Var of int
| Def of Name.t * value Lazy.t
| Pi of Name.local * syn * (* BINDS *) syn
| Lam of Name.local * (* BINDS *) syn
| App of syn * syn
| Sg of Name.local * syn * (* BINDS *) syn
| Pair of syn * syn
| Fst of syn
| Snd of syn
| Type
| Bool
| True
| False
| BoolElim of {
motive_var : Name.local;
motive : (* BINDS *) syn;
true_case : syn;
false_case : syn;
scrut : syn;
}
and value =
| Neutral of ne
| Unfold of unfold
| Pi of Name.local * value * clo
| Lam of Name.local * clo
| Sg of Name.local * value * clo
| Pair of value * value
| Type
| Bool
| True
| False
and ne = ne_head * frm bwd
and ne_head =
| Var of int (* De Bruijn levels *)
and unfold = unfold_head * frm bwd * value Lazy.t
and unfold_head =
| Def of Name.t * value Lazy.t
and frm =
| App of value
| Fst
| Snd
| BoolElim of {
motive_var : Name.local;
motive: clo;
true_case: value;
false_case: value;
}
and env = value bwd
and clo = Clo of { body : syn; env : env }
|