Il calcolo lambda e la logica combinatoria sono uguali?


26

Attualmente sto leggendo " Lambda-Calculus and Combinators " di Hindley e Seldin. Non sono un esperto, ma mi sono sempre interessato al calcolo lambda a causa del coinvolgimento con la programmazione funzionale (a partire da Lisp e SICP, e ora con R e Haskell).

In " Binary Lambda Calculus and Combinatory Logic" , John Tromp afferma:

CL può essere visto come un sottoinsieme del calcolo lambda ... le teorie sono in gran parte le stesse, diventando equivalenti in presenza della regola dell'estensione.

In quali condizioni si userebbe la logica combinatoria invece del calcolo lambda ?

Eventuali riferimenti sarebbero apprezzati.


Dai un'occhiata a "Calcolo lambda: la sua sintassi e semantica" di HP Barendregt.
Kaveh,

Risposte:


15

Ciò che distingue la logica combinatoria è che è variabile libera. Ciò è talvolta utile in metamatematica e logica filosofica, dove lo stato delle variabili è difficile.

Può anche essere utile nelle implementazioni, poiché la gestione delle variabili può essere un mal di testa. Cfr., Ad esempio, Hughes, 1982, Super-combinatori: un nuovo metodo di implementazione per i linguaggi applicativi


3
La logica combinatoria non è più considerata utile nelle implementazioni e non è mai stata utilizzata perché "la gestione delle variabili può essere un mal di testa". Combinatori e varianti sono stati usati per implementare la riduzione dei grafici per le lingue pigre, ma oggigiorno Haskell (il linguaggio pigro più importante) usa tecniche molto più ragionevoli per implementare la riduzione dei grafici.
Blaisorblade,

Vedi ad esempio S. Peyton Jones, 1992, "Implementazione di linguaggi funzionali pigri su hardware di serie: la G-machine senza
tag senza spin

2
@Blaisorblade: Combinatori e varianti sono stati usati per implementare la riduzione dei grafici per linguaggi pigri - Fai attenzione: Haskell e ghc non sono gli stessi, e la letteratura contiene diversi Haskell basati su supercombinatori. Ma è vero, lo stato dell'arte nella programmazione funzionale ha trovato i vantaggi in termini di efficienza della gestione di ambienti che superano la sua complessità. Si vedono ancora i supercombinatori utilizzati, ad esempio, nella programmazione logica di ordine superiore, dove questo non è vero. I supercombinatori rimangono parte dell'inventario delle tecniche utilizzate nell'implementazione della programmazione di ordine superiore.
Charles Stewart,

I supercombinatori evitano solo le variabili libere, non quelle legate, quindi IMHO non possono essere considerati usi della logica combinatoria di per sé. Sono principalmente termini lambda speciali. Ci sono differenze molto minori tra supercombinatori, programmi sollevati da lambda (se ce ne sono, non sono sicuro) e l'implementazione di GHC (dove i puntatori da una chiusura alle sue variabili libere possono essere copiati dalla funzione host, grazie alla purezza). Detto questo, stavo anche pensando al recente compilatore di Utrecht Haskell, che è molto simile a GHC, ma IIRC usa il lambda-lifting; tuttavia, questo non è CL.
Blaisorblade,

Non sapevo di programmazione logica di ordine superiore - ho trovato questo documento su di esso: springerlink.com/content/t68777w270713p5n . Sfortunatamente, è improbabile che avrò tempo di leggerlo.
Blaisorblade,

4

Facendo riferimento al commento di John Tromp, voglio sottolineare che la logica combinatoria sembra molto diversa dal calcolo lambda. Poiché il tuo interesse deriva dalla programmazione funzionale, in realtà non vuoi sapere molto della logica combinatoria.

Il mio tutorial preferito sulla logica combinatoria è in questi appunti della Cambridge University.

Tuttavia, vengono introdotti per spiegare l'implementazione delle cosiddette lingue pigre (o applicative); come menzionato nel mio precedente commento, tali tecniche sono ormai superate.


Poiché i linguaggi combinatori non vengono più utilizzati per implementare linguaggi pigri / applicativi, quali sono le tecniche più avanzate ora? E c'è un nome / categoria per classificare queste tecniche?
CMCDragonkai

@CMCDragonkai Vedi i commenti a cstheory.stackexchange.com/a/306/989 per la discussione. La breve risposta pratica è "vedi documenti su cosa fa GHC": esistono una varietà di tecniche diverse (tra cui sia la macchina STG e ottimizzazioni come l'analisi di rigidità) che sono combinate insieme per rendere veloci i programmi pigri.
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.