EVAL
bossLib.EVAL : conv
Evaluate a term by deduction.
An invocation EVAL M
symbolically evaluates
M
by applying the defining equations of constants occurring
in M
. These equations are held in a mutable datastructure
that is automatically added to by Hol_datatype
,
Define
, and tprove
. The underlying algorithm
is call-by-value with a few differences, see the entry for
CBV_CONV
for details.
Never fails, but may diverge.
- EVAL (Term `REVERSE (MAP (\x. x + a) [x;y;z])`);
> val it = |- REVERSE (MAP (\x. x + a) [x; y; z]) = [z + a; y + a; x + a]
: thm
In order for recursive functions over numbers to be applied by
EVAL
, pattern matching over SUC
and
0
needs to be replaced by destructors. For example, the
equations for FACT
would have to be rephrased as
FACT n = if n = 0 then 1 else n * FACT (n-1)
.
computeLib.CBV_CONV
, computeLib.RESTR_EVAL_CONV
,
bossLib.EVAL_TAC
, computeLib.monitoring
,
bossLib.Define