Generate a fresh variable name.
Beta reduction via term-level substitution.
Beta reduction via term-level substitution.
Evaluate the given expression by rewriting it with the evals strategy.
Evaluate the given expression by rewriting it with the evals strategy.
Reusable strategy for reduction with explicit term-level substitution.
Reusable strategy for reduction with explicit term-level substitution.
Apply substitutions lazily in an application, maintaining the environment.
Apply substitutions lazily in an application, maintaining the environment.
Drop the bindings.
Drop the bindings.
Merging two arbitrary parallel binders.
Merging two arbitrary parallel binders.
Rename variables bound in an inner let (corresponds to heap allocation for these values).
Rename variables bound in an inner let (corresponds to heap allocation for these values).
Lift an expression to be evaluated to a substitution.
Lift an expression to be evaluated to a substitution.
Apply substitutions strictly in an operator evaluation, maintaining the environment.
Apply substitutions strictly in an operator evaluation, maintaining the environment.
Lookup a binding for a name in a list of bindings.
Lookup a binding for a name in a list of bindings.
Whether this mechanism evaluates inside lambdas.
Whether this mechanism evaluates inside lambdas. Used for testing. Default: false.
Rename all variables in a parallel binding expression to fresh vars.
Rename all variables in a parallel binding expression to fresh vars. Assumes that the names are unique to start with.
Lazily evaluate within the expression then try to reduce the expression itself, repeating until no change.
Lazily evaluate within the expression then try to reduce the expression itself, repeating until no change.
Substitution in applications.
Substitution in applications.
Substitution in lambda abstractions.
Substitution in lambda abstractions.
Substitution in numeric terms.
Substitution in numeric terms.
Substitution in primitive operations
Substitution in primitive operations
Substitute a variable and maintain the bindings.
Substitute a variable and maintain the bindings.
Capture-free substitution of free occurrences of x in e1 with e2.
Capture-free substitution of free occurrences of x in e1 with e2.
Update variable bindings using a given evaluation strategy.
Update variable bindings using a given evaluation strategy.