Qual è il contributo del calcolo lambda al campo della teoria del calcolo?


85

Sto solo leggendo il calcolo lambda per "conoscerlo". Lo vedo come una forma alternativa di calcolo rispetto alla Macchina di Turing. È un modo interessante di fare le cose con funzioni / riduzioni (parlando rozzamente). Alcune domande continuano a tormentarmi:

  • Qual è il punto del calcolo lambda? Perché passare attraverso tutte queste funzioni / riduzioni? Qual è lo scopo?
  • Di conseguenza, mi chiedo: cosa ha fatto esattamente il calcolo lambda per far avanzare la teoria del CS? Quali erano i suoi contributi che mi avrebbero permesso di avere un momento "aha" per capire la necessità della sua esistenza?
  • Perché il calcolo lambda non è trattato nei testi sulla teoria degli automi? Il percorso comune è passare attraverso vari automi, grammatiche, macchine di Turing e classi di complessità. Il calcolo lambda è incluso solo nel programma per i corsi di stile SICP (forse no?). Ma raramente ho visto che faceva parte del curriculum di base di CS. Ciò implica che non è poi così prezioso? Forse no e forse mi manca qualcosa qui?

Sono consapevole che i linguaggi di programmazione funzionale si basano sul calcolo lambda ma non lo considero un contributo valido, poiché è stato creato molto prima che avessimo i linguaggi di programmazione. Quindi, a che serve conoscere / comprendere il calcolo lambda, quali sono le sue applicazioni / i suoi contributi alla teoria?


6
Un insieme correlato di risposte spiega la differenza di potere tra -calculus e TM: cstheory.stackexchange.com/questions/1117/…λ
Suresh Venkat


5
In un certo senso, il suo contributo è stato quello di creare il campo. Non dimenticare che Church ha inventato prima il calcolo lambda, ma all'inizio non è stato visto come un modello universale di calcolo.
Dan Hulme,

Nei miei studi di base ho Functional Programmingdiscusso di Haskell e un po 'di Lisp. Il successore di quello fu Principles of Programming Languages, che usò ML e introdusse il calcolo lambda. Come mostrano alcune risposte, è proprio lì che appartiene il calcolo lambda: in una classe su linguaggi di programmazione, digitazione, ecc.
Shaz

questa domanda è una relazione simile tra TM e calcolo Lambda e discute anche la precedenza storica del calcolo Lambda
vzn

Risposte:


96

λ -calcolo ha due ruoli chiave.

  • È una semplice base matematica di comportamento computazionale sequenziale, funzionale e di ordine superiore.

  • È una rappresentazione di prove nella logica costruttiva.

Questa è anche conosciuta come corrispondenza Curry-Howard . Insieme, la doppia visione di -calculus come prova e come linguaggio di programmazione (sequenziale, funzionale, di ordine superiore), rafforzata dalla sensazione algebrica di -calculus (che non è condivisa dalle macchine di Turing), ha portato a enormi trasferimento tecnologico tra logica, basi della matematica e programmazione. Questo trasferimento è ancora in corso, ad esempio nella teoria dei tipi di omotopia . In particolare lo sviluppo dei linguaggi di programmazione in generale, e delle discipline di battitura in particolare, è inconcepibile senza λ λ λ λλλλ-calcolo. La maggior parte dei linguaggi di programmazione ha un certo grado di debito nei confronti di Lisp e ML (ad esempio, la raccolta dei rifiuti è stata inventata per Lisp), che sono i discendenti diretti del -calculus. Un secondo filone di lavoro fortemente influenzato da -calcolo sono assistenti prova interattiva .λλ

Bisogna sapere -calculus per essere un programmatore competente, o anche un teorico dell'informatica? No. Se non sei interessato a tipi, linguaggi di verifica e programmazione con funzionalità di ordine superiore, probabilmente è un modello di calcolo che non è molto utile per te. In particolare, se sei interessato alla teoria della complessità, allora -calculus non è probabilmente un modello ideale perché il passo di riduzione di base è potente: può crea un numero arbitrario di copie su , quindi λ ( λ x . M ) N β M [ N / x ] N β λ λ M N M Nλλ

