package um-abt
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Module type Abt.SyntaxSource
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
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.
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.
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
equal t t' is true when t and t' are alpha equivalent and false otherwise
val case :
var:(Var.t -> 'a) ->
bnd:((Var.Binding.t * t) -> 'a) ->
opr:(t Op.t -> 'a) ->
t ->
'aCase analysis for eleminating ABTs
This is an alternative to using pattern-based elimination.
is_closed t if true if there are no free variables in t, otherwise false