Library
Module
Module type
Parameter
Class
Class type
Make (Op)
is a module for constructing and manipulating ABTs for the operators defined in Op
.
type t = private
| Var of Var.t
Variables
*)| Bnd of Var.Binding.t * t
Scoped variable binding
*)| Opr of t Op.t
The type of ABT's constructed from the operators defind in O
val bind : Var.Binding.t -> t -> t
bind bnd t
is a branch of the ABT, in which any free variables in t
matching the name of bnd
are bound to bnd
.
val v : string -> t
v x
is a leaf in the ABT consisting of a variable named x
x #. t
is a new abt obtained by binding all free variables named x
in t
Note that this does not substitute variables for a value, (for which, see subst
). This only binds the free variables within the scope of an abstraction that ranges over the given (sub) abt t
.
val subst : Var.Binding.t -> value:t -> t -> t
subst bnd ~value t
is a new ABT obtained by substituting value
for all variables bound to bnd
.
subst_var name ~value t
is a new abt obtained by substituting value
for the outermost scope of variables bound to name
in t
val to_string : t -> string
to_string t
is the representation of t
as a string
Case analysis for eleminating ABTs
This is an alternative to using pattern-based elimination.
val free_vars : t -> Var.Set.t
free_vars t
is the set of variables that are free in in t
val is_closed : t -> bool
is_closed t
if true
if there are no free variables in t
, otherwise false
module Unification : sig ... end