(λx.M)NβM[N/x]
Nβè una nozione di base non realistica nella contabilizzazione del costo microscopico del calcolo. Penso che questo sia il motivo principale per cui la teoria A non è così innamorata di -calculus. Al contrario, le macchine di Turing non sono terribilmente ispiratrici per lo sviluppo del linguaggio di programmazione, perché non ci sono nozioni naturali sulla composizione della macchina, mentre con -calculus, se e sono programmi, lo è anche . Questa visione algebrica del calcolo si riferisce naturalmente ai linguaggi di programmazione utilizzati nella pratica e molto sviluppo del linguaggio può essere inteso come ricerca e indagine di nuovi operatori di composizione di programmi.λλMNMN

Per una panoramica enciclopedica della storia di -calculus vedi Storia di Lambda-calculus e Combinatory Logic di Cardone e Hindley .λ


8
Questa è una risposta molto bella
Suresh Venkat,

9
Per quanto riguarda l '"irrealismo" della riduzione : Beniamino Accattoli e Ugo Dal Lago hanno recentemente dimostrato un risultato sorprendente affermando che il numero di passi alla forma normale in qualsiasi strategia di riduzione standard (ad esempio, il più a sinistra verso l'esterno) è una complessità invariante misurare. Ciò significa che, anche se implementare la riduzione è costoso, contare il numero di riduzioni non è una misura di complessità non realistica (ad esempio, non influirebbe sulla definizione della classe ). β β PβββP
Damiano Mazza,

5
@DamianoMazza Poiché si tratta di un nuovo risultato, non avrebbe potuto essere influente nella storia della Teoria A. Inoltre, penso che questo potrebbe valere solo per alcune nozioni di riduzione. L'articolo di IIRC Asperti P = NP, fino alla condivisione mostra che P e NP collassano se si dispone di una strategia di riduzione 'ottimale' nel senso di J.-J. Levy.
Martin Berger,

6
@MartinBerger: sì, certo. Il mio commento aveva lo scopo di aggiungere informazioni sulla complessità della riduzione , per non "correggere" la tua affermazione sulla mancanza di influenza sulla Teoria A (che ho ripetuto nella mia risposta). A proposito, il risultato di Accattoli e Dal Lago vale per la consueta riduzione estrema a sinistra ( cfr. P.2 , c.2, l.11 del loro articolo). Ecco perché è così interessante (e degno di nota). Il risultato di Asperti riguarda, come dici tu, la riduzione ottimale di Lévy, che non è una strategia di riduzione della (in particolare, quella più a sinistra più esterna non è ottimale di Lévy). β ββββ
Damiano Mazza,

27

Penso che -calculus abbia contribuito in molti modi a questo campo, e contribuisce ancora ad esso. Seguono tre esempi e questo non è esaustivo. Dato che non sono uno specialista in -calculus, mi mancano sicuramente alcuni punti importanti.λλλ

  • In primo luogo, penso che avere diversi modelli di calcolo che risultino rappresentare esattamente lo stesso insieme di funzioni sia all'origine della tesi di Church-Turing , e -calculus ha svolto un ruolo importante, insieme alle macchine di Turing e -recursive funzioni.μλμ

  • In secondo luogo, per quanto riguarda il linguaggio di programmazione funzionale, non capisco come un contributo non valido : in sostanza, tutti i nostri modelli di calcolo sono stati inventati molto prima che accadesse qualcosa in Informatica! Così -calculus ha portato un'altra visione del calcolo, in un certo senso ortogonale alle macchine di Turing, che è molto fruttuosa nel campo dei linguaggi di programmazione (che fa parte del campo della teoria del calcolo).λ

  • Infine, e come esempio più specifico, penso alla complessità computazionale implicita che mira a caratterizzare le classi di complessità mediante linguaggi dedicati. I primi risultati come il Teorema di Bellantoni-Cook sono stati dichiarati in termini di funzioni ricorsive , ma i risultati più recenti usano il vocabolario e le tecniche di -calculus. Vedi questa breve introduzione alla complessità computazionale implicita per ulteriori informazioni e indicazioni, o gli atti dei seminari DICE .λμλ


20

A parte il ruolo fondamentale del -calculus, che è stato menzionato in tutte le altre risposte, vorrei aggiungere qualcosa suλ

Cosa fece esattamente il calcolo lambda per far avanzare la teoria del CS?

