La différence entre les machines de Turing déterministes et non déterministes réside dans la fonction de transition. Dans les machines déterministes de Turingδ la fonction de transition est une fonction partielle:
δ:Q×B→Q×B×{left,right}
ce qui signifie que, étant donné un état et un symbole de bande, vous avez un ou aucun état, entrez le symbole à droite et la direction à déplacer. Cependant, dans les machines de Turing non déterministes, cela ressemble (iciP est l'ensemble des sous-ensembles d'un ensemble):
δ:Q×B→P(Q×B×{left,right})
ce qui signifie que vous n'avez aucun ou plusieurs états, des symboles de bande à écrire ou une direction vers laquelle vous déplacer. Cela donne à votre machine la possibilité de choisir efficacement dans un tel état et symbole de bande entre les différentes "branches" de calcul possibles.
En pratique, cela signifie que nous pouvons calculer différentes sorties pour la même entrée. Par conséquent, le langage d'une machine de Turing non déterministe est l'ensemble des mots pour lesquels nous trouvons une dérivation dans les transitions définies. Une exécution spécifique peut ne pas trouver une telle dérivation mais l'important est qu'elle puisse se produire. Ainsi, lorsque vous "devinez", vous choisissez simplement l'une des branches de calcul possibles.
Exemple d'utilisation
L={(M1,M2):there exists at least one word accepted by both TM at the same time}
Dans ce cas, on pourrait simplement "deviner" un mot w et exécuter M1 et M2 sur wvérifier que si les deux acceptent, ils acceptent en même temps. La supposition pourrait fonctionner en introduisant un étatq avec des transitions qui écrivent sur une bande 0s et / ou 1s et qui sort en lisant n'importe quel symbole sur la machine générale.
Pour être honnête, je n'ai trouvé aucun exemple de mauvaise utilisation de cette "supposition", mais vérifier que chaque fois que cette phrase est utilisée est correctement effectuée, cela réduit pour vérifier que vous pouvez créer des automates avec cette structure qui simule la devinette.