Ich denke, alle Antworten hier sind vollständig und verfehlen den Punkt. Die Antwort auf die Frage lautet: Unter der Annahme, dass das Programm anhalten soll, sollten Sie in der Lage sein, anzuzeigen, dass es anhält. Wenn Sie nicht zeigen können, dass es leicht stoppt, sollte das Programm als sehr schlecht geschrieben und von der Qualitätskontrolle als solches abgelehnt angesehen werden.
Ob Sie tatsächlich einen geeigneten Maschinenalgorithmus schreiben können, hängt von der eingegebenen Programmiersprache ab und davon, wie ehrgeizig Sie sind. Es ist ein vernünftiges Entwurfsziel für eine Programmiersprache, die Beendigung leicht nachweisen zu können.
Wenn die Sprache C ++ ist, können Sie das Tool wahrscheinlich nicht schreiben, in der Tat ist es unwahrscheinlich, dass Sie jemals den Parser zum Laufen bringen, geschweige denn die Kündigung beweisen. Für eine besser strukturierte Sprache sollten Sie in der Lage sein, einen Beweis zu erstellen, oder zumindest mit bestimmten Annahmen: Im letzteren Fall sollte das Tool diese Annahmen ausgeben. Ein ähnlicher Ansatz wäre, Abschlusszusagen in die Sprache aufzunehmen und in komplexen Situationen zu verwenden, in denen das Tool den Zusagen vertraut.
Die Quintessenz ist, dass niemand zu verstehen scheint, dass der Beweis, dass ein Programm anhält, in der Tat möglich ist, weil (gute) Programmierer, die beabsichtigen, solche anhaltenden Programme zu schreiben, dies immer absichtlich und mit einem mentalen Bild davon tun, warum sie abbrechen und richtig handeln: Ein solcher Code ist absichtlich geschrieben, so ist es klar, dass sie anhalten und korrekt sind und wenn ein vernünftiger Algorithmus dies nicht beweisen kann, möglicherweise mit einigen Hinweisen, dann sollte das Programm abgelehnt werden.
Der Punkt: Programmierer schreiben keine willkürlichen Programme, so dass die These des Haltesatzes nicht erfüllt ist und die Schlussfolgerung nicht zutrifft.