"Pedido aplicável" e "Pedido normal" no cálculo lambda

14

Ordem aplicável : sempre avalie totalmente os argumentos de uma função antes de avaliar a própria função, como -

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

Ordem normal: a expressão seria reduzida de fora para dentro, como -

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

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

Por que é que, na ordem do aplicativo, loop infinito, mas na ordem normal, M y ?M
My

URL87
fonte
1
Você já tentou avaliá-los? É o primeiro ou o segundo caso que não está claro?
precisa saber é o seguinte
@ KarolisJuodelė: 1st
URL87 02/01
1
Não deve as expressões lambda ser escrito com parênteses para marcar o fim da primeira expressão lambda eo início do argumento, por exemplo:Let M = (λx.y) ((λx.(x x)) λx.(x x))
mattgately

Respostas:

7

é um loop infinito porque λ x . ( x x ) λ x . ( x x ) λ x . ( x x ) λ x . ( x x ) Observe que λ x . ( x(λx.y (λx.(x  x) λx.(x  x)))

λx.(x  x) λx.(x  x)λx.(x  x) λx.(x  x)
apenas escreve seu argumento duas vezes.λx.(x  x)
Karolis Juodelė
fonte
15

O termo que você está reduzindo é onde K y é a função constante λ x . y (sempre retorna y , ignorando seu argumento) e Ω = ( λ x . ( x(KyΩ)Kyλx.yy é um termo que não termina. Em certo sentido, Ω é o termo não terminante final: ele se reduz beta a si próprio, ou seja, Ω Ω . (Certifique-se de elaborá-lo em papel pelo menos uma vez na vida.)Ω=(λx.(xx)λx.(xx))ΩΩΩ

A redução de pedido aplicável deve reduzir o argumento da função para uma forma normal, antes de poder avaliar o redex de nível superior. Como o argumento não tem forma normal, a redução da ordem do aplicativo é executada em loop infinitamente. Mais geralmente, para qualquer termo M , M Ω M Ω , e essa é a redução escolhida pela estratégia de ordem aplicativa.ΩMMΩMΩ

KyKy(KyΩ)yKyNyN

Este caso ilustra um fenômeno mais geral: a redução da ordem aplicativa somente encontra uma forma normal se o termo estiver normalizando fortemente, enquanto a redução normal da ordem sempre encontra a forma normal se houver uma. Isso acontece porque a ordem do aplicativo sempre avalia os argumentos completos primeiro e, portanto, perde a oportunidade de um argumento não ser utilizado; enquanto a ordem normal avalia os argumentos o mais tarde possível e, portanto, sempre vence se o argumento não for utilizado.

(O lado oposto é que a ordem do aplicativo tende a ser mais rápida na prática, porque é relativamente raro um argumento não ser usado; ao passo que é comum que um argumento seja usado várias vezes e, na ordem do aplicativo, o argumento é avaliado apenas uma vez. Normal order avalia o argumento quantas vezes for usado, seja 0, 1 ou várias vezes.)

Gilles 'SO- parar de ser mau'
fonte
KyNNy