Il termine che stai riducendo è ( KyΩ ) dove Ky è la funzione costante λ x . y (ritorna sempre y, ignorando il suo argomento) e Ω = ( λ x . ( Xx )λ x . ( xx ) )è un termine non terminante. In un certo sensoΩ è l'ultimo termine non terminante: si riduce a se stesso, cioè Ω → Ω. (Assicurati di elaborarlo su carta almeno una volta nella vita.)
La riduzione dell'ordine applicabile deve ridurre l'argomento della funzione in una forma normale, prima che possa valutare il redex di livello superiore. Dal momento che l'argomentoΩ has no normal form, applicative order reduction loops infinitely. More generally, for any term M, MΩ→MΩ, and this is the reduction chosen by the applicative order strategy.
Normal order reduction starts by reducing the top-level redex (because the function Ky is already in normal form). Since Ky ignores its argument, (KyΩ)→y in one step. More generally, KyN→y for any term N, and this is the reduction chosen by the normal order strategy.
Questo caso illustra un fenomeno più generale: la riduzione dell'ordine applicativo trova sempre una forma normale solo se il termine è fortemente normalizzato, mentre la riduzione dell'ordine normale trova sempre la forma normale se ce n'è una. Ciò accade perché l'ordine applicativo valuta sempre prima tutti gli argomenti, e quindi perde l'opportunità che un argomento si riveli inutilizzato; mentre l'ordine normale valuta gli argomenti il più tardi possibile e quindi vince sempre se l'argomento risulta inutilizzato.
(Il rovescio della medaglia è che l'ordine applicativo tende ad essere più veloce nella pratica, perché è relativamente raro che un argomento sia inutilizzato; mentre è comune che un argomento venga usato più volte e in ordine applicativo l'argomento viene valutato solo una volta. order valuta l'argomento tutte le volte che viene utilizzato, sia esso 0, 1 o più volte.)