Entrada y salida como números de iglesia .
00000000 01011111 01100101 11101101 0
En el cálculo lambda , es λ m . λ n . λ f . λ x . m f ( n f x ).
Índice de Bruijn : λ λ λ λ 4 2 (3 2 1)
El cálculo de Lambda es una forma concisa de describir un mapeo (función).
Por ejemplo, esta tarea se puede escribir como λ x . λ y . x + y
Lo que hay que tener en cuenta es que esta no es una lambda (función) que toma dos argumentos. Esto es en realidad una lambda anidada. Sin embargo, se comporta como una lambda que toma dos argumentos, por lo que puede describirse informalmente como tal. Cada lambda formalmente solo toma un argumento.
Por ejemplo, si aplicamos este lambda a 3 y 4:
(λ x . λ y . x + y ) 3 4 ≡ (λ y . 3 + y ) 4 ≡ 3 + 4 = 7
Entonces, la primera lambda en realidad devuelve otra lambda.
Los números de la iglesia son una forma de eliminar los signos adicionales, dejando solo los símbolos y variables lambda.
Cada número en el sistema de la Iglesia es en realidad una lambda que especifica cuántas veces se aplica la función a un elemento.
Deje que la función sea fy el elemento sea x .
Entonces, el número 1 correspondería a λ f . λ x . f x , lo que significa aplicar f a x exactamente una vez.
El número 3, por ejemplo, sería λ f . λ x . f ( f ( f x )), lo que significa aplicar f a x exactamente tres veces.
Por lo tanto, añadir dos números Church (digamos, m y n ) juntos, es lo mismo que aplicar f a x , m + n veces.
Podemos observar que esto es lo mismo que aplicar primero f a x , n veces, y luego aplicar f al elemento resultante m veces.
Por ejemplo, 2 significaría f(f(x))
y 3 significaría f(f(f(x)))
, entonces 2 + 3 sería f(f(f(f(f(x)))))
.
Para aplicar f a x , n veces, tenemos n f x .
Puede ver m y n como funciones tomar dos argumentos, de manera informal.
Luego, aplicamos f nuevamente a este elemento resultante, m veces: m f ( n f x ).
Luego, volvemos a agregar el repetitivo para obtener λ m . λ n . λ f . λ x . m f ( n f x ).
Ahora, tenemos que convertirlo al índice De Bruijn .
En primer lugar, contamos la "distancia relativa" entre cada variable y la declaración lambda. Por ejemplo, la m tendría una distancia de 4, porque se declara 4 lambdas "ago". Del mismo modo, la n tendría una distancia de 3, la f tendría una distancia de 2 y la x tendría una distancia de 1.
Entonces, lo escribimos como esta forma intermedia: λ m . λ n . λ f . λ x . 4 2 (3 2 1)
Luego, eliminamos las declaraciones de variables, dejándonos con: λ λ λ λ 4 2 (3 2 1)
Ahora, lo convertimos en cálculo lambda binario .
Las reglas son:
- λ se convierte
00
.
- m n (agrupación) se convierte en
01 m n
.
- números i se convierte en
1
i multiplicado por + 0
, por ejemplo, 4 se convierte en 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