Calcolo lambda al di fuori della programmazione funzionale?


21

Sono uno studente universitario e attualmente stiamo studiando Lambda Calculus. Tuttavia, faccio ancora fatica a capire esattamente perché questo mi sia utile. Mi rendo conto che se fai un sacco di programmazione funzionale potrebbe essere utile, tuttavia ritengo che non sia realmente necessario per l'apprendimento della programmazione funzionale, cosa ne pensi?

In secondo luogo, c'è qualche utilità per Lambda Calculus nel regno dell'informatica ma al di fuori dei linguaggi di programmazione funzionale?

Risposte:


15

Il calcolo lambda è fondamentale in logica, teoria delle categorie, teoria dei tipi, verifica formale, ... Fondamentalmente, tutto a che fare con la semantica del linguaggio di programmazione e la logica formale. È un formalismo così fondamentale che le persone che lavorano in questi campi non ne mettono nemmeno in dubbio il beneficio.

Penso che sia estremamente utile per comprendere la programmazione funzionale perché ti dà l'essenza della programmazione funzionale. Funzioni, applicazione, sostituzione. Sulla base di questo puoi costruire le tue abilità nel ragionamento su programmi funzionali e trasformazioni di essi. Le funzioni di ordine superiore sono un gioco da ragazzi.

Sicuramente potresti imparare la programmazione funzionale senza il calcolo lambda, ma non capiresti mai veramente la programmazione funzionale senza di essa.


Grazie mille per la tua risposta, Dave. Penso che la verifica formale sia ancora la ragione migliore, sul perché il calcolo lambda sia utile per me da imparare e, stranamente, farò un corso sulla verifica formale il prossimo semestre. Utilizzeresti anche il calcolo lambda per fare una verifica formale di un software scritto in qualsiasi lingua, ad esempio un imperativo o orientato agli oggetti?
Jacob,

1
Non è possibile utilizzare il calcolo lambda direttamente durante la verifica formale, ma verrà visualizzato nelle basi della verifica formale. La scrittura delle specifiche comporta spesso la scrittura in un linguaggio funzionale, anche per codice imperativo / OO.
Dave Clarke,

Ok, è interessante, grazie un sacco, ora ho un motivo in più per studiarlo. Sai se il calcolo lambda viene utilizzato per progettare linguaggi non funzionali (ai livelli inferiori)?
Jacob,

1
ALGOL. Scala. Alla fine, è difficile rispondere alla tua domanda. Il lambda-calcolo è diventato una parte della conoscenza comune per (la maggior parte) designer di linguaggi e influenza quindi la progettazione del linguaggio, anche se non viene esplicitamente utilizzato. Considera i blocchi in Smalltalk o Ruby, classi anonime in Java. Queste sono chiusure, che sono strettamente legate alle funzioni di ordine superiore nel calcolo lambda.
Dave Clarke,

Ok, grazie mille Dave, è molto apprezzato.
Jacob,

17

Stai chiedendo un'applicazione al di fuori dell'informatica e della logica. Ciò si trova facilmente, ad esempio nella topologia algebrica, è conveniente avere una categoria cartesiana di spazi chiusi, vedere la categoria conveniente di spazi topologici su nLab. Il linguaggio formale corrispondente alle categorie chiuse cartesiane è precisamente il -calculus. Permettetemi di illustrare con un esempio molto semplice come ciò sia utile.λ

Innanzitutto, come esercizio di riscaldamento, supponiamo che qualcuno ti chieda se la funzione definita da è differenziabile. In realtà non devi dimostrare che lo è, osservi semplicemente che è una composizione di funzioni differenziabili, quindi differenziabili. In altre parole, hai fatto una facile conclusione basata sulla forma della definizione. f ( x ) = x 2 e x + log ( 1 + x 2 )f:RRf(x)=x2ex+log(1+x2)

Ora per il vero esempio. Supponiamo che qualcuno ti chieda se la funzione definita da è continuo. Ancora una volta può rispondere immediatamente "sì" perché la funzione è definita usando -calculus e partendo da mappe continue , , , ecc.f:RRλ max sin

f(x)=(λf:C(R).xxf(1+t2)dt)(λy:R.max(x,sin(y+3))
λmaxsin

Varie estensioni del -calculus consentono di fare lo stesso tipo di cose in altre aree. Ad esempio, poiché un topos liscio è una categoria chiusa cartesiana, qualsiasi mappa definita usando il -calculus, a partire dalle derivate e dalla struttura ad anello dei reali (e se si desidera si può lanciare la funzione esponenziale) liscio. (In realtà, la spinta principale dei topos lisci è l'esistenza di infinitesimi nilpotenti che ti permettono di dire in modo significativo cose come "disettiamo un disco in triangoli isosceli infinitamente sottili".)λλλ


1
Grazie per la tua risposta elaborata. In realtà stavo cercando di trovare un uso per il calcolo lambda all'interno dell'informatica ma al di fuori della programmazione funzionale, mi scuso se non fosse chiaro. Ho cambiato la domanda per dirlo più chiaramente.
Jacob,

Ah, peccato, avrei scritto una risposta elaborata a riguardo.
Andrej Bauer,

Ci scusiamo per quello. Sentiti libero di aggiungere commenti se desideri aggiungere ulteriori informazioni :)
Jacob,

2
Penso che la domanda di Dave vada bene, non ho nulla da aggiungere. Se vuoi vedere quali cose eccitanti puoi fare con il -calculus, forse puoi dare un'occhiata ai funzionali impossibili. Ma come risposta generale, Dave è molto bravo. λ
Andrej Bauer,

7

Un modo di vedere -calculus è come un modello semplice e conciso di programmi di parametrizzazione. Parametri il codice in quasi tutti i linguaggi di programmazione che hanno funzioni, procedure o metodi e in qualsiasi linguaggio che abbia moduli o che consenta di parametrizzare i tipi. La parametrizzazione è una forma di riutilizzo. Poiché -calculus è così semplice, i punti in comune tra molti linguaggi di programmazione che consentono di parametrizzare il codice vengono alla ribalta in modo particolarmente chiaro.λλλ

È certamente possibile essere un ottimo programmatore senza conoscere -calculus, ma ti stai perdendo qualcosa di bello che è anche molto utile.λ


5

Microsoft LINQ (Language INtegrated Query) innesta le capacità di programmazione funzionale in linguaggi procedurali. Fa un uso esteso e abbastanza diretto di -calculus per districare le dipendenze e separare le parti dell'albero delle espressioni che possono essere delegate al server di database. Questa è un'applicazione estremamente pratica con un alto valore commerciale.λ

Ho scritto una piccola applicazione commerciale usando un linguaggio funzionale e posso assicurarti che, anche se vale la pena per accademici e ricercatori, sono meno utili commercialmente dei loro cugini procedurali. In realtà è una questione di cavalli per i corsi, e il più pratico di tutti è un linguaggio che può essere procedurale o funzionale come richiesto. Di conseguenza, le funzionalità funzionali che sono state introdotte (in C #) a supporto di LINQ, come -expressions, sono molto utilizzate al di fuori del contesto delle query del database.λ

Quindi, quando alla fine ti ritrovi costretto a fare cose sgarbate perché ti piacerebbe essere pagato, potresti trovare -calculus più utile di quanto ti aspettassi, anche se quasi sicuramente non userai un linguaggio funzionale.λ


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.