TL; DR. La metamatematica dell'associazione è sottile : sembrano banali ma non lo sono - sia che tu abbia a che fare con logiche (di ordine superiore) o 𝜆-calcolo. Sono così sottili che le rappresentazioni vincolanti formano un campo di ricerca aperto, con una competizione ( la sfida POPLmark ) alcuni anni fa. Ci sono anche battute da parte di persone sul campo sulla complessità degli approcci al legame.
Quindi, se ti interessa la metamatematica (e la maggior parte dei matematici no), devi occuparti di rilegatura. Ma molti matematici possono tranquillamente trattare la formalizzazione del legame come se fosse un problema "fondamentale".
Un altro punto è che il legame era l'unico "nuovo" problema nei linguaggi con funzioni di ordine superiore, perché la teoria dei linguaggi con legame è solo algebra (per le costanti) + legame. I "Fondamenti dei linguaggi di programmazione" di Mitchell presentano effettivamente le cose in questo ordine ed è piuttosto illuminante.
Sono consapevole di come il suo lavoro abbia spianato la strada al calcolo λ e all'impatto di "esso" sull'informatica e sulla programmazione funzionale in generale. La mia domanda è principalmente rivolta al tempo "precedente" alla creazione di λ-calculus e "dopo" l'articolo di Schönfinkel.
Mi manca qualcosa, ma questa osservazione sembra non fare alcuna differenza. Legare nelle logiche di ordine superiore e legare nel calcolo λ sembrano difficili, quindi finché le persone si preoccupano delle logiche di ordine superiore, devono fare i conti con la rilegatura. Sono di parte usando i dimostratori di teoremi basati sull'isomorfismo di Curry-Howard che implementano la logica semplicemente implementando una teoria dei tipi (in cui i tipi sono formule e i programmi sono termini di prova), quindi mi occupo solo di legare una volta.
D'altra parte, IIRC, all'epoca in effetti pochi si interessavano del lavoro di Schönfinkel - in parte a causa del modo in cui (non) lo pubblicò - i documenti erano per lo più scritti da colleghi sulla base delle ricerche fatte (vedi qui , pagina 4) ; Curry ha quindi riscoperto la teoria in modo indipendente.
Avvertenza: non sono uno storico, ma uno studente di dottorato in PL, quindi la mia è una prospettiva moderna (e si spera accurata) sull'argomento.
MODIFICARE:
Perché è vincolante sottile, un po 'più concretamente
Ci sono due aspetti: in primo luogo, implementarlo è difficile. In secondo luogo, la metamatematica è la matematica della manipolazione delle prove: questa manipolazione è in genere automatica, ovvero è un algoritmo , quindi essenzialmente si affrontano tutte le difficoltà di implementazione, oltre a formulare prove su di esse. Di seguito fornisco esempi. Gli esempi hanno una prospettiva moderna: si tratta di prove effettivamente formalizzate. Tuttavia, alcune delle difficoltà si estenderebbero a prove manuali accurate, purché non si tradiscano i dettagli.
Ciò dimostra che Schönfinkel ha semplicemente fornito la prima soluzione a questo problema, ma questo era tutt'altro che definitivo.
L'implementazione è sottile a causa dell'ombra
Il problema di base nell'implementazione è l'ombra. Di solito non si riutilizza lo stesso nome per diverse variabili associate. Ma non puoi evitarlo nel calcolo lambda, almeno perché le funzioni (e le loro variabili associate) sono duplicate: riduce a . Questo non è ancora un problema, ma a partire da ti dà e poi : ora devi occuparti dell'ombreggiamento. Puoi evitarlo, a costo di complicare la regola della riduzione beta.( λ x . x ) 1 + ( λ x . x ) 2 ( λ f x . f ( f x ) ) ( λ g y . g y ) z ( λ g y . g y ) ( λ( λ f. f 1 + f 2 ) ( λ x . X )( λ x . x ) 1 + ( λ x . x ) 2 ( λ fx . f( fx ) ) ( λ gy. g y) z ( λ gy. g y) ( λ g y. g y) z ( λ y. ( λ gy. g y) y ) z
Una volta che hai diverse variabili con lo stesso nome, devi anche impedire l'acquisizione. L'esempio più semplice di acquisizione è quello dell'applicazione della funzione (restituisce il primo argomento) a non deve dare (la funzione identità), ma (una funzione costante).λ x y. Xyλ y. yλ y'. y
Quel che è peggio è che i controesempi agli algoritmi ingenui sono difficili da costruire quando si conosce già il problema, figuriamoci quando non lo si fa. I bug negli algoritmi quasi corretti spesso rimangono inosservati per anni. Ho sentito che anche i bravi studenti in genere non riescono a trovare (da soli) la corretta definizione di sostituzione che evita la cattura. In effetti, i dottorandi (me inclusi) e i professori non sono esenti da questo problema.
Questo è uno dei motivi per cui alcuni (incluso uno dei migliori libri di testo su linguaggi di programmazione, Tipi e Linguaggi di programmazione di Benjamin Pierce) raccomandano la rappresentazione senza nome (non una logica abbastanza combinatoria, anche se è stata usata, ma piuttosto indici deBrujin).
Le prove a riguardo sono sottili
Si scopre che le prove sull'associazione non sono più semplici dell'implementazione, come menzionato sopra. Naturalmente, esistono algoritmi corretti ed esistono prove su di essi - ma senza macchinari avanzati, per ogni lingua che usa la rilegatura è necessario ripetere le prove e quelle prove sono semplicemente molto grandi e fastidiose se si usano le definizioni per la rilegatura su carta e penna .
BUNUNBB
Successivamente, ho cercato il mio miglior esempio di "cosa non va se provi a formalizzare la definizione standard". Russell O'Connor (che si trova su questo sito) ha formalizzato il primo teorema di incompletezza di Gödel in Coq (un teorema dimostratore del tipo sopra menzionato) - e che il teorema comporta una logica (con tutti gli algoritmi pertinenti) in un'altra logica (con la sintassi di la prima logica codificata come numeri). Ha usato le definizioni che sono usate sulla carta e le ha formalizzate direttamente. Cerca "sostituzione" o "variabile" e conta la frequenza con cui compaiono in riferimento ai problemi per ottenere un'impressione.
http://r6.ca/Goedel/goedel1.html
Non uso mai quelle definizioni nel mio lavoro, ma ogni approccio alternativo ha qualche svantaggio.