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)…))sn−1sz

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.