Credo che la teoria della concorrenza sia un campo del CS che è stato enormemente influenzato dalla visione compositiva menzionata da Martin Berger. Naturalmente, il -calculus stesso non è un linguaggio concorrente, ma il suo "spirito algebrico" permea la definizione e lo sviluppo dei moderni calcoli di processo . Penso che sia giusto dire che le algebre di processo sono discendenti del -calculus più di quanto lo siano degli automi e delle macchine di Turing e, in generale, la teoria della concorrenza non sarebbe quella che è oggi senza l'importazione di - calcolo.λ λλλλ

Oltre alla concorrenza, sono felice di vedere la complessità computazionale implicita (ICC) menzionata in una delle risposte (è un campo in cui sono coinvolto personalmente). Tuttavia, va detto che, finora, ICC non ha avuto alcun uso nella teoria CS al di fuori dei linguaggi di programmazione e, in modo molto limitato, della verifica del software. Questo è solo un esempio di una situazione più generale: la visione modulare, compositiva, altamente strutturata del calcolo alla base del calcolo e predominante in "Teoria B" sembra portare poca comprensione dei profondi problemi di interesse in "Teoria A" . Perché sia ​​così è per me un argomento di riflessione interessante e allo stesso tempo frustrante. (Vedi questa domanda per una discussione correlata).λ

(Come nota a margine , lasciatemi ricordare che, grazie alle sue profonde connessioni con la teoria delle prove (Curry-Howard), il -calculus ha applicazioni interessanti anche al di fuori di CS "proprio", in particolare nella teoria degli insiemi. alludendo ai recenti lavori sulla realizzabilità classica, un programma di ricerca sviluppato dai primi anni 2000 in poi da Jean-Louis Krivine (e da molte altre persone, come Alexandre Miquel, le lezioni trovate sulla sua pagina web sono un'ottima introduzione all'argomento). Dal punto di vista teorico-modello, la realizzabilità classica può essere vista come una generalizzazione "non commutativa" del forzante di Cohen, producendo modelli di teoria degli insiemi impossibili da ottenere con il forzante).λ


2
Un buon punto sulla teoria della concorrenza: lo sviluppo di tipi per sistemi interagenti, perseguito principalmente da K. Honda e dai suoi colleghi, riguarda in buona parte la riformulazione dei tipi per -calculi come tipi per sistemi interattivi. Il ponte chiave che fa funzionare tutto questo sono le funzioni di Milner come processi , che danno una traduzione da a . Ciò ha già portato a un trasferimento di tecnologia inversa: la maggior parte delle logiche Hoare per linguaggi di programmazione simil-ML sono nate come logiche per i frammenti digitati , e quindi respinte tramite la codifica di Milner. λ π πλλππ
Martin Berger,

5
Se potessi clonare me stesso, farei un duplicato per esaminare P / NP usando BLL e la realizzabilità. Le relazioni logiche sembrano non essere "prove naturali", la disciplina di tipo lineare garantisce che non si possa relativizzare, e i teoremi di completezza del tempo polivalente di BLL sembrano farti evitare di preoccuparti se ci sono o meno classi di algoritmi che ti sei perso. La relazione tra linearità e teoria della rappresentazione suggerisce anche connessioni con GCT. Suppongo che tutto ciò sia il motivo per cui sei stuzzicato e frustrato, però. :)
Neel Krishnaswami il

1
Ehi @NeelKrishnaswami potresti indicarmi il materiale di lettura che collega BLL (logica lineare limitata) e prove naturali?
Martin Berger,

Riguardo a B vs. A: lambda-calculus consiste solo nel strutturare meglio gli stessi calcoli, ma non può, ad esempio, produrre algoritmi migliori. Tramite l'eliminazione del taglio e la proprietà dei sottformula sul risultato, qualsiasi programma con un tipo di primo ordine può essere scritto senza funzioni di prima classe. Ma l'eliminazione del taglio corrisponde al codice di duplicazione: quindi ritroviamo che non hai bisogno di funzioni di ordine superiore se sei disposto a fare abbastanza copia-incolla. (La defunzionalizzazione di Reynolds ti consente di evitare anche il copia-incolla, ma è una trasformazione globale, quindi è meglio lasciarlo a un compilatore).
Blaisorblade,

Aneddoticamente, il mio commento è motivato dalla programmazione con un algoritmo - è fantastico, ma sembra astrarre molto meno di quanto ritenga desiderabile. Non pretendo che sia generale, ma sostengo che l'astrazione nel codice spesso non è necessaria / enfatizzata durante la scrittura di algoritmi. (Considera quante implementazioni di quicksort incorporano la funzione di partizione - lo trovo inaccettabile).
Blaisorblade,

