Corollario
Esistono linguaggi che non sono Turing riconoscibili
Macchina di Turing universale
Una MdT universale $U$ simula la computazione di una qualsiasi MdT $M$
$U$ riceve in input una rappresentazione $\langle M, w\rangle$ di $M$ e di un possibile input $w$ di $M$
$\langle M, w \rangle \to \text{ Macchina Universale } U \to \begin{cases} \text{accetta } \space \text{ se } M \text{ accetta } w \\ \text{rifiuta} \space \text{ se } M \text{ rifiuta } w \end{cases}$
Teorema
Il linguaggio $A_{TM}= \{ \langle M,w \rangle | M \text{ è una MdT che accetta la parola } w\}$ è Turing riconoscibile
Simulazione di MdT input
Simulare una MdT con un’altra MdT
- marca stato iniziale di $M$ (stato corrente) e primo simbolo su nastro (posizione corrente testina)
- cerca prossima transizione (nella parte che descrive la funzione di transizione), sia $(q,x) \to (q',x',D)$
- esegui la transizione
- aggiorna lo stato corrente (marca $q'$) e la posizione corrente della testina (marca simbolo a $D$)
- se lo stato corrente risulta $q_{accept}/q_{reject}$ decidi di conseguenza, altrimenti ripeti da 2
Note
- $U$ è detta MdT universale
- $U$ riconosce $A_{TM}$: accetta ogni coppia $\langle M, w \rangle \in A_{TM}$
- $U$ cicla su $\langle M, w\rangle$ se e solo se $M$ cicla su $w$, quindi $U$ non decide $A_{TM}$