Could you please help me understand $\beta$ reductions' evaluation order. I've seen the most common approaches are
- Applicative : reduce the leftmost, innermost $\beta$ redex first.
- Normal : reduce the leftmost, outermost $\beta$ redex first.
- Unspecified : evaluate whatever you want but realize that there might be some order that doesn't terminate.
Now please indicate me if the following reductions are correct, according to each of the possible reductions order.
$$ (\lambda x.x((\lambda y.y)x))((\lambda a.a)(\lambda b.b)) $$
Normal :
$$
(\color{red}\lambda \color{red}x\color{red}.\color{red}x((\lambda y.y)\color{red}x))\color{blue}{((\lambda a.a)(\lambda b.b))} \equiv_{\beta} \\
((\color{red}{(\lambda a.a)}\color{blue}{(\lambda b.b)})((\lambda y.y)((\lambda a.a)(\lambda b.b)))) \equiv_{\beta} \\
(\color{red}{(\lambda b.b)}\color{blue}{((\lambda y.y)((\lambda a.a)(\lambda b.b)))}) \equiv_{\beta} \\
(\color{red}{(\lambda y.y)}\color{blue}{((\lambda a.a)(\lambda b.b))}) \equiv_{\beta} \\
(\color{red}{(\lambda a.a)}\color{blue}{(\lambda b.b)}) \equiv_{\beta} \\
(\lambda b.b)
$$
Applicative :
$$
(\lambda x.x(\color{red}{(\lambda y.y)}\color{blue}x))((\lambda a.a)(\lambda b.b)) \equiv_{\beta} \\
(\lambda x.xx)((\lambda a.a)(\lambda b.b)) \equiv_{\beta}
$$
$$
\text{here, do we consider the result } (\lambda x.x(x)) \text{ as an application of }\\
\\ \lambda x.x \text{ to } (x) \text{ ,with the necessary renaming of (x), or just as part of the body as in } \lambda x.xx
$$
$$
\color{red}{(\lambda x.xx)}\color{blue}{((\lambda a.a)(\lambda b.b))} \equiv_{\beta} \\
(\color{red}{(\lambda a.a)}\color{blue}{(\lambda b.b)})((\lambda a.a)(\lambda b.b)) \equiv_{\beta} \\
\color{red}{(\lambda b.b)}\color{blue}{((\lambda a.a)(\lambda b.b))} \equiv_{\beta} \\
(\color{red}{(\lambda a.a)}\color{blue}{(\lambda b.b)}) \equiv_{\beta} \\
(\lambda b.b)
$$
"Unspecified" :
$$
(\lambda x.x((\lambda y.y)x))(\color{red}{(\lambda a.a)}\color{blue}{(\lambda b.b)}) \equiv_{\beta} \\
(\color{red}{\lambda x.x}((\lambda y.y)\color{red}x))\color{blue}{((\lambda b.b))} \equiv_{\beta} \\
\color{red}{(\lambda b.b)}\color{blue}{((\lambda y.y)(\lambda b.b))} \equiv_{\beta} \\
\color{red}{(\lambda y.y)}\color{blue}{(\lambda b.b)} \equiv_{\beta} \\
(\lambda b.b)
$$
I guess this is an unfortunate case since, no matter the reduction order, the result is always the identity function (unless mistake were made!).