package lambdapi
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=1066aed2618fd8e6a400c5147dbf55ea977ce8d3fe2e518ac6785c6775a1b8be
sha512=f7f499626aba92e070ae69581299a58525973fdbfd04a160ed3ac89209fb6cbe307b816d0b23e1b75bc83467ce8b4b0530c6f9816eaf58f7a07fde65a450106c
doc/lambdapi.core/Core/Env/index.html
Module Core.Env
Source
Scoping environment for variables.
Type of an environment, used in scoping to associate names to corresponding variables and types. Note that it cannot be implemented by a map as the order is important. The structure is similar to Term.ctxt
, a tuple (x,a,t)
is a variable x
, its type a
and possibly its definition t
. The typing environment x1:A1,..,xn:An
is represented by the list xn:An;..;x1:A1
in reverse order (last added variable comes first).
pp ppf env
prints the environment env
on the formatter ppf
(for debug).
add n v a t env
extends the environment env
by mapping the string n
to (v,a,t)
.
find n env
returns the variable associated to the variable name n
in the environment env
. If none is found, Not_found
is raised.
to_prod env t
builds a sequence of products/lets whose domains are the variables of the environment env
(from left to right), and whose body is the term t
. By calling to_prod [(xn,an,None);⋯;(x1,a1,None)] t
you obtain a term of the form Πx1:a1,..,Πxn:an,t
.
to_abst env t
builds a sequence of abstractions or let bindings, depending on the definition of the elements in the environment whose domains are the variables of the environment env
(from left to right), and which body is the term t
: to_abst [(xn,an,None);..;(x1,a1,None)] t = λx1:a1,..,λxn:an,t
.
vars env
extracts the array of variables in env
. Note that the order is reversed: vars [(xn,an);..;(x1,a1)] = [|x1;..;xn|]
.
to_terms env
extracts the array of the variables in env
and injects them in tbox
. This is the same as Array.map mk_Vari (vars env)
. Note that the order is reversed: to_tbox [(xn,an);..;(x1,a1)] = [|x1;..;xn|]
.
val match_prod :
Term.ctxt ->
Term.term ->
(Term.term -> Term.term option -> Term.binder -> 'a) ->
'a
match_prod c t f
returns f a None b
if t
matches Prod(a,b)
, and f a d b
if t
matches LLet(a,d,b)
, possibly after reduction.
of_prod c s t
returns a tuple (env,b)
where b
is constructed from the term t
by unbinding as much dependent products as possible in the head of t
. The free variables created by this process, prefixed by s
, are given (with their types) in the environment env
(in reverse order). For instance, if t
is of the form Πx1:a1, ⋯, Πxn:an, b
, then the function returns b
and the environment (xn,an); ⋯;(x1,a1)
.
of_prod_nth c n t
returns a tuple (env,b)
where b
is constructed from the term t
by unbinding n
dependent products. The free variables created by this process are given (with their types) in the environment env
(in reverse order). For instance, if t
is of the form Πx1:a1, ⋯, Πxn:an, b
then the function returns b
and the environment (xn,an); ⋯;(x1,a1)
. n
must be non-negative.
of_prod_using c xs t
is similar to of_prod s c n t
where n = Array.length xs
except that it replaces unbound variables by those of xs
.
names env
returns the set of names in env
.
gen_valid_idopts env ids
generates a list of pairwise distinct identifiers distinct from those of env
to replace ids
.