Properties of Lambda operational semantics #
This module contains normal-form, closure-lifting, substitution, factory-call,
and metadata-insensitivity lemmas used to reason about Step and StepStar.
Evaluator-specific top-level theorems live in LExprEvalProps and
LExprEvalSound.
Beta-reduction behavior of have-bindings: mkHave m name ty value body
steps to body with the bound variable substituted by value.
If callOfLFunc (with either allowPartialApp) recognizes .app m e1 e2 as a call, its
argument e2 is among the call's arguments (the last one).
The function part e1 of an application .app m e1 e2 that is a value is a value.
Values have no free variables.
Every expression steps to its free-variable substitution from the environment.
Whether an expression is an inlineIfAllValues unfolding argument (isInlineArg)
depends only on the expression with its metadata erased.