13

Le tue domande possono essere affrontate da molte parti. Vorrei lasciare gli aspetti storici e filosofici dalla parte e affrontare la tua domanda principale, che ritengo essere questa:

Qual è il punto del calcolo lambda? Perché passare attraverso tutte queste funzioni / riduzioni?

Qual è il punto dell'algebra booleana, o dell'algebra relazionale, della logica del primo ordine o della teoria dei tipi, o di qualche altro formalismo / teoria matematica? La risposta è che non hanno uno scopo intrinseco per loro, anche se i loro progettisti li hanno creati per uno scopo o per un altro. Leibniz, quando erigeva le basi dell'algebra booleana, aveva in mente un certo progetto filosofico ; Boole lo studiò per le sue ragioni. Anche il lavoro di de Morgan sull'Algebra relazionale è stato motivato da vari suoi progetti; Peirce e Frege avevano le proprie motivazioni per la creazione della logica moderna.

Il punto è: qualunque sia la ragione che la Chiesa potrebbe aver avuto durante la creazione del calcolo lambda, il punto del calcolo lambda varia da un praticante all'altro.

  • Per qualcuno è una notazione conveniente per parlare di calcoli; un'alternativa alle macchine di Turing e così via.

  • Per un altro è una solida base matematica su cui costruire un linguaggio di programmazione più sofisticato (ad esempio McCarthy, Stanley).

  • Per una terza persona è uno strumento rigoroso per fornire la semantica dei linguaggi naturali e di programmazione (ad esempio Montague, Fitch, Kratzer).

Penso che il calcolo Lambda sia un linguaggio formale che vale la pena studiare per se stesso. Puoi imparare il fatto che nel calcolo lambda non tipizzato abbiamo queste piccole bestie chiamate "combinatori a Y" e come ci aiutano a definire le funzioni ricorsive e a rendere la prova dell'indecidibilità così elegante e semplice. Puoi imparare il fatto sorprendente che esiste una corrispondenza intima tra il calcolo lambda semplicemente tipizzato e un tipo di logica intuizionistica . Ci sono molti altri argomenti interessanti da esplorare (ad esempio, come dovremmo dare la semantica del calcolo lambda? Come possiamo trasformare il calcolo lambda in un sistema deduttivo come FOL?)


Dai un'occhiata a Hindley & Seldin's Introduction to Combinators e λ – Calculus per un'introduzione. La Lambda Calculus di Barendregt è la bibbia, quindi se sei appassionato di Hindley & Seldin, ci sono molti argomenti sia di natura semantica che sintattica da esplorare.


6
Non sto comprando questo argomento "per se stesso". Il punto di un formalismo matematico è chiarire la nostra comprensione di alcuni concetti. Ciò che viene chiarito può svilupparsi nel tempo, ma a meno che un formalismo non ci aiuti a pensare più chiaramente a qualche idea, di solito si estingue. In questo senso è valido sapere come fa il calcolo lambda a chiarire il concetto di calcolo in un modo che non è compreso nelle TM.
Sasho Nikolov,

1
Penso che si possa studiare il calcolo lambda senza mai pensare alla riduzione e alla sostituzione come calcolo. Se ho ragione e questo è effettivamente possibile, allora possiamo avere interesse nel calcolo lambda anche se non ci interessa affatto il calcolo. Ma grazie per il tuo commento; Proverò a modificare la mia risposta di conseguenza non appena ne avrò la possibilità.
Hunan Rostomyan,

@SashoNikolov - "in un modo che non rientra nelle TM." Per definizione, ciò è impossibile, poiché LC e TM sono equivalenti. Tutto ciò che puoi esprimere o dimostrare con l'uno, puoi farlo con l'altro (e viceversa). Quindi si rendono reciprocamente ridondanti (come fanno entrambi con la teoria ricorsiva generale, un altro formalismo equivalente alla MT). Ciò significa che dovremmo buttare via tutti i sistemi equivalenti alla TM ma la stessa TM? Non lo direi, poiché a volte le cose sono più facili da esprimere in LC rispetto a TM o viceversa. È solo un altro modo di parlare della calcolabilità.
Gabriel L.

