Myślę, że wszystkie odpowiedzi tutaj całkowicie i całkowicie pomijają sens. Odpowiedź na pytanie brzmi: zakładając, że program ma się zatrzymać, wtedy tak, lepiej być w stanie pokazać, że się zatrzymał. Jeśli nie możesz pokazać, że łatwo się zatrzymuje, program należy uznać za bardzo źle napisany i jako taki odrzucony przez kontrolę jakości.
To, czy potrafisz napisać odpowiedni algorytm maszynowy, zależy od wejściowego języka programowania i tego, jak ambitny jesteś. Jest rozsądnym celem projektowym dla języka programowania, aby łatwo było udowodnić zakończenie.
Jeśli językiem jest C ++, prawdopodobnie nie możesz napisać tego narzędzia, w rzeczywistości jest mało prawdopodobne, abyś uruchomił parser, nie mówiąc już o udowodnieniu zakończenia. Aby uzyskać lepiej ustrukturyzowany język, powinieneś być w stanie wygenerować dowód lub przynajmniej zrobić to z pewnymi założeniami: w tym drugim przypadku narzędzie powinno wygenerować te założenia. Podobne podejście polegałoby na uwzględnieniu stwierdzeń zakończenia w języku i stosowaniu ich w złożonych sytuacjach, w których narzędzie ufa tym stwierdzeniom.
Najważniejsze jest to, że nikt nie zdaje sobie sprawy z tego, że dowód zatrzymania programu jest rzeczywiście możliwy, ponieważ (dobrzy) programiści zamierzający napisać takie programy zatrzymujące zawsze robią to umyślnie i z mentalnym obrazem, dlaczego kończą i działają poprawnie: taki kod jest celowo napisane tak, aby było jasne, że się zatrzymały i są poprawne, a jeśli rozsądny algorytm nie może tego udowodnić, być może z pewnymi wskazówkami, program powinien zostać odrzucony.
Chodzi o to, że programiści nie piszą dowolnych programów, więc teza twierdzenia o zatrzymaniu nie jest spełniona, a wniosek nie ma zastosowania.