Uma avaliação do cálculo lambda envolvendo números da Igreja

10

Entendo que um numeral da Igreja parece com (... n vezes ...) . Isso significa nada mais do que "a função aplicada vezes à função ". λ s . λ z . s scnλs.λz.ss n zszsnz

Uma definição possível da função é a seguinte: . Olhando para o corpo, entendo a lógica por trás da função. No entanto, quando começo a avaliar, fico preso. Vou ilustrá-lo com um exemplo:t i m e s = λ m . λ n . λ s . mtimestimes=λm.λn.λs.m(ns)

(λm.λn.λs.m(ns))(λs.λz.ssz)(λs.λz.sssz)λs.(λs.λz.ssz)((λs.λz.sssz)s))λs.(λs.λz.ssz)(λz.sssz)λs.λz.(λz.sssz)(λz.sssz)z

Agora, nessa situação, se eu aplicar pela primeira vez , chego ao resultado desejado. No entanto, se eu aplicar primeiro, como devo, porque o aplicativo é associativo da esquerda, recebo um resultado errado:( λ z . s(λz.sssz)z(λz.sssz)(λz.sssz)

λs.λz.(λz.sssz)(λz.sssz)zλs.λz.(sss(λz.sssz))z

Não posso mais reduzir isso. O que estou fazendo de errado? O resultado deve serλs.λz.ssssssz

codd
fonte
Os números da Igreja no seu período inicial não estão corretos. 2 é representado por , não . λ s . λ z . s s zλs.λz.s(sz)λs.λz.ssz
Uday Reddy

Respostas:

7

Eu acho que sua redução está correta (eu só olhei para ela, no entanto). No final, você não pode aplicar a , isso nunca aparece no termo. é , não . Funções no cálculo lambda usam um único argumento; elas são efetivamente curry : uma função de dois argumentos é implementada como uma função de um argumento que pega o primeiro argumento e retorna uma nova função de um argumento que pega o segundo argumento e retorna o resultado.z λ z . f f z λ z . ( f f ) z λ z . f ( f z )(λz.sssz)zλz.ffzλz.(ff)zλz.f(fz)

Você cometeu o mesmo erro ao definir os números da Igreja. O numeral da igreja para é baseado na composição de uma função vezes. “A função aplicada vezes à função ” . O que você escreveu é a função aplicadas vezes para a função e, finalmente, para , o que não me parece um termo útil.n s n z λ s . λ z . s ( s ( snnsnzs n - 1 s zλs.λz.s(s(sz)))sn1sz

( λ m n s . M ( n s ) ) ( λ s z . S ( s2×3 é assim . Vou deixar você verificar se ele se reduz a .λ s z . s ( s ( s ( s ( s ( s(λmns.m(ns))(λsz.s(sz))(λsz.s(s(sz)))λsz.s(s(s(s(s(sz)))))

Gilles 'SO- parar de ser mau'
fonte
Quanto ao seu parágrafo, você está certo e eu estava ciente disso. Apenas me impressionou que a aplicação associativa correta produziu o resultado certo. Quanto ao segundo parágrafo: você está certo. Não usar chaves foi errado da minha parte, novamente por causa da associatividade esquerda do aplicativo. Agora vou reduzir tudo novamente e ver se minha falta de aparelho causou meu erro!
Codd #
Sim. Você notou que minha notação implicava uma ordem incorreta de aplicação resolvida o problema! Aceitando sua resposta.
Codd #