Input e output come numeri Church .
00000000 01011111 01100101 11101101 0
Nel calcolo lambda , è λ m . λ n . λ f . λ x . m f ( n f x ).
Indice di De Bruijn : λ λ λ λ 4 2 (3 2 1)
Il calcolo lambda è un modo conciso di descrivere una mappatura (funzione).
Ad esempio, questa attività può essere scritta come λ x . λ y . x + y
La cosa da notare è che questa non è una lambda (funzione) che accetta due argomenti. Questo è in realtà un lambda nidificato. Tuttavia, si comporta come un lambda che accetta due argomenti, quindi può essere descritto in modo informale come tale. Ogni lambda prende formalmente solo un argomento.
Ad esempio, se applichiamo questo lambda a 3 e 4:
(λ x . λ y . x + y ) 3 4 ≡ (λ y . 3 + y ) 4 ≡ 3 + 4 = 7
Quindi, la prima lambda in realtà restituisce un'altra lambda.
I numeri di chiesa sono un modo per eliminare i segni extra, lasciando solo simboli e variabili lambda.
Ogni numero nel sistema della Chiesa è in realtà un lambda che specifica quante volte la funzione viene applicata a un oggetto.
Lascia che la funzione sia f e che l'elemento sia x .
Quindi, il numero 1 corrisponderebbe a λ f . λ x . f x , che significa applicare f a x esattamente una volta.
Il numero 3, ad esempio, sarebbe λ f . λ x . f ( f ( f x )), che significa applicare f a x esattamente tre volte.
Pertanto, per aggiungere due numeri di Church (diciamo, m e n ) insieme, è lo stesso che applicare f a x , m + n volte.
Possiamo osservare che questo equivale a prima applicare f a x , n volte, quindi applicare f all'elemento risultante m volte.
Ad esempio, 2 significherebbe f(f(x))
e 3 significherebbe f(f(f(x)))
, quindi 2 + 3 sarebbe f(f(f(f(f(x)))))
.
Per applicare f a x , n volte, abbiamo n f x .
È possibile visualizzare m e n come funzioni che accettano due argomenti, in modo informale.
Quindi, applichiamo di nuovo f a questo elemento risultante, m volte: m f ( n f x ).
Quindi, aggiungiamo nuovamente la piastra della caldaia per ottenere λ m . λ n . λ f . λ x . m f ( n f x ).
Ora, dobbiamo convertirlo in indice De Bruijn .
Innanzitutto, contiamo la "distanza relativa" tra ciascuna variabile e la dichiarazione lambda. Ad esempio, la m avrebbe una distanza di 4, perché è dichiarata 4 lambdas "fa". Allo stesso modo, la n avrebbe una distanza di 3, la f avrebbe una distanza di 2 e la x avrebbe una distanza di 1.
Quindi, lo scriviamo come questa forma intermedia: λ m . λ n . λ f . λ x . 4 2 (3 2 1)
Quindi, rimuoviamo le dichiarazioni delle variabili, lasciandoci con: λ λ λ λ 4 2 (3 2 1)
Ora, lo convertiamo in calcolo lambda binario .
Le regole sono:
- λ diventa
00
.
- m n (raggruppamento) diventa
01 m n
.
- i numeri i diventano
1
i volte + 0
, ad esempio 4 diventa 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