Documentation

Cslib.Languages.LambdaCalculus.LocallyNameless.Untyped.FullBeta

β-reduction for the λ-calculus #

References #

A single β-reduction step.

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

        The left side of a reduction is locally closed.

        Left congruence rule for application in multiple reduction.

        Right congruence rule for application in multiple reduction.

        The right side of a reduction is locally closed.

        theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullBeta.redex_subst_cong_lc {Var : Type u} [HasFresh Var] [DecidableEq Var] (s s' t : Term Var) (x : Var) (step : s.FullBeta s') (h_lc : t.LC) :
        s[x:=t].FullBeta (s'[x:=t])

        Substitution of a locally closed term respects a single reduction step.

        Substitution respects a single reduction step of a free variable.

        theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullBeta.step_abs_close {Var : Type u} {M M' : Term Var} [HasFresh Var] [DecidableEq Var] {x : Var} (step : M.FullBeta M') :
        (closeRec 0 x M).abs.FullBeta (closeRec 0 x M').abs

        Abstracting then closing preserves a single reduction.

        Abstracting then closing preserves multiple reductions.

        theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullBeta.step_abs_cong {Var : Type u} {M M' : Term Var} [HasFresh Var] [DecidableEq Var] (xs : Finset Var) (cofin : xxs, (M.open' (fvar x)).FullBeta (M'.open' (fvar x))) :

        Multiple reduction of opening implies multiple reduction of abstraction.

        Multiple reduction of opening implies multiple reduction of abstraction.

        theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullBeta.step_open_cong_l {Var : Type u} [HasFresh Var] [DecidableEq Var] (s s' t : Term Var) (L : Finset Var) (step : xL, (s.open' (fvar x)).FullBeta (s'.open' (fvar x))) (h_lc : t.LC) :
        (s.open' t).FullBeta (s'.open' t)