package um-abt
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Module type Abt.Syntax
Source
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 ->
'a
Case 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