Halting theorem
Questo è un problema fondamentale, che abbiamo trattato anche in Fondamenti teorica#Halting problem, ma qui lo ritrattiamo, perché così lo rifacciamo per bene. In parte è stato trattato anche al corso di Logica.
Enunciato Halting theorem
Questo è molto simile a quanto presente sul (Sipser 2012). Ossia consideriamo il linguaggio
Dimostrazione Halting theorem
La parte del sì è facile perché basta eseguirlo e vedere che si ferma (quindi abbiamo una La macchina di Turing#La macchina di Turing universale. Se si ferma appartiene al linguaggio, altrimenti è la parte in cui diverge.
Dimostrazione non decidibilità Supponiamo sia decidibile e dimostriamo l'assurdo. Se esiste una macchina tale per cui decida quel linguaggio,
allora possiamo usare questa macchina per costruire un tale che per cui
Allora la computazione della funzione genera un assurdo.
Il motivo è che Questa cosa dovrebbe essere riscritta in modo per essere comprensibile da macchine di Turing.
Opposto di Halting theorem
Ossia vogliamo riconoscere il linguaggio
Si può dimostrare che questo problema non è nemmeno riconoscibile da nessuno!
Dimostrazione complemento di halting theorem
Si ragiona anche qui per assurdo, se fosse riconoscibile, avremmo che Halting theorem principale sarebbe riconoscibile.

Mapping reducibility
Definizione mapping reducibility
Un linguaggio è riducibile a un altro linguaggio se esiste una funzione computabile totale tale che valga
E si scrive che Ossia posso mappare qualunque parola in in una stringa in . È molto importante che sia computabile, perché è un modo di dire che non stiamo barando nella dimostrazione, e mi appoggio soltanto all'espressività dei due linguaggi.
Proprietà di decidibilità basilari
- Se è decidibile, allora è decidibile.
- Se è indecidibile allora lo è anche perché altrimenti si avrebbe un assurdo
- Se è decidibile e no allora altrimenti assurdo per il primo punto.
Ogni linguaggio decidibile è semplice
Ossia se è decidibile allora per ogni tale che e , ossia è un linguaggio finito, si ha che
In altre parole, possiamo dire che i linguaggi decidibili sono mapping reducibili a qualunque altro linguaggio non banale, quindi sono le più semplici esistenti in altre parole.
Dimostrazione: Dato che è decidibile, esiste tale che decide se appartiene o meno a quel linguaggio. Dato che è finito, esiste un che non appartiene e un altro che appartiene. Allora costruisco la funzione così:
- Runno , se appartiene, mappo a
- Se non appartiene mappo a . Ez.
Indecidibilità su nastro vuoto
NOTA: in ogni caso devo vedere se il codice della macchina è valido.
Definendo il linguaggio
Per dimostrare ciò basta dimostrare che
Ossia dobbiamo costruire una funzione che mappa ogni stringa di in una di .
Questo è molto semplice, solo definire qualche dettaglio (non banale)

Indicibilità ogni input
Definiamo il linguaggio
Anche questo si può dimostrare in maniera simile al precedente, con una mapping reduction. Questo è anche più semplice: Se non è il codice di nessuna macchina ritorno quello. Altrimenti: Per ogni input costruisco la seguente macchina
- La macchina nuova prende un input , la ignora per il momento, e simula .
- Se termina (e quindi appartiene a ) allora termino anche io ignorando l'input.
- Altrimenti divergo, e quindi non appartengo. Questa nuova macchina è bona. Quindi funziona l'indicibilità
Quindi Se non è codice ho già la risposta. Altrimenti
Equivalence problem decidability
Anche in questo caso proviamo a ridurci al caso .
Sempre come prima, per input mi costruisco questa macchina
La correttezza di questo è un po' più fine, però è giusto. Vedere qui.
Equivalence problem recognizability
Il linguaggio del problema di equivalenza non è nemmeno riconoscibile. Per fare ciò devo ridurre a questo EQ. Dimostro la riduzione

Nota sulla gerarchia
Cosa curiosa è che è il suo opposto non sono comparabili. Mentre ci aspetteremmo che HALT sia più semplice.
Una altra cosa curiosa è che EQ non è riconoscibile, e nemmeno il suo opposto lo è.
Quindi EQ non è nemmeno semi-decidibile.

Turing riducibilità
Definizione di oracolo
Dato un linguaggio e una stringa , l'oracolo mi dice in tempo finito se .
Definizione Turing-riducibilità
Dato un , questo è Turing riducibile a , quindi , se dato un oracolo per possiamo decidere
Mapping reducibility => Turing-riducibilità
Possiamo dimostrare in modo semplice che con Turing-riducibilità è riducibile a . Senza problemi. Mentre non posso farlo con Mapping reducibility. Questo mi dice che Turing riducibilità è una proprietà più forte della mapping reducibility, anche se non è propriamente una dimostrazione di questa proprietà.
Baker-Gill-Soloway (1975)
Questa sezione è solamente una nota filosofica, ma di poco conto per l'esame.
Prendiamo una macchina di Turing con oracolo, ossia possiamo chiedere se una stringa è parte dell'oracolo in tempo costante (come se fosse un dizionario con accesso diretto).
Esistono oracoli tali per cui con una macchina di Turing che usi il primo oracolo, e anche che usando il secondo oracolo. Questo teorema dice che la tecnica di diagonalizzazione di Cantor non può essere usata per risolvere NP = P. Questo dato è inutile per la maggior parte delle cose attuali credo. Oppure TM non sono buoni per risolvere questo problema (ha fatto nascere la branca con i circuiti booleani, non fatta qui).
References
[1] Sipser “Introduction to the Theory of Computation” Cengage Learning 2012