Niedeterministyczna maszyna Turinga akceptuje, jeśli akceptuje co najmniej jedna ścieżka; odrzuca tylko wtedy, gdy wszystkie ścieżki odrzucą. Ta asymetria utrudnia „odwracanie odpowiedzi”.
Załóżmy na przykład, że masz niedeterministyczną maszynę Turinga która ma dwie ścieżki wejściowe : jedna akceptuje, a druga odrzuca. ma co najmniej jedną ścieżkę akceptacji dla , więc akceptuje. Załóżmy, że chcemy stworzyć maszynę, która akceptuje dokładnie dane wejściowe, które odrzuca. Oczywistą pierwszą próbą jest przyjęcie i odrzucenie stanów akceptujących, a stanów odrzucających. ma jedną ścieżkę akceptującą dla i jedną ścieżkę odrzucającą; ta nowa maszyna ma jedną ścieżkę odrzucającą i jedną ścieżkę akceptującą. Tak więc nadal akceptuje , który miał odrzucić!MwMwMMMwM′w
Niedeterministyczna maszyna nie może jednocześnie patrzeć na wszystkie swoje ścieżki i podejmować działań w oparciu o to, co robią wszystkie te ścieżki. Jeśli chcesz, możesz to potraktować jako formę paralelizmu, w którym wątki nie mogą się ze sobą komunikować. Po zakończeniu wszystkich wątków program musi zadać sobie następujące pytanie: „Czy przynajmniej jeden z moich wątków zaakceptował?” Jeśli odpowiedź brzmi „tak”, jest prawnie zobowiązany do przyjęcia; jeżeli odpowiedź jest przecząca, jest prawnie zobowiązany do odrzucenia. Nie może zrobić nic innego.
Kiedy symulujesz niedeterministyczną maszynę za pomocą innej, , każda ścieżka symuluje jedną ścieżkę i widzi tylko tę ścieżkę. Nie może powiedzieć: „Jeśli wszystkie inne ścieżki zostaną odrzucone, zaakceptuję”, ponieważ nie widzi innych ścieżek; widzi tylko siebie. Mogłoby więc powiedzieć tylko: „Jeśli ścieżka, którą symulowałem, zostanie zaakceptowana, odrzucę” lub „Jeśli ścieżka, którą symuluję, zostanie zaakceptowana, też ją zaakceptuję”. Następnie, pod koniec obliczeń, maszyna musi powiedzieć: „Jeśli którakolwiek z moich ścieżek zostanie zaakceptowana, ja też ją zaakceptuję”, co prowadzi do problemu, który opisałem powyżej. Aby odwrócić zachowanie , każda ścieżkaMM′M′MMM′musi powiedzieć: „Jeśli ścieżka, którą zasymulowałem, została zaakceptowana, odrzucam; w przeciwnym razie akceptuję”, a na końcu obliczeń maszyna musi powiedzieć: „Jeśli wszystkie moje ścieżki są akceptowane, akceptuję; w przeciwnym razie odrzucam . ” To dlatego, że jeśli wszystkie ścieżki symulatorze za przyjęte, że wszystkie środki z ścieżek jest odrzucony, więc odrzucony, więc potrzeby symulatora do zaakceptowania. Ale symulator nie jest prawidłową niedeterministyczną maszyną Turinga, ponieważ nie korzysta z prawnie obowiązującego kryterium akceptacji. Nie może tego zrobić.MM
Jedynym sposobem, w jaki możemy dowiedzieć się, czy niedeterministyczna maszyna odrzuca dane wejściowe, jest wypróbowanie każdej możliwej ścieżki i sprawdzenie, czy wszystkie one odrzucają. W końcu, jeśli choć jeden z nich zostanie zaakceptowany, maszyna zaakceptuje dane wejściowe. Ale wypróbowanie każdej możliwej ścieżki jest wykładniczo wolniejsze niż wypróbowanie tylko jednej.