Je m'interroge sur le problème suivant. Je n'attends évidemment aucune solution pratique, mais j'apprécierais que les développeurs me fassent part de leurs réflexions à ce sujet :
Serait-il théoriquement possible d'avoir un programme qui ouvre d'autres programmes (pour les besoins de l'argumentation, disons qu'il ouvre des fichiers .exe), et détermine si oui ou non un exécutable particulier, lorsqu'il est exécuté (avec une entrée et un état machine fixes), joue une partie d'échecs (parmi toutes les autres tâches qu'il peut effectuer).
Par "jouer aux échecs", j'entends avoir une représentation quelconque d'un échiquier et de pièces, en appliquant les coups suivants pour les noirs et les blancs provenant d'un moteur d'échecs intégré.
Un tel "programme de détection des échecs" théorique peut contenir une machine virtuelle ou un émulateur de PC ou autre pour simuler réellement l'exécutable analysé si nécessaire. Nous pouvons supposer qu'il fonctionne sur un ordinateur arbitrairement rapide avec ditto ram.
(Edit) En ce qui concerne le problème de l'arrêt, je peux le résoudre comme ceci :
Chargez le programme dans une machine virtuelle, qui dispose de N bits (disque dur, espace mémoire et registres du CPU au total). Cette machine virtuelle peut prendre au maximum 2^N états différents.
Exécutez le programme dans la VM étape par étape. Après chaque étape, vérifiez s'il s'est arrêté. Si oui : problème résolu (résultat : oui, il s'arrête). Si non : prendre l'état actuel de la machine virtuelle, et voir si cet état existe dans une liste d'états que nous avons déjà rencontrés auparavant. Si oui : problème résolu (résultat : non, elle fonctionnera éternellement). Si non : ajouter cet état à la liste et continuer.
Comme il y a au plus 2^N états différents qui peuvent se produire, cet algorithme déterminera si le programme s'arrête ou non avec certitude en un temps fini.
(Edit2) Il semble y avoir une certaine ambiguïté sur l'(in)finitude de l'exécutable scanné ou de la machine (virtuelle) sur laquelle il tourne. Disons que les exécutables à analyser peuvent faire au maximum 1 Go (ce qui devrait être suffisant puisque la plupart des programmes d'échecs sont considérablement plus petits) et qu'ils sont censés fonctionner sur un PC (ou une VM) avec 10 Go de RAM.
Notre programme théorique de détection des échecs peut utiliser une quantité arbitraire de mémoire vive.