Być może odpowiedzią jest, że twój współpracownik ma rację. Być może źle zrozumiałeś Turinga lub jak to tutaj ma zastosowanie?
Wszystkie maszyny są skończone, dlatego nie ma „prawdziwych” maszyn Turinga i programów, które nigdy się nie zatrzymają. Trywialny program, który wykonuje prostą nieskończoną pętlę, może działać 5 minut lub 50 lat, ale na skończonej maszynie się zatrzyma. Zatrzymany zostanie również nietrywialny problem nie zatrzymujący się, taki jak „dokładnie oblicz liczbę pi”, ponieważ ostatecznie obliczenia przekroczą pojemność do przechowywania kolejnych cyfr.
Wynik Turinga nie gwarantuje niczego szczególnie przydatnego na skończonych maszynach, więc twoje zadanie jest ostatecznie bezowocne. Lepiej skoncentruj się na tym, ile czasu i pieniędzy, i pozostaw matematykom nieskończoność.
Może ci się wydawać, że taki program { while true: print "running"; print "halted"; }
jest kontrapunktem, ale nim nie jest. Ten program ma skutki uboczne, które mogą powodować zatrzymanie. Ignorując skutki uboczne, można opracować formalny dowód, że ten program się nie zatrzyma. W tym pytaniu zajmujemy się tylko programami, które unikają formalnego dowodu braku zatrzymania, gdy kwestia zatrzymania jest nierozstrzygalna. To nie jest taki program.
Pomoże to odróżnić „silne” Turinga od „słabego” Turinga. Silne maszyny Turinga są w rzeczywistości nieskończone i jeśli się nie zatrzymają, będą działać przez nieskończony czas. Nie możemy ich zbudować.
Słabe maszyny Turinga mają ograniczone limity czasu i przestrzeni i są jedynym rodzajem, jaki możemy zbudować. Interesują nas programy, których zatrzymania w tych granicach nie można udowodnić. Turing mówi nam, że istnieją takie programy, ale nie możemy ich zidentyfikować. Jeśli limity są wystarczająco niskie, możemy je zidentyfikować, pisząc program i uruchamiając go do granic możliwości.
Istotą Turinga jest to, że nie ma skrótów. Jedynym sposobem, aby upewnić się, czy problem jest wykonalny obliczeniowo, jest napisanie programu, uruchomienie go i sprawdzenie. Mając wystarczająco dużo czasu i pieniędzy, możesz napisać wszystkie programy, uruchamiać je na zawsze i z czasem oraz znaleźć te, które przynoszą rezultaty (kantary). Pozostałe nadal będą działać. Czy Twój współpracownik ma wystarczająco dużo czasu i pieniędzy, aby to zrobić?
Poważnie jednak spór dotyczy granic. Turing i NP complete mówią nam, że pewne klasy problemów nie mogą być rozwiązane przez komputery w ramach danego budżetu lub harmonogramu, bez względu na to, jak duży budżet i jak hojny może być ten harmonogram. Przykładów tego rodzaju problemów jest wiele: łamanie kluczy kryptograficznych; optymalizacja tras dostaw do setek adresów; pakowanie pudeł w ciężarówki; znajdowanie błędów w dużych programach!
Poproś więc współpracownika o budżet i harmonogram i złóż obietnicę, że możesz stworzyć problem, którego nie da się rozwiązać w ramach tego budżetu lub harmonogramu. Ta obietnica będzie bardzo łatwa do dotrzymania.