Legend:
Library
Module
Module type
Parameter
Class
Class type
Library
Module
Module type
Parameter
Class
Class type
Evaluation and conversion.
Preliminary remarks. We define the head-structure of a term t as:
t1,..,tn
(and ?M is not instantiated)A term t is in head-normal form (hnf) if its head-structure is invariant by reduction.
A term t is in weak head-normal form (whnf) if it is an abstration or if it is in hnf. In particular, a term in head-normal form is in weak head-normal form.
A term t is in strong normal form (snf) if it cannot be reduced further.
type stack = Term.term list
Abstract machine stack.
val tree_walk :
Term.problem ->
Term.ctxt ->
Term.dtree ->
stack ->
(Term.term * stack) option
tree_walk p tr ctx stk
tries to apply a rewrite rule by matching the stack stk
against the decision tree tr
in context ctx
. The resulting state of the abstract machine is returned in case of success. Even if matching fails, the stack stk
may be imperatively updated since a reduction step taken in elements of the stack is preserved (this is done using TRef
). Fresh metavariables generated by unification rules with extra pattern variables are added in p
.
whnf ~rewrite c t
computes a whnf of the term t
in context c
. User-defined rewrite rules are used only if ~rewrite = true
.
eq_modulo c a b
tests the convertibility of a
and b
in context c
. WARNING: may have side effects in TRef's introduced by whnf.
pure_eq_modulo c a b
tests the convertibility of a
and b
in context c
with no side effects.
snf c t
computes the strong normal form of the term t
in the context c
. It unfolds variables defined in the context c
.
hnf t
computes a head-normal form of the term t
wrt beta-reduction, user-defined rewrite rules and variables defined in the context c
.
simplify t
computes a beta whnf of t
belonging to the set S such that:
t
is a product, then both its domain and codomain are in S.If s
is a non-opaque symbol having a definition, unfold_sym s t
replaces in t
all the occurrences of s
by its definition.
type strat = {
strategy : strategy;
Evaluation strategy.
*)steps : int option;
Max number of steps if given.
*)}