1
@GabrielL. Se leggi l'intera frase, si dice "in che modo il calcolo lambda chiarisce il concetto di calcolo in un modo che non è compreso nelle TM". Due definizioni matematiche formalmente equivalenti possono ancora chiarire lo stesso concetto di base in modi diversi e complementari. Il mio commento significava che è ragionevole chiedersi quale chiarezza si ottiene esprimendo la calcolabilità in termini di calcolo lambda, piuttosto che in termini di TM. Non si tratta affatto di equivalenza formale.
Sasho Nikolov,

Capito - riuscito a perdere la parola chiave lì in qualche modo. Grazie per la risposta.
Gabriel L.

12

Turing ha sostenuto che la matematica può essere ridotta a una combinazione di simboli di lettura / scrittura, scelti da un set finito, e passando da un numero finito di "stati" mentali. Lo reificò nelle sue Macchine di Turing, dove i simboli sono registrati in celle su un nastro e un automa tiene traccia dello stato.

Tuttavia, le macchine di Turing non sono una prova costruttiva di questa riduzione. Ha sostenuto che qualsiasi "procedura efficace" può essere implementata da alcune macchine di Turing e ha mostrato che una macchina di Turing universale può implementare tutte quelle altre macchine, ma in realtà non ha fornito un set di simboli, stati e regole di aggiornamento che implementano la matematica nel modo in cui ha discusso. In altre parole, non ha proposto una "macchina di Turing standard", con un set standard di simboli che possiamo usare per scrivere la nostra matematica.

Lambda Calculus, d'altra parte, è proprio questo. La Chiesa stava specificamente cercando di unificare le notazioni usate per scrivere la nostra matematica. Una volta dimostrato che LC e TM sono equivalenti, potremmo usare LC come la nostra "macchina di Turing standard" e tutti sarebbero in grado di leggere i nostri programmi (beh, in teoria;)).

Ora, potremmo chiederci perché trattare LC come un primitivo, piuttosto che come un dialetto TM? La risposta è che la semantica di LC è denotazionale : i termini LC hanno un significato "intrinseco". Ci sono numeri della Chiesa, ci sono funzioni per addizione, moltiplicazione, ricorsione, ecc. Questo rende LC molto ben allineato con il modo in cui viene praticata la matematica (formale), motivo per cui molti algoritmi (funzionali) sono ancora presentati direttamente in LC.

D'altra parte, la semantica dei programmi TM è operativa : il significato è definito come il comportamento della macchina. In questo senso, non possiamo ritagliare qualche sezione del nastro e dire "questa è aggiunta", perché dipende dal contesto. Il comportamento della macchina, quando colpisce quella sezione di nastro, dipende dallo stato della macchina, dalle lunghezze / offset / ecc. degli argomenti, quanto nastro verrà utilizzato per il risultato, se qualsiasi operazione precedente ha corrotto quella sezione di nastro, ecc. Questo è un modo orribile di lavorare ("Nessuno vuole programmare una macchina di Turing"), ecco perché molti algoritmi (imperativi) sono presentati come pseudocodici.


5

altre risposte sono buone, ecco un ulteriore angolo / motivo di considerazione che si intreccia con gli altri, ma potrebbe essere ancora più definitivo, tuttavia potrebbe essere più difficile tenere a mente chiaramente poiché le vecchie origini si perdono un po 'nelle sabbie del tempo:

precedenza storica!

Il calcolo lambda fu introdotto almeno nel 1932 nel seguente riferimento:

  • A. Church, "Una serie di postulati per la fondazione della logica", Annals of Mathematics, Serie 2, 33: 346–366 (1932).

la Turing Machine fu introdotta nel 1936 , quindi Lambda Calculus precede la comparsa della TM di diversi anni!

  • Turing, AM (1936). "Su numeri calcolabili, con un'applicazione al problema di Entscheidungs". Atti della London Mathematical Society. 2 (1937) 42: 230–265. doi: 10,1112 / PLMS / s2-42.1.230

quindi, in altre parole, una risposta di base è che Lambda Calculus è in molti modi il sistema legacy finale di TCS. è ancora nello stesso modo in cui Cobol è anche se non ci sono molti nuovi sviluppi nella lingua! sembra essere il primo sistema di calcolo di Turing Complete introdotto e addirittura precede l'idea fondamentale di Turing Completezza. fu solo successivamente un'analisi retrospettiva a dimostrare che Lambda Calculus, macchine di Turing e il problema della corrispondenza post erano equivalenti e introdussero il concetto di equivalenza di Turing e la tesi Church-Turing .

