La diferencia entre las máquinas de Turing deterministas y no deterministas radica en la función de transición. En máquinas deterministas de Turingδ La función de transición es una función parcial:
δ:Q×B→Q×B×{left,right}
lo que significa que, dado un estado y un símbolo de cinta, tiene uno o ninguno, ingrese el símbolo a la derecha y la dirección para moverse. Sin embargo, en máquinas Turing no deterministas esto se ve (aquíP es el conjunto de subconjuntos de un conjunto):
δ:Q×B→P(Q×B×{left,right})
lo que significa que no tiene ninguno o varios estados, símbolos de cinta para escribir o dirección para moverse. Esto le da a su máquina la posibilidad de elegir efectivamente en tal estado y un símbolo de cinta entre las diferentes "ramas" de cómputo posibles.
En la práctica, esto significa que podemos calcular diferentes salidas para la misma entrada. Por lo tanto, el lenguaje de una máquina de Turing no determinista es el conjunto de palabras para el que encontramos una derivación en las transiciones definidas. Una ejecución específica puede no encontrar dicha derivación, pero lo importante es que puede ocurrir. Entonces, cuando "adivinas", simplemente estás eligiendo una de las posibles ramas de la computación.
Ejemplo de uso
L={(M1,M2):there exists at least one word accepted by both TM at the same time}
En este caso uno podría simplemente "adivinar" una palabra w y ejecutar M1 y M2 en wcomprobando que si ambos aceptan, aceptan al mismo tiempo. La suposición podría funcionar introduciendo un estadoq con transiciones que escriben en alguna cinta 0sy / o 1sy eso sale al leer cualquier símbolo en la máquina general.
Para ser honesto, no he encontrado ningún ejemplo de mal uso de esta "suposición", pero comprobar que cada vez que se usa esta frase se hace correctamente, se reduce para verificar que se pueda construir un autómata con esta estructura que simule la suposición.