Documentation

Cslib.Languages.LambdaCalculus.LocallyNameless.Untyped.StrongNorm

Strong normalization (termination) for full beta-reduction of untyped lambda calculus.

A single β-reduction step preserves strong normalization.

Multiple β-reduction steps also preserve strong normalization.

Free variables are strongly normalizing.

An application is strongly normalizing if the left and right terms are strongly normalizing, as well as all possible future top level abstraction application beta reductions

The left side of a strongly normalizing application is strongly normalizing.

The right side of a strongly normalizing application is strongly normalizing.

A neutral term is a term of the form v t₁ … t_n where v is a variable and t₁ … t_n are strongly normalizing terms.

Instances For
    theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.neutral_step {Var : Type u} {t t' : Term Var} (Hneut : t.Neutral) (Hstep : t.FullBeta t') :

    Neutral terms only reduce to other neutral terms in a single step

    Neutral terms only reduce to other neutral terms in multiple steps

    Neutral terms are strongly normalizing.

    A lambda abstraction is strongly normalizing if its body is strongly normalizing.

    theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.sn_abs_app_multiApp {Var : Type u} [DecidableEq Var] [HasFresh Var] {Ps : List (Term Var)} {M N : Term Var} (sn_N : Relation.SN FullBeta N) (sn_MNPs : Relation.SN FullBeta ((M.open' N).multiApp Ps)) (lc_N : N.LC) (lc_MNPs : ((M.open' N).multiApp Ps).LC) :

    A term of the form λ M N P_1 … P_n is strongly normalizing if

    1. N is strongly normalizing,
    2. M ^ N P₁ … Pₙ is strongly normalizing,
    3. N is locally closed,
    4. M ^ N P₁ … Pₙ is locally closed