Documentation

Cslib.Languages.LambdaCalculus.LocallyNameless.Untyped.StandardReduction

Standard Reduction and the Standardization Theorem #

Reference #

The Standard reduction relation.

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 standard reduction is locally closed.

        Standard reduction is reflexive for locally closed terms.

        The right side of a standard reduction is locally closed.

        theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.Standard.of_cbn_step {Var : Type u} {M N : Term Var} (step : M.CBN N) (lc_N : N.LC) :

        A single Call-by-Name step is a standard reduction.

        theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.Standard.cbn_step_trans {Var : Type u} {M N P : Term Var} (step : M.CBN P) (std : P.Standard N) :

        A Call-by-Name step followed by a standard reduction is a standard reduction.

        A Call-by-Name reduction followed by a standard reduction is a standard reduction.

        Call-by-Name reduction is contained in standard reduction.

        theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.Standard.subst {Var : Type u} {M N M' N' : Term Var} [DecidableEq Var] [HasFresh Var] (hM : M.Standard M') (hN : N.Standard N') (x : Var) (lc_N : N.LC) (lc_N' : N'.LC) :
        M[x := N].Standard M'[x := N']

        Standard reduction is preserved by substitution.

        theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.Standard.of_beta_step {Var : Type u} {M N : Term Var} [DecidableEq Var] [HasFresh Var] (step : M.FullBeta N) (lc_M : M.LC) :

        A single full β-step is a standard reduction.

        Standard reduction is contained in full β-reduction.

        theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.Standard.abs_inv {Var : Type u} {M N : Term Var} [DecidableEq Var] [HasFresh Var] (h : M.Standard N) (M' : Term Var) (eq : N = M'.abs) :
        ∃ (M'' : Term Var), Relation.ReflTransGen CBN M M''.abs M''.abs.Standard M'.abs

        If a standard reduction reaches an abstraction, then its leading Call-by-Name reduction reaches an abstraction that standardly reduces to the same target.

        theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.Standard.abs_subst {Var : Type u} {M N M' N' : Term Var} [DecidableEq Var] [HasFresh Var] (h_abs : M.abs.Standard M'.abs) (hN : N.Standard N') (lc_N : N.LC) (lc_N' : N'.LC) :
        (M.open' N).Standard (M'.open' N')

        Standard reduction of abstractions is preserved by opening.

        A standard reduction followed by a full β-step is a standard reduction.

        A standard reduction followed by a full β-reduction is a standard reduction.

        theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.Standard.trans {Var : Type u} {M N P : Term Var} [DecidableEq Var] [HasFresh Var] (h1 : M.Standard P) (h2 : P.Standard N) :

        Standard reduction is transitive.

        @[implicit_reducible]
        instance Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.instTransStandardFullBeta {Var : Type u} [DecidableEq Var] [HasFresh Var] :
        Trans (fun (x1 x2 : Term Var) => x1.Standard x2) (fun (x1 x2 : Term Var) => x1.FullBeta x2) fun (x1 x2 : Term Var) => x1.Standard x2
        Equations
        @[implicit_reducible]
        instance Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.instTransStandard {Var : Type u} [DecidableEq Var] [HasFresh Var] :
        Trans (fun (x1 x2 : Term Var) => x1.Standard x2) (fun (x1 x2 : Term Var) => x1.Standard x2) fun (x1 x2 : Term Var) => x1.Standard x2
        Equations

        The standardization theorem: every full β-reduction is a standard reduction.

        Standard reduction coincides with full β-reduction on locally closed terms.