Entrada e saída como numerais da igreja .
00000000 01011111 01100101 11101101 0
No cálculo lambda , é λ m . λ n . λ f . λ x . m f ( n f x ).
Índice de De Bruijn : λ λ λ λ 4 2 (3 2 1)
O cálculo lambda é uma maneira concisa de descrever um mapeamento (função).
Por exemplo, esta tarefa pode ser escrita como λ x . λ y . x + y
O ponto a ser observado é que isso não é uma lambda (função) que recebe dois argumentos. Este é realmente um lambda aninhado. No entanto, ele se comporta como um lambda, que recebe dois argumentos e pode ser descrito informalmente como tal. Todo lambda formalmente leva apenas um argumento.
Por exemplo, se aplicarmos este lambda a 3 e 4:
(λ x . λ y . x + y ) 3 4 ≡ (λ y . 3 + y ) 4 ≡ 3 + 4 = 7
Portanto, o primeiro lambda realmente retorna outro lambda.
Os numerais da igreja são uma maneira de acabar com os sinais extras, deixando apenas símbolos e variáveis lambda.
Cada número no sistema da Igreja é na verdade um lambda que especifica quantas vezes a função é aplicada a um item.
Deixe a função ser f e o item seja x .
Portanto, o número 1 corresponderia a λ f . λ x . f x , o que significa aplicar f a x exatamente uma vez.
O número 3, por exemplo, seria λ f . λ x . f ( f ( f x )), o que significa aplicar f a x exatamente três vezes.
Portanto, para adicionar dois números da Igreja (digamos, m e n ) juntos, é o mesmo que aplicar f a x , m + n vezes.
Podemos observar que é o mesmo que aplicar primeiro f a x , n vezes e depois aplicar f ao item resultante m vezes.
Por exemplo, 2 significaria f(f(x))
e 3 significaria f(f(f(x)))
, então 2 + 3 seria f(f(f(f(f(x)))))
.
Para aplicar f a x , n vezes, temos n f x .
Você pode visualizar m e n como funções que recebem dois argumentos, informalmente.
Em seguida, aplicamos f novamente a esse item resultante, m vezes: m f ( n f x ).
Em seguida, adicionamos de volta o padrão para obter λ m . λ n . λ f . λ x . m f ( n f x ).
Agora, temos que convertê-lo para o índice De Bruijn .
Primeiro, contamos a "distância relativa" entre cada variável para a declaração lambda. Por exemplo, o m teria uma distância de 4, porque é declarado 4 lambdas "atrás". Da mesma forma, n teria uma distância de 3, f teria uma distância de 2 e x teria uma distância de 1.
Então, escrevemos como esta forma intermediária: λ m . λ n . λ f . λ x . 4 2 (3 2 1)
Em seguida, removemos as declarações da variável, deixando-nos com: λ λ λ λ 4 2 (3 2 1)
Agora, nós o convertemos em cálculo lambda binário .
As regras são:
- λ se torna
00
.
- m n (agrupamento) se torna
01 m n
.
- números i se torna
1
i vezes + 0
, por exemplo 4 se torna 11110
.
λ λ λ λ 4 2 (3 2 1)
≡ λ λ λ λ 11110
110
( 1110
110
10
)
≡ λ λ λ λ 11110
110
0101 111011010
≡ λ λ λ λ 0101
111101100101111011010
≡ 00
00
00
00
0101
111101100101 111011010
≡ 000000000101111101100101111011010