]> matita.cs.unibo.it Git - fireball-separation.git/blob - ocaml/num.mli
Fixes to how arities are assigned and propagated
[fireball-separation.git] / ocaml / num.mli
1 type var = int * int
2 type 'nf i_var_ = [ `I of var * 'nf Listx.listx | `Var of var ]
3 type 'nf i_n_var_ = [ `N of int | 'nf i_var_ ]
4 type 'nf i_num_var_ =
5     [ `I of var * 'nf Listx.listx
6     | `Match of 'nf i_num_var_ * var * int * (int * 'nf) list ref * 'nf list
7     | `N of int
8     | `Var of var ]
9 type 'nf nf_ =
10     [ `I of var * 'nf Listx.listx
11     | `Lam of bool * 'nf nf_
12     | `Match of 'nf i_num_var_ * var * int * (int * 'nf) list ref * 'nf list
13     | `N of int
14     | `Var of var ]
15 type nf = nf nf_
16 type i_var = nf i_var_
17 type i_n_var = nf i_n_var_
18 type i_num_var = nf i_num_var_
19 val hd_of_i_var : i_var -> int
20 val hd_of : i_n_var -> int option
21 val arity_of_hd : i_n_var -> int
22 (* put t under n lambdas, lifting t accordingtly *)
23 val make_lams : nf -> int -> nf
24 val lift : int -> nf -> nf
25 val free_vars : nf -> int list
26 module ToScott :
27   sig
28     val t_of_i_num_var : nf i_num_var_ -> Pure.Pure.t
29     val t_of_nf : nf -> Pure.Pure.t
30   end
31 val print : ?l:string list -> nf -> string
32 val string_of_nf : [<nf] -> string
33 val cast_to_i_var : [< nf > `I `Var] -> i_var
34 val cast_to_i_n_var : [< nf > `I `N `Var] -> i_n_var
35 val cast_to_i_num_var : [< nf > `I `N `Match `Var] -> i_num_var
36 val set_arity : int -> nf -> nf
37 val mk_app : nf -> nf -> nf
38 val mk_appl : nf -> nf list -> nf
39 val mk_appx : nf -> nf Listx.listx -> nf
40 val mk_match : nf i_num_var_ -> var -> int -> (int * nf) list ref -> nf list -> nf
41 val subst : bool -> bool -> int -> nf -> nf -> nf
42 val parse' : string list -> nf list * string list
43 val eta_compare : nf -> nf -> int
44 val eta_eq : [< nf ] -> [< nf ] -> bool
45 val eta_subterm : [< nf ] -> [< nf ] -> bool
46 val max_arity_tms : int -> [< nf] list -> int
47 val compute_arities : int -> int -> nf list -> int list