La réponse est peut-être que votre collègue a raison. Peut-être avez-vous mal compris Turing ou comment cela s'applique-t-il ici?
Toutes les machines sont finies, il n'y a donc pas de «vraies» machines de Turing et aucun programme qui ne s'arrêtera jamais. Un programme trivial qui exécute une boucle infinie simple pourrait durer 5 minutes ou 50 ans, mais sur une machine finie, il s'arrêtera. Un problème non trivial sans interruption tel que «calculer exactement pi» s'arrêtera également, car finalement le calcul dépassera la capacité de stocker d'autres chiffres.
Le résultat de Turing ne garantit rien de particulièrement utile sur les machines finies, donc votre quête est finalement infructueuse. Mieux vaut se concentrer sur combien de temps et combien d'argent et laisser l'infini aux mathématiciens.
Vous pouvez penser qu'un programme comme { while true: print "running"; print "halted"; }
est un contre-exemple, mais ce n'est pas le cas. Ce programme a des effets secondaires qui peuvent ou non provoquer son arrêt. En ignorant les effets secondaires, il est possible de concevoir une preuve formelle que ce programme ne s'arrêtera pas. Dans cette question, nous ne nous intéressons qu'aux programmes qui échappent à la preuve formelle de non-arrêt, où la question de l'arrêt est indécidable. Ce n'est pas un tel programme.
Il peut être utile de distinguer Turing «fort» de Turing «faible». Les machines de Turing fortes sont en fait infinies et si elles ne s'arrêtent pas, elles fonctionneront pendant une durée infinie. Nous ne pouvons pas les construire.
Les machines de Turing faibles ont des limites finies de temps et d'espace, et ce sont les seules que nous pouvons construire. Nous sommes intéressés par des programmes dont il est impossible de prouver qu'ils s'arrêtent dans ces limites. Turing nous dit qu'il existe de tels programmes mais nous ne pouvons pas les identifier. Si les limites sont suffisamment basses, nous pouvons les identifier en écrivant le programme et en l'exécutant à ses limites.
L'essence de Turing est qu'il n'y a pas de raccourcis. La seule façon d'être certain qu'un problème est réalisable par calcul est d'écrire le programme, de l'exécuter et de le découvrir. Avec suffisamment de temps et d'argent, vous pouvez écrire tous les programmes, les exécuter indéfiniment et dans le temps, et trouver ceux qui produisent des résultats (les licols). Les autres seront toujours en cours d'exécution. Votre collègue a-t-il suffisamment de temps et d'argent pour le faire?
Sérieusement, le différend porte sur les limites. Turing et NP complete nous indiquent que certaines classes de problèmes ne peuvent pas être résolues par des ordinateurs dans un budget donné ou selon un calendrier donné, quelle que soit la taille de ce budget ou la générosité de ce calendrier. Les exemples de ce type de problème abondent: rupture des clés cryptographiques; optimiser les itinéraires pour effectuer des livraisons à des centaines d'adresses; boîtes d'emballage dans des camions; trouver des bugs dans les grands programmes!
Demandez donc à votre collègue un budget et un calendrier et promettez que vous pouvez produire un problème qui ne peut pas être résolu dans ce budget ou ce calendrier. Cette promesse sera très facile à tenir.