Wikipedia lists the following algorithm to normalize a lambda calculation term $ t $:

- Yes $ t $ is not in the form of normal head, beta reduces the beta-redex to the top position to get $ t $. Then normalize $ t $ get $ t & # 39; $. $ t & # 39; $ is the normal form of $ t $.
- Yes $ t $ is in the form of normal head, normalize each of its sub-terms to obtain $ t $. $ t $ is the normal form of $ t $.

The basic case involved is if $ t $ is in normal form but has no sub-terms, in which case it is already in normal form. Yes $ t $ has a normal form, the algorithm above is guaranteed to find it.

The problem that I have, is that it does not seem that the algorithm has ever reduced eta.

For example, the algorithm normalizes $ lambda y. lambda x.y x $ to itself (since it is already in its normal form, and $ x $ is also in normal head shape). It should be normalized $ lambda y. y $ although.

It seems obvious that you need to add eta-reduction steps to *some point*. The problem is that I do not know where to put them and keep the property as the algorithm is sure to find the normal form.

When and where are you reducing to achieve this?