"Ordine applicabile" e "Ordine normale" in lambda-calcolo


14

Ordine applicabile : valutare sempre in modo completo gli argomenti di una funzione prima di valutare la funzione stessa, ad esempio -

(λx.x2(λx.(x+1)  2)))(λx.x2(2+1)) (λx.x2(3)) 32  9

Ordine normale: l'espressione sarebbe ridotta dall'esterno in, come -

(λx.x2(λx.(x+1) 2)) (λx.(x+1)   2)2 (2+1)2 32  9

Sia M=(λx.y (λx.(x  x) λx.(x  x)))

Perché è in ordine applicativo, ciclo infinito, ma in ordine normale, M y ?M
My


1
Hai provato a valutarli? È il primo o il secondo caso poco chiaro?
Karolis Juodelė,

@ KarolisJuodelė: 1 °
URL87

1
Le espressioni lambda non dovrebbero essere scritte tra parentesi per segnare la fine della prima espressione lambda e l'inizio dell'argomento, ad esempio:Let M = (λx.y) ((λx.(x x)) λx.(x x))
mattgately

Risposte:


7

(λx.y (λx.(x  x) λx.(x  x)))

λx.(x  x) λx.(x  x)λx.(x  x) λx.(x  x)
λx.(x  x)

15

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, KyNy 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.)


Suppongo che tu abbia fatto un refuso al paragrafo 3. KyNN dovrebbe essere y, giusto? Indipendentemente da ciò, +1.
Karolis Juodelė,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.