Call-by-Name Evaluation #
A single step of Call-by-Name evaluation.
- base
{Var : Type u}
{M N : Term Var}
: M.Beta N → M.CBN N
Top-level β-reduction.
- app
{Var : Type u}
{Z M N : Term Var}
: Z.LC → M.CBN N → (M.app Z).CBN (N.app Z)
Evaluates the leftmost term.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.CBN.step_to_redex
{Var : Type u}
{M N : Term Var}
(step : M.CBN N)
:
A single Call-by-Name step is a full β-reduction.
theorem
Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.CBN.to_redex
{Var : Type u}
{M N : Term Var}
(step : Relation.ReflTransGen CBN M N)
:
Call-by-Name reduction is contained in full β-reduction.
theorem
Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.CBN.steps_app_l_cong
{Var : Type u}
{M M' N : Term Var}
(step : Relation.ReflTransGen CBN M M')
(lc_N : N.LC)
:
Relation.ReflTransGen CBN (M.app N) (M'.app N)
Left congruence rule for application in Call-by-Name reduction.
theorem
Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.CBN.lc_r
{Var : Type u}
{M N : Term Var}
[HasFresh Var]
[DecidableEq Var]
(step : M.CBN N)
:
N.LC
The right side of a Call-by-Name step is locally closed.
theorem
Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.CBN.steps_lc_r
{Var : Type u}
{M N : Term Var}
[HasFresh Var]
[DecidableEq Var]
(lc_M : M.LC)
(step : Relation.ReflTransGen CBN M N)
:
N.LC
The right side of a Call-by-Name reduction is locally closed.
theorem
Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.CBN.steps_subst
{Var : Type u}
{M M' N : Term Var}
[HasFresh Var]
[DecidableEq Var]
(x : Var)
(step : Relation.ReflTransGen CBN M M')
(lc_N : N.LC)
:
Substitution preserves Call-by-Name reduction.