type 'nf i_var_ = [ `I of int * 'nf Listx.listx | `Var of int ] type 'nf i_n_var_ = [ `N of int | 'nf i_var_ ] type 'nf i_num_var_ = [ `I of int * 'nf Listx.listx | `Match of 'nf i_num_var_ * int * (int * 'nf) list ref * 'nf list | `N of int | `Var of int ] type 'nf nf_ = [ `I of int * 'nf Listx.listx | `Lam of bool * 'nf nf_ | `Match of 'nf i_num_var_ * int * (int * 'nf) list ref * 'nf list | `N of int | `Var of int | `Bomb | `Pacman ] type nf = nf nf_ type i_var = nf i_var_ type i_n_var = nf i_n_var_ type i_num_var = nf i_num_var_ val hd_of_i_var : i_var -> int val hd_of : [< `I of 'a * 'b | `Match of 'c | `N of 'd | `Var of 'a ] -> 'a option (* put t under n lambdas, lifting t accordingtly *) val make_lams : nf -> int -> nf val lift : int -> nf -> nf val free_vars : nf -> int list module ToScott : sig val t_of_i_num_var : nf i_num_var_ -> Pure.Pure.t val t_of_nf : nf -> Pure.Pure.t end val print : ?l:string list -> nf -> string val cast_to_i_var : [< nf > `I `Var] -> i_var val cast_to_i_n_var : [< nf > `I `N `Var] -> i_n_var val cast_to_i_num_var : [< nf > `I `N `Match `Var] -> i_num_var val mk_app : nf -> nf -> nf val mk_appl : nf -> nf list -> nf val mk_appx : nf -> nf Listx.listx -> nf val mk_match : nf i_num_var_ -> int -> (int * nf) list ref -> nf list -> nf val subst : bool -> int -> nf -> nf -> nf val parse' : string list -> nf list * string list val eta_compare : nf -> nf -> int val eta_eq : [< nf ] -> [< nf ] -> bool val eta_subterm : [< nf ] -> [< nf ] -> bool