η-reduction for the λ-calculus #
A single η-reduction step.
- eta
{Var : Type u}
{M : Term Var}
: M.LC → (M.app (bvar 0)).abs.FullEta M
The eta rule: λx. M x ⟶ M, provided x is not free in M.
- appL
{Var : Type u}
{Z M N : Term Var}
: Z.LC → M.FullEta N → (Z.app M).FullEta (Z.app N)
Left congruence rule for application.
- appR
{Var : Type u}
{Z M N : Term Var}
: Z.LC → M.FullEta N → (M.app Z).FullEta (N.app Z)
Right congruence rule for application.
- abs
{Var : Type u}
{M N : Term Var}
(xs : Finset Var)
: (∀ x ∉ xs, (M.open' (fvar x)).FullEta (N.open' (fvar x))) → M.abs.FullEta N.abs
Congruence rule for lambda terms.
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.FullEta.step_not_fv
{Var : Type u}
{M M' : Term Var}
[HasFresh Var]
[DecidableEq Var]
{w : Var}
(step : M.FullEta M')
(hw : w ∉ M.fv)
:
w ∉ M'.fv
An η-reduction step does not introduce new free variables.