It is possible to distinguish Normal terms which don't contain beta redex as a sub-expression, from others like so

data WithBound a = Var | Other a

data Normal a
  = Neutral (Neutral a)
  | Abstract (Normal (WithBound a))

data Neutral a
  = Variable a
  | Apply (Neutral a) (Normal a)

Is there any intuitive explanation as to why this property would hold ? It might be entirely self-evident somehow after you look at it long enough but it does not prompt straight out to me as of now.


I can reassure you that this property is not immediately self-evident. In trying to describe/enumerate the set of normal forms, the main observation required is the following:

  • Abstraction preserves normal forms: if $t$ is normal, than so is $\lambda x.t$.

  • Application does not preserve normal forms: if $t$ and $u$ are normal, $t\ u$ may contain a redex!

We want to characterize the normal forms for which we can not create redexes when performing applications. Obviously, this occurs iff $t$ is a $\lambda$-abstraction. In particular, we can take $u$ to be anything we want, so long as it is in normal form.

For $t$, we need either a variable or an application, itself already in normal form. This allows a convenient recursive definition for $t$, which we will call neutral: $$t=x$$ or $$t=t_1\ t_2$$ with $t_2$ any normal form, and $t_1\ t_2$ also in normal form, i.e. $t_1$ also a neutral term.

But this is exactly your definition of Neutral!

One can carry out this process further to characterize exactly the normalizing (resp. strongly normalizing) terms, if we furthermore allow weak head expansions.

| cite | improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.