lift
turns current stage values into future stage expressions.
#... value constructors
\... primitive operative combiners
[..] process state
[..] = [..] reduction rule
(..) syntax sugar for list values [#cons .. #nil]
'FOO syntax sugar for symbol values [#sym ...]
X@[..] variable binding
[\number? [#num ...] ] = [#bool true]
[\number? [#cons ...]] = [#bool false]
[\number? [#code EXP]] = [#code [\number? EXP]]]
[\lift [#num N]] = [#code [#num N]]
[\lift [#cons A B]] = [#code [\cons [\lift A] [\lift B]]]
[\lift [#clo P S B E]] = [#code [\vau P S B E]]
// do we need let insertion?
[\run [#code E1] [#code E2]] = [#code [\run E1 E2]]
[\run [notcode ...] [#code E]] = E
[\number? [\lift [#num N]]]
~ [\number? [#code [#num N]]]
~ [#code [\number? [#num N]]] // if we eval under #code
~ [#code [#num N]]