Una máquina de Turing no determinista acepta si al menos una ruta acepta; solo rechaza si todos los caminos rechazan. Esta asimetría hace que sea difícil "voltear las respuestas".
Por ejemplo, suponga que tiene una máquina Turing no determinista que tiene dos rutas para la entrada w : una acepta y la otra rechaza. M tiene al menos una ruta de aceptación para w , por lo que acepta. Supongamos que queremos producir una máquina que acepte exactamente las entradas que M rechaza. El primer intento obvio es tomar M y hacer que sus estados de aceptación rechacen, y sus estados de aceptación acepten. M tiene una ruta de aceptación para w y una ruta de rechazo; Esta nueva máquina M ' tiene una ruta de rechazo y una ruta de aceptación. ¡Entonces todavía acepta w , que se suponía que debía rechazar!METROwMETROwMMMwM′w
Una máquina no determinista no puede ver todas sus rutas simultáneamente y tomar medidas basadas en lo que hacen todas esas rutas. Si lo desea, puede considerarlo como una forma de paralelismo en el que los hilos tienen prohibido comunicarse entre sí. Cuando todos los hilos hayan terminado, el programa debe hacerse la siguiente pregunta: "¿Al menos uno de mis hilos aceptó?" Si la respuesta es sí, está legalmente obligado a aceptar; Si la respuesta es no, está legalmente obligado a rechazar. No puede hacer nada más.
Cuando simula una máquina no determinista usando otra, M ' , cada ruta de M ' simula una ruta de M y solo ve esa ruta. No puede decir, "Si todos esos otros caminos fueron rechazados, aceptaré" porque no puede ver los otros caminos; solo puede verse a sí mismo. Entonces, todo lo que podría decir es cosas como: "Si la ruta que simulé aceptó, la rechazaré" o "Si la ruta que simulé aceptó, aceptaré también". Luego, al final del cálculo, la máquina tiene que decir: "Si alguno de mis caminos lo acepta, yo también lo aceptaré", lo que lleva al problema que describí anteriormente. Para invertir el comportamiento de M , cada camino de M ′MM′M′MMM′necesita decir: "Si el camino que simulé aceptó, rechazo; de lo contrario, acepto" y, al final del cálculo, la máquina necesita decir: "Si todos mis caminos aceptaron, acepto; de lo contrario, rechazo ". Esto se debe a que, si todos los caminos del simulador aceptadas, es decir, todas caminos 's rechazados, por lo que M rechazada, por lo que las necesidades del simulador de aceptar. Pero el simulador no es una máquina de Turing no determinista válida porque no está utilizando el criterio de aceptación legalmente obligatorio. No puede hacer eso.MM
La única forma de saber si una máquina no determinista rechaza su entrada es probar todas las rutas posibles y verificar que todas rechacen. Después de todo, si incluso uno de ellos aceptara, la máquina aceptaría la entrada. Pero intentar cada ruta posible es exponencialmente más lento que probar solo una.