Che cos'è essenzialmente il calcolo λ?


11

Ho quella che definirei una domanda filosofica su λ-calculus.

Quando esplori il calcolo λ rimarrai sorpreso nel vedere tutte le cose che puoi fare lì. È possibile definire numeri interi, operazioni aritmetiche, valori booleani, istruzioni if-then-else, loop, funzioni ricorsive, ecc. Credo che sia stato dimostrato computazionalmente completo.

D'altra parte, se consideri cosa puoi fare con le funzioni in λ-calcolo, ti rendi conto che l'unica cosa che puoi fare è dargli una funzione e restituisce un'altra funzione. E quel processo non finisce mai.

Quindi, come puoi estrarre un risultato da un calcolo?

Supponiamo che il risultato di un'espressione sia la funzione f. Vuoi verificare se fè quello che ti aspettavi. Puoi testarlo, assumere una funzione che conosci, applicarla fe ricevere g. Ma per verificare che gsia corretto, ora è necessario verificare cosa gfa. E ricomincia da capo. Quindi, come puoi dire qualcosa f?

Mi sembra che puoi sostituire tutte le funzioni in λ-calcolo con una singola funzione, la funzione identità I = λx.x, e tutto funziona ancora come descritto in λ-calcolo. Il numero della Chiesa 3quando viene dato fe xritorna f(f(f(x))). Ma poiché fe xpuò essere solo I, ritorna I. Iapplicato a Ie Irestituisce anche I. Quindi Isoddisfa la definizione di 3. I "booleani" (λxy.x)e hanno (λxy.y)bisogno di 2 argomenti, che saranno Ie Icosì ritorneranno entrambi i booleani I. Ognuno equivale all'identità, anche se si comportano esattamente secondo le loro definizioni.

Quindi come fai la differenza? Come dimostrate che λ-calculus si occupa di più di una singola funzione?

Esiste un concetto di identità? Riesci a identificare immediatamente una funzione senza valutarla? Credo che sia stato dimostrato che non c'è modo di testare 2 funzioni per l'uguaglianza.

O λ-calcolo non riguarda le funzioni, ma la descrizione formale di ciò che fanno? Ciò significherebbe che le espressioni λ non solo definiscono ciò che fanno le funzioni, ma sono anche i dati che le funzioni manipolano. Così, quando si scrive A B, non si applica Aa B, ma si applica la funzione descritta dalla stringa Adi definizione formale di una funzione contenuta nel Btornare un'altra definizione formale.

Cosa sta realmente succedendo in λ-calculus? Di quali oggetti matematici si occupa?


Azione supplementare:

OK, dalla risposta sotto sembra che λ-calcolo non sia tanto sulle funzioni in senso matematico, ma sul sottoinsieme di funzioni che possono essere espresse come espressioni λ. O ancora di più sulla manipolazione delle espressioni λ.


2
Potresti riformulare la domanda finale con qualcosa di meno orientato all'opinione? Dovrebbe esserci una solida risposta non supponente per questo.
Telastyn,

Dalla mia educazione, il calcolo λ esiste solo per farmi male al cervello. Non sono ancora sicuro di come sia riuscito a superare intatta quella classe.

Risposte:


9

È davvero impossibile determinare l'equivalenza semantica dei termini di calcolo lambda. Questa è un'applicazione del teorema di Rice. Tuttavia, è facile confrontare i termini sintatticamente , ovvero verificare se hanno la stessa struttura esatta (equivalentemente, se la loro "rappresentazione di stringa" è la stessa). Questo è davvero tutto ciò che serve per ottenere risultati.

Ad esempio, per calcolare le funzioni n = f(i)dai naturali ai naturali, devi fornire la codifica della chiesa icome parametro alla tua funzione di calcolo lambda, applicare le regole di riduzione fino a quando non ti fermi e ispezionare il termine risultante. Se corrisponde alla struttura dei numeri delle chiese, estrai il numero nche codifica. Questo è il tuo risultato. Se il termine risultante non sembra un numero di chiesa o la riduzione non si interrompe, la funzione non è definita in i.

I termini tirano effettivamente il doppio dovere come "codice" e "dati". Non è niente di speciale: il nastro di una macchina di Turing (una stringa sopra un po 'di alfabeto) può essere --- e spesso viene --- interpretato come una codifica di una macchina di Turing o di un suo aspetto. Allo stesso modo, i bit nella memoria principale di una macchina von Neumann possono essere una codifica di un programma o una codifica di qualcos'altro. O anche entrambi contemporaneamente. È solo la "prospettiva predefinita" che differisce.


L'espressione del risultato di un calcolo che coinvolge i numeri della Chiesa si risolverà sempre nella forma canonica come (λfx.f (f (fx)))? Oppure puoi ottenere espressioni equivalenti diverse dello stesso numero?
Florian F,

@FlorianF Sono quasi certo che esistano termini non canonici (fino all'equivalenza alfa), ma in tal caso, possono essere evitati con un'attenta costruzione del programma.
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.