1 type var = int * (* arity of variable*) int;;
2 type 'nf_nob i_var_ = [ `I of var * 'nf_nob Listx.listx | `Var of var ]
3 type 'nf_nob i_n_var_ = [ `N of int | 'nf_nob i_var_ ]
4 type ('nf_nob,'nf) i_num_var_ = [
6 | `Match of ('nf_nob,'nf) i_num_var_ * (* originating var *) var * (*lift*) int * (*branches*)(int * 'nf) list ref * (*args*)'nf_nob list
8 type 'nf nf_nob_ = [ `Lam of (* was_unpacked *) bool * 'nf | `Pacman | ('nf nf_nob_,'nf) i_num_var_ ]
9 type nf = [ nf nf_nob_ | `Bottom ]
10 type nf_nob = nf nf_nob_
11 type i_var = nf_nob i_var_;;
12 type i_n_var = nf_nob i_n_var_;;
13 type i_num_var = (nf_nob,nf) i_num_var_;;
14 val hd_of_i_var : i_var -> int
15 val hd_of : i_n_var -> int option
16 val arity_of_hd : i_n_var -> int
17 (* put t under n lambdas, lifting t accordingtly *)
18 val make_lams : nf -> int -> nf
19 val lift : int -> nf -> nf
20 val free_vars' : nf -> var list
21 val free_vars : nf -> int list
24 val scott_of_nf : nf -> Pure.Pure.t
26 val print : ?l:string list -> nf -> string
27 val string_of_nf : [<nf] -> string
28 val cast_to_i_var : [< nf > `I `Var] -> i_var
29 val cast_to_i_n_var : [< nf > `I `N `Var] -> i_n_var
30 val cast_to_i_num_var : [< nf > `I `N `Match `Var] -> i_num_var
31 val set_arity : int -> nf -> nf
32 val mk_app : nf -> nf -> nf
33 val mk_appl : nf -> nf list -> nf
34 val mk_appx : nf -> nf Listx.listx -> nf
35 val mk_match : nf -> var -> int -> (int * nf) list ref -> nf list -> nf
36 val subst : bool -> bool -> int -> nf -> nf -> nf
37 val eta_compare : nf -> nf -> int
38 val eta_eq : [< nf ] -> [< nf ] -> bool
39 val eta_subterm : [< nf ] -> [< nf ] -> bool
40 val max_arity_tms : int -> [< nf] list -> int option
41 val minus1 : int -> int