Cosa rende rilevante il calcolo lambda per lo studio?


10

Il prossimo autunno inizierò un corso di informatica, ma non riesco davvero a capire il calcolo λ nel contesto della programmazione funzionale. Potrei interpretare male tutto questo, ma sulla base di questa definizione della Stanford Encyclopedia of Philosophy, è solo un'altra notazione per le funzioni.

Se è solo questo, perché è vantaggioso utilizzare λ-calculus su normali notazioni di funzioni per calcolare il tempo di esecuzione dell'algoritmo?


5
Non è "solo un'altra notazione per funzioni" ma "la prima notazione per funzioni".
Andrej Bauer,

Grazie per il suggerimento, @Kaveh. Lo terrò a mente per i post futuri, tuttavia la risposta di mhelvens è eccellente, quindi non è necessario un crosspost.

È un corpo formalmente definito di oggetti. Non vedo quale sia il tuo esatto problema.
Raffaello

Non ho davvero capito la terminologia o il motivo per cui le cose sono state fatte vengono fatte nella programmazione funzionale fino a quando non ho imparato a conoscere il calcolo lambda. Rende i costrutti software molto meno arbitrari.
dansalmo,

Risposte:


13

In informatica vogliamo analizzare e comprendere il codice sorgente con rigore matematico. Questo è l'unico modo per dimostrare proprietà interessanti (come la risoluzione) con assoluta certezza. Per questo abbiamo bisogno di una lingua con un significato molto ben definito per ogni costrutto.

In teoria questo potrebbe essere qualsiasi linguaggio con una buona semantica formale . Ma per rendere le cose meno complicate e meno soggette a errori, è meglio usare un linguaggio il più semplice possibile ma ancora in grado di esprimere qualsiasi programma (cioè Turing è completo ). Per ragionare sul codice imperativo, ci sono macchine di Turing . Ma per ragionare sulla programmazione funzionale, c'è il calcolo .λ

Il calcolo di base è come un linguaggio di programmazione funzionale, ma con un sacco di "bagaglio" estratto. Non è importante che questa sia una lingua piacevole in cui scrivere effettivamente i programmi, né che sia una lingua efficiente. Solo che è semplice ed espressivo. Ad esempio, non abbiamo bisogno di loop, perché possiamo simularli con la ricorsione. E non abbiamo bisogno di funzioni con più parametri, poiché possiamo simularle con Currying .λ

Ora, ad un certo punto, potresti voler dimostrare le proprietà dei costrutti che non fanno parte del calcolo base (non tipizzato) . Ecco perché nel corso degli anni gli informatici lo hanno esteso in diverse direzioni. Ad esempio, per ragionare sui sistemi di tipi ci sono molte varianti di typedλ -calculiλ.


3
imo, alcune scienze informatiche potrebbero riguardare la comprensione del codice sorgente, ma dire che ciò è vero in generale suona come dire che la fisica significa capire i razzi con rigore matematico. l'informatica riguarda il calcolo. Una denuncia correlato è che l'efficienza della lingua non importa se si vuole studiare l'efficienza e il codice sorgente non ben formato. In questo senso, probabilmente è meglio pensare alle TM come a un modo di pensare all'efficienza piuttosto che a un modello di linguaggi imperativi (e per entrambi gli scopi la parola RAM potrebbe essere una scelta migliore)
Sasho Nikolov

tra quello che ho scritto sopra non significa che non mi piace la tua risposta :)
Sasho Nikolov

Concordato. ;-) Risolto.
mhelvens,

1
Le macchine di Turing sono atroci a ragionare sul codice imperativo, è molto più facile da usare un linguaggio giocattolo come un semplice , mentre la lingua tipo. stackoverflow.com/questions/507310/the-while-language . Le macchine di Turing rimangono molto utili per approfondimenti nella teoria della complessità.
cody,

1

λλ

Se è solo questo, perché è vantaggioso utilizzare λ-calculus su normali notazioni di funzioni per calcolare il tempo di esecuzione dell'algoritmo?

ci sono molti vantaggi nell'usare Lisp o la programmazione funzionale e il calcolo del tempo di esecuzione dell'algoritmo è solo una possibilità (anche se sarebbe utile se tu citassi un riferimento per questo). poiché è già in notazione funzionale a volte determinare le formule per il tempo di esecuzione tramite relazioni di induzione o di ricorrenza può avere una relazione più forte o più ovvia con il codice originale. anche altri tipi di analisi dell'algoritmo sono semplificati.

un altro vantaggio principale è la semplicità sintattica. i parser per altre lingue sono molto complessi ma i parser Lisp sono molto semplici. quindi Lisp è un ottimo linguaggio per studiare la teoria dell'analisi.

un altro aspetto chiave è l'analisi del software più da un punto di vista logico o matematico prospettiva / vista piuttosto che da una prospettiva "informatica".

come sottolinea l'altra risposta, Lisp riguarda la ricorsione invece dell'iterazione e la ricorsione è molto al centro della CS.

λ -view" e dettagli sono disponibili in [1], un riferimento online e semifama gratuito.

[1] Struttura e interpretazione dei programmi per computer, di Abelson & Sussman

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.