Una valutazione del calcolo lambda che coinvolge numeri della Chiesa


10

Capisco che un numero di chiesa assomigli a (... n volte ...) . Questo significa altro che "la funzione applicate volte alla funzione ". λ s . λ z . s scnλs.λz.ss n zszsnz

Una possibile definizione della funzione è la seguente: . Guardando il corpo, capisco la logica dietro la funzione. Tuttavia, quando inizio a valutare, rimango bloccato. Lo illustrerò con un esempio: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

Ora in questa situazione, se per la prima volta applico , ottengo il risultato desiderato. Tuttavia, se applico primo, come dovrei perché l'applicazione è associativa da sinistra, ottengo un risultato sbagliato:( λ z .(λz.sssz)z(λz.sssz)(λz.sssz)

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

Non posso più ridurlo. Che cosa sto facendo di sbagliato? Il risultato dovrebbe essereλs.λz.ssssssz


I numeri della Chiesa nel tuo termine iniziale non sono corretti. 2 è rappresentato da , non . λ s . λ z . s s zλs.λz.s(sz)λs.λz.ssz
Uday Reddy,

Risposte:


7

Penso che la tua riduzione sia corretta (l'ho solo osservata, però). Alla fine, non puoi applicare a , questo non appare mai nel termine. λ z . f f z è λ z . ( f f ) z , non λ z . f ( f z ) . Le funzioni nel calcolo lambda accettano un singolo argomento; sono effettivamente curryz(λz.sssz)zλz.ffzλz.(ff)zλz.f(fz): una funzione a due argomenti viene implementata come una funzione a argomento singolo che accetta il primo argomento e restituisce una nuova funzione a argomento singolo che accetta il secondo argomento e restituisce il risultato.

nnsnzλs.λz.s(s(sz)))sn1sz

2×3(λmns.m(ns))(λsz.s(sz))(λsz.s(s(sz)))λsz.s(s(s(s(s(sz)))))


Per quanto riguarda il tuo paragrafo, hai ragione e ne ero consapevole. Mi ha solo colpito il fatto che l'applicazione giusta associativa ha prodotto il risultato giusto. Per quanto riguarda il secondo paragrafo: hai ragione. L'uso di nessuna parentesi graffa è stato errato da parte mia, sempre a causa dell'associatività sinistra dell'applicazione. Ridurrò di nuovo tutto ora e vedrò se la mia mancanza di parentesi graffe ha causato il mio errore!
codd

Lo ha fatto. Stai notando che la mia notazione implicava un ordine di applicazione errato risolto il problema! Accettare la tua risposta
codd
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.