Aby rozwinąć nieco stwierdzenia „to niemożliwe”, oto prosty szkic dowodu.
Możemy modelować algorytmy z wyjściem przez maszyny Turinga, które zatrzymują się wraz z wyjściem na taśmie. Jeśli chcesz mieć maszyny, które mogą się zatrzymać, akceptując z wyjściem na taśmie lub odrzucając (w takim przypadku nie ma wyjścia), możesz łatwo wymyślić kodowanie, które pozwala modelować te maszyny za pomocą „zatrzymaj lub nie zatrzymuj”, nie ma maszyn odrzuconych.
Załóżmy teraz, że mam algorytm P do określania, czy dwie takie bazy TM mają takie same dane wyjściowe dla każdego wejścia. Następnie, biorąc pod uwagę TM A i wejście X , mogę zbudować nową TM B, która działa w następujący sposób:
- Sprawdź, czy dane wejściowe to dokładnie X
- Jeśli tak, wprowadź nieskończoną pętlę
- Jeśli nie, uruchom A na wejściu
Teraz mogę uruchomić P na A i B . B nie zatrzymuje się na X , ale ma takie samo wyjście jak A dla wszystkich innych danych wejściowych, więc jeśli i tylko jeśli A nie zatrzyma się na X, te dwa algorytmy mają takie same dane wyjściowe dla każdego wejścia. Ale założono, że P jest w stanie stwierdzić, czy dwa algorytmy mają takie same dane wyjściowe dla każdego wejścia, więc jeśli mielibyśmy P , moglibyśmy stwierdzić, czy dowolna maszyna zatrzymuje się na dowolnym wejściu, co stanowi problem zatrzymania. Ponieważ wiadomo, że problem zatrzymania jest nierozstrzygalny, P nie może istnieć.
Oznacza to, że nie ma ogólnego (obliczalnego) podejścia do ustalenia, czy dwa algorytmy mają takie same dane wyjściowe, które zawsze działają, więc musisz zastosować rozumowanie specyficzne dla pary analizowanych algorytmów. Jednak w praktyce mogą istnieć metody obliczeniowe, które działają dla dużych klas algorytmów, a z pewnością istnieją techniki, których można użyć, aby wypracować dowód na konkretny przypadek. Odpowiedź Dave'a Clarke'a daje ci kilka istotnych rzeczy do obejrzenia tutaj. Wynik „niemożliwości” dotyczy tylko opracowania ogólnej metody, która rozwiąże problem raz na zawsze, dla wszystkich par algorytmów.