Perché i numeri calcolabili (nel senso di Turing) sono enumerabili? Deve essere molto ovvio, ma al momento non lo vedo.
Perché i numeri calcolabili (nel senso di Turing) sono enumerabili? Deve essere molto ovvio, ma al momento non lo vedo.
Risposte:
Sto assumendo che la tua definizione di un numero calcolabile è questo: c'è una macchina di Turing che sull'ingresso , soste con il esimo bit del numero.
Supponiamo che ci fosse un elenco ricorsivo di macchine di Turing che producono numeri calcolabili. È possibile utilizzare la diagonalizzazione per elaborare un nuovo numero calcolabile che non fa parte di questa enumerazione ricorsiva.
È allettante enumerare i numeri calcolabili enumerando le macchine di Turing, ma non tutte le macchine di Turing corrispondono a un numero calcolabile, e in generale decidere se una macchina di Turing si ferma per tutti gli input (per non parlare dell'uscita 0 o 1) non è calcolabile. Tuttavia, è possibile elencare tutti i numeri calcolabili efficienti, ad esempio quelli il cui tempo di esecuzione è polinomiale, utilizzando macchine di Turing con clock.
Se per enumerabile, intendi dire che c'è una biiezione con i numeri naturali (cioè numerabili), allora no, i numeri calcolabili non sono enumerabili.
Definiamo il problema in modo più preciso: una "Macchina da stampa a numeri (NPTM)" è una macchina da stampa che, per ogni transizione di stato, non può stampare nulla o può stampare qualsiasi cifra decimale, il segno meno o il punto. Questo è sufficiente per stampare rappresentazioni decimali di numeri reali.
Consente di definire un numero reale calcolabile come qualsiasi numero reale che può essere stampato con una rappresentazione arbitrariamente lunga, con un tempo sufficiente, da un NPTM a partire da un nastro vuoto. Diciamo anche che un numero è calcolato da un dato NPTM se si ferma dopo aver stampato un numero reale ben formato (nel qual caso, il numero ha una rappresentazione decimale finita) o, in un tempo finito, stampa un numero ben formato con un punto decimale e aumenterà sempre la precisione del numero stampando più cifre, dato sempre più tempo.
Questa condizione successiva era necessaria perché, se abbiamo una macchina che, ad esempio, stampa una sequenza infinita di qualche cifra, diciamo 1111111111111111111
..., non si può dire che stia calcolando un numero reale, poiché i numeri reali hanno solo una rappresentazione infinita a destra lato del periodo decimale. D'altra parte, se la macchina stampa 3.14
e poi smette di stampare, ma non si ferma mai, non si può dire che stia calcolando un numero reale semplicemente perché la precisione del numero non aumenta, quindi questa particolare macchina non lo costruirà ulteriore.
Questi sono esempi di NPTM che calcola un certo numero. Un NPTM che:
1
, quindi si ferma. Calcola il numero 1.1.0
, quindi si ferma. Calcola anche il numero 1.1.0000000
e continua a stampare zeri per sempre. Questo calcola anche il numero 1.3.14
, quindi si ferma. Calcola il numero 3.14.3.14159
e continua a stampare per sempre cifre di . Questo calcola il numero .-42.
, quindi si ferma. Calcola il numero -42.E questi sono esempi di NPTM che non calcolano alcun numero. Un NPTM che:
123123123
e continua a stampare la sequenza 123
per sempre. Non sta calcolando un numero perché questa sequenza infinita non rappresenta alcun numero reale.1.0.0
e poi si ferma. Non è perché questa sequenza finita non è ben formata.....-..---
e poi si ferma. Non è nemmeno perché questo non è un numero reale ben formato.3.14
, non si ferma, ma non stampa nient'altro. Non sta calcolando un numero perché la sua precisione non aumenta con il tempo.Hai l'idea. Quindi abbiamo due classi di NPTM: quelle che calcolano un numero reale e quelle che non lo fanno.
Il problema nel trovare una certa enumerazione per i numeri calcolabili è che, anche se gli NPTM sono essi stessi numerabili, non possiamo avere una procedura che separa un tipo di NPTM da un altro.
Si consideri la definizione di insieme numerabile: per un insieme di essere numerabile, deve esistere qualche funzione biiettiva .
Per "dimostrare" che i numeri calcolabili sono numerabili, si potrebbe essere tentati di definire tale funzione dal conteggio del NPTM (e questo è ciò che le persone spesso hanno fatto, quando credono che i numeri calcolabili siano numerabili). Qualcosa come questo:
Gli NPTM sono numerabili, quindi esiste una funzione , quindi possiamo continuare a elencare per sempre tutto l'NPTM esistente. Quindi, per enumerare allo stesso modo tutti i numeri calcolabili e definire con precisione la funzione biiettiva , bisogna semplicemente enumerare tutto NPTM, ma contare solo quelli che ne calcolano alcuni numero reale. Ma come facciamo a sapere che calcola un numero reale?
Bene, non lo facciamo. Si consideri una macchina che stampa immediatamente 1.0
, quindi smette di stampare e continua a provare a risolvere un'istanza del problema di corrispondenza posta . Se risolve il problema, si ferma, quindi la macchina ha appena calcolato il numero uno. Ma quel problema è indecidibile, quindi potrebbe non fermarsi mai, e se non si ferma mai, non calcola mai un numero reale. Ma non possiamo sapere se si fermerà mai, perché anche il problema di Halting è indecidibile! Quindi, poiché non c'è modo di sapere se questa particolare macchina, e infinitamente molte altre macchine, calcolano o meno un numero reale, non possiamo costruire / definire la nostra funzione biiettiva in questo modo.
Il modo ingenuo di definire la biiezione fallisce e non è molto difficile provare che non c'è modo di farlo. Come suggerito da Yuval Filmus, è possibile utilizzare la diagonalizzazione.