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 ss n z
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 . m
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
Não posso mais reduzir isso. O que estou fazendo de errado? O resultado deve ser
Respostas:
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 ( … sn n s n z s n - 1 s zλs.λz.s(s(…sz)…)) s n−1 s z
( λ 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)))))
fonte