Il calcolo lambda è semplicemente il modo di studiare il calcolo da un pov incentrato sulla logica più in termini di rappresentarlo come teoremi matematici e derivazioni di formule logiche eccetera. mostra anche la profonda relazione tra informatica e ricorsione e l'ulteriore stretto accoppiamento con l'induzione matematica .

questo è un aspetto piuttosto notevole perché suggerisce che in molti modi le origini (almeno teoriche ) dell'informatica erano fondamentalmente in logica / matematica , una tesi avanzata / ampliata in dettaglio da Davis nel suo libro Engines of Logic / Mathematicians e le origini di il computer . (ovviamente le origini e il ruolo fondamentale dell'algebra booleana rafforzano ulteriormente tale quadro storico concettuale).

quindi, drammaticamente, si potrebbe persino dire che il calcolo Lambda è un po 'come una macchina del tempo pedagogica per esplorare le origini dell'informatica!


1
Inoltre, il calcolo di Lambda sembra essere stato fortemente influenzato da Principia matematica di Whitehead / Russell, che è stata anche una delle principali fonti di ispirazione per Godels . alcune di queste ricerche sono state ispirate anche dal decimo problema di Hilberts alla fine del secolo, che ha richiesto una soluzione algoritmica prima che "algoritmo" fosse definito (matematicamente) con precisione, e in effetti quella ricerca è in gran parte ciò che porta alla successiva definizione tecnica precisa.
vzn

btw / chiarimento / ii, in realtà erano i sistemi canonici post che sono stati studiati prima per posta e apparentemente il più semplice problema di corrispondenza post è un caso speciale. inoltre fu Kleene che fu determinante nello sviluppo del concetto di completezza di Turing (non nec sotto quel nome) aiutando a provare tutti e 3 i principali sistemi intercambiabili / equivalenti (TM, Lambda Calculus, Post canonical system).
vzn

vedi anche Storia della tesi di Church-Turing wikipedia che traccia molti dettagli / interrelazioni
storiche

4
Sto facendo fatica a non offendermi al confronto Cobol.
Neil Toronto,

-2

Mi sono appena imbattuto in questo post e nonostante il mio post sia piuttosto tardi (anno!), Ho pensato che forse il mio "valore in denaro" potrebbe essere di qualche utilità.

Mentre studiavo materia all'università, ho avuto un pensiero simile sull'argomento; così, ho posto la domanda sul "perché" al docente e la risposta è stata: "compilatori". Non appena lo ha menzionato, il potere alla base della riduzione e l'arte di valutare il modo migliore per manipolarla improvvisamente hanno fatto tutto il motivo per cui era ed è ancora uno strumento potenzialmente utile.

Bene, per così dire è stato il mio momento "aha".

A mio avviso, spesso consideriamo utili linguaggi, modelli, automi, complessità algoritmica ecc. Di alto livello perché possiamo metterli in relazione con il "compito" da svolgere; mentre il calcolo della lamdba sembra un po 'troppo astratto. Tuttavia, ci sono ancora quelli là fuori che lavorano con le lingue a basso livello - e immagino che il calcolo lambda, il calcolo degli oggetti e altre formalizzazioni correlate li abbiano aiutati a comprendere e forse sviluppare nuove teorie e tecnologie dalle quali il programmatore medio può quindi beneficiare. In effetti, probabilmente non è un modulo centrale per quel motivo, ma (per i motivi che ho affermato) ci saranno pochi - oltre agli accademici - che potrebbero trovarlo parte integrante del loro percorso di carriera scelto nell'informatica.


Qual è stata la "aha" sui compilatori ?
Dottorato di ricerca

Il tuo ultimo paragrafo sembra del tutto speculativo e non spieghi mai perché l'unica parola "compilatori" risponda alla domanda.
David Richerby,

@PhD: la riduzione e la sostituzione beta non vengono utilizzate durante l'esecuzione dei programmi, ma vengono utilizzate all'interno di ottimizzatori compilatori. Questa non è la principale importanza del lambda-calcolo, ma è un'applicazione molto concreta.
Blaisorblade,
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.