Spiegazione semplice del perché alcune funzioni calcolabili non possono essere rappresentate da un termine tipizzato?


8

Leggendo il documento Un'introduzione al calcolo Lambda , mi sono imbattuto in un paragrafo che non capivo davvero, a pagina 34 (corsivo):

All'interno di ciascuno dei due paradigmi ci sono diverse versioni del calcolo lambda tipizzato. In molti sistemi importanti, specialmente quelli alla Chiesa, è vero che i termini che hanno un tipo possiedono sempre una forma normale. Dall'insolvibilità del problema di arresto ciò implica che non tutte le funzioni calcolabili possono essere rappresentate da un termine tipizzato, vedi Barendregt (1990), Teorema 4.2.15. Questo non è così male come sembra, perché per trovare funzioni calcolabili che non possono essere rappresentate, bisogna stare in piedi sulla testa. Ad esempio in 2, il secondo ordine ha digitato il calcolo lambda, non possono essere rappresentate solo quelle funzioni ricorsive parziali che risultano essere totali, ma non in modo dimostrabile nell'analisi matematica (aritmetica del secondo ordine).

Conosco la maggior parte di questi concetti, ma non il concetto di funzione ricorsiva parziale, né il concetto di funzione dimostrabile totale. Tuttavia, questo non è ciò che mi interessa apprendere.

Sto cercando una spiegazione semplice sul perché alcune funzioni calcolabili non possano essere rappresentate da un termine tipizzato, nonché sul perché tali funzioni possano essere trovate solo "stando in piedi".

Risposte:


9

Dato che non vuoi imparare concetti precisi, ecco una spiegazione intuitiva. Nella discussione che segue "funzione" si riferisce sempre a una funzione che associa numeri naturali a numeri naturali (eventualmente non definito in alcuni argomenti).

Qualsiasi linguaggio di programmazione che abbia

  1. sintassi calcolabile e regole di valutazione, e
  2. implementa ogni funzione calcolabile totale

implementa necessariamente alcune funzioni parziali .

Per vedere questo, supponiamo che tutte le funzioni definibili in questa lingua fossero totali. Poiché il linguaggio ha una sintassi calcolabile, possiamo enumerare tutte le definizioni di funzioni (basta enumerare tutte le stringhe e filtrare quelle che causano errori sintattici). Poiché le regole di valutazione sono calcolabili, la seconda ipotesi ci consente di concludere che nella nostra lingua possiamo definire la funzione totale eval(n,m)che valuta la nfunzione -th definibile su m(essenzialmente questo è un mini-interprete scritto nella lingua stessa). Ma poi la funzione

λ k . (1 + eval(k,k))

è una funzione definibile totale che è diversa da ogni funzione definibile totale, una contraddizione.

Il semplice digitato λ-calculus soddisfa la prima condizione e definisce solo le funzioni totali. Pertanto non soddisfa la seconda condizione.

Per quanto riguarda "in piedi sulla testa", per un fortemente normalizzante λ-calcolo è abbastanza facile fornire una funzione totale che non è definibile nel calcolo, vale a dire la procedura di normalizzazione stessa. Non è molto importante quanto sia elaborato il tuo calcolo fortemente normalizzante, potrebbe essere il polimorficoλ-calcolo, o teoria dei tipi di Martin-Lof, o Calcolo delle costruzioni. (Esercizio: se è possibile implementare la procedura di normalizzazione, è possibile implementare evalsopra.)


Temo di non poter analizzare la tua seconda frase esplicativa: qualsiasi linguaggio di programmazione con 1. e 2. verifica cosa? Presumo che volessi dire che non esiste un linguaggio del genere ...
cody,

Scusa, ho incasinato il testo. Dovrebbe leggere bene ora.
Andrej Bauer,

Fantastico, non ci ho pensato. Vedi qui per lo sfondo di questa risposta.
Raffaello

4

Trovo che la risposta di Merijn gestisca abbastanza bene la prima parte della tua domanda. Cercherò di rispondere alla seconda parte: perché trovare funzioni che sono calcolabili ma non rappresentabili nel polimorficoλ-calculus richiede "stare in testa".

Temo che richieda una spiegazione dei concetti che non ti interessano. Una funzione parziale recusiva è aλ-term che rappresenta una funzione da N per N{}. UNλ-termine t applicato al rappresentante di un numero naturale n viene inviato a se e solo se t nnon non hanno una forma normale. Se nessun numero viene inviato adiciamo che la funzione è totale . Ora l'idea è che nessuna teoria logicaT può dimostrare che un termine t rappresenta una funzione totale per ogni funzione totale t, ci sono sempre "punti ciechi" dove t termina su tutti gli input n, ma la dichiarazione

n,t n terminates

è indecidibile in T. Se la dichiarazione precedente è dimostrabile inT, diciamo che la funzione rappresentata da tè decisamente totale . Che non tutte le funzioni totali sono in totale dimostrazioneT è una conseguenza di (una variante del) teorema di incompletezza di Godel per T.

Ora il punto è che il vasto programma di maggioranza che desideriamo concretamente scrivere (ordinamento di elenchi, attraversamento di grafici, sistemi operativi) non sono solo funzioni totali, ma sono dimostrabili totalmente in sistemi logici ragionevoli, come Peano Arithmetic.

Ora per il polimorfico λ-calcolo. Si può dimostrare che i termini che si possono digitare in questo calcolo sono esattamente i termini che rappresentano le funzioni in totale evidenza nell'aritmetica di Peano del Secondo Ordine. L'aritmetica di Peano del secondo ordine è molto, molto più potente della normale aritmetica di Peano.

Ciò significa dalle spiegazioni di cui sopra che ci sono termini che sono totali ma non dimostrabili in totale, ma tali funzioni sono estremamente rare, poiché sono già rare per l'aritmetica di Peano (e molto più rare nella teoria del secondo ordine). Da qui l'affermazione "in piedi sulla testa".


2
Ti mancano le condizioni per la tua teoria T, vale a dire coerenza e che l'insieme di assiomi è ricorsivo, altrimenti possiamo prendere come T una teoria la cui serie di assiomi include "f termina "per ogni fche termina.
Andrej Bauer,

Grazie per queste precisazioni, Andrej. Una spiegazione più completa probabilmente spiegherebbe anche in dettaglio ciò di cui abbiamo bisogno della nostra teoria, vale a dire che la teoria può almeno esprimere ciò che significa terminare (l'aritmetica con la moltiplicazione è sufficiente, ma tendo a favorire sistemi leggermente più espressivi).
codice

Giusto, penso che sia giusto sottolineare che mancano alcune condizioni tecniche, quindi i lettori interessati possono andare a cercarle.
Andrej Bauer,

3

Sto trovando un po 'difficile scrivere concisamente la prova, ma spero che questa spiegazione ti fornisca abbastanza intuizione per capire perché i semplici termini digitati non possono rappresentare tutti i termini non tipizzati.

Il calcolo lambda semplicemente tipizzato si sta fortemente normalizzando. Ogniβla riduzione ci avvicinerà alla forma normale. Quando la funzionef::αβγ viene applicato a un valore di tipo α lo farà β riduci a una funzione di tipo βγ. Dato un numero finito di argomenti, è necessario un numero finito di passi di riduzioneβ-modalità normale, in cui non vi sono ulteriori riduzioni possibili.

Per contrastare questo con il calcolo lambda non tipizzato. Uno dei più famosi combinatori UTLC è ilY-combinator:

Y=λf.(λx.f(xx))(λx.f(xx))

Quando proviamo a ridurre il Y-combinatore accade quanto segue:

λf.(λx.f(xx))(λx.f(xx))g
(λx.g(xx))(λx.g(xx))
g((λx.g(xx))(λx.g(xx)))
g(g((λx.g(xx))(λx.g(xx))))

Non importa quali funzioni passiamo, restiamo bloccati in una sequenza infinita di riduzioni! Se provassimo a bloccare un tipo STLC su UTLCY-combinatore, lo troviamo rapidamente impossibile, perché l'applicazione della funzione non riduce il tipo come richiesto nell'STLC. IlY-combinatore è chiaramente calcolabile (rappresenta, usando la ricorsione, il concetto di un ciclo infinito), ma non può essere rappresentato nello STLC, poiché tutti i termini STLC si stanno fortemente normalizzando.


Questo argomento ha ben poco a che fare con il fatto che non tutte le funzioni di teoria dei numeri totali sono rappresentabili nel tipo λ-calcolo, che è di cosa tratta la domanda. In che senso è ilYcombinatore una funzione totale?
Andrej Bauer,

@AndrejBauer La domanda termina con "Sto cercando una spiegazione semplice sul perché alcune funzioni calcolabili non possano essere rappresentate da un termine tipizzato". In che modo la mia risposta non copre questo? IlY-combinatore è un esempio di una funzione calcolabile che non può essere rappresentata da un termine tipicamente tipizzato, e spero che la mia spiegazione fosse abbastanza coerente da spiegare perché non può essere rappresentata da un termine tipicamente tipizzato.
merijn,

Bene, se hai intenzione di interpretare la domanda come chiedere un esempio di una funzione parziale che non è definibile nel tipo λ-calcolo, quindi qualsiasi funzione del genere farà (e la domanda è senza senso). Ad esempio, quello che non è definito ovunque. Non è definibile nel semplice digitatoλ-calcolo neanche. La domanda riguarda le funzioni totali, mentre la leggo.
Andrej Bauer,
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.