Si le problème d'arrêt est trop obscur, pensez-y de cette façon.
Prenons un problème mathématique qui est censé être vrai pour tous les n entiers positifs , mais qui n'a pas été prouvé pour tous les n . Un bon exemple serait la conjecture de Goldbach, selon laquelle tout entier pair positif supérieur à deux peut être représenté par la somme de deux nombres premiers. Ensuite (avec une bibliothèque bigint appropriée) exécutez ce programme (le pseudocode suit):
for (BigInt n = 4; ; n+=2) {
if (!isGoldbachsConjectureTrueFor(n)) {
print("Conjecture is false for at least one value of n\n");
exit(0);
}
}
L'implémentation de isGoldbachsConjectureTrueFor()
est laissée comme un exercice pour le lecteur mais à cette fin pourrait être une simple itération sur tous les nombres premiers inférieurs àn
Maintenant, logiquement, ce qui précède doit être soit l'équivalent de:
for (; ;) {
}
(c'est-à-dire une boucle infinie) ou
print("Conjecture is false for at least one value of n\n");
car la conjecture de Goldbach doit être vraie ou fausse. Si un compilateur pouvait toujours éliminer le code mort, il y aurait certainement du code mort à éliminer ici dans les deux cas. Cependant, ce faisant, votre compilateur devra au moins résoudre des problèmes arbitrairement difficiles. Nous pourrions fournir des problèmes prouvablement dur qu'il faudrait résoudre (par exemple les problèmes NP-complets) pour déterminer quel bit de code à éliminer. Par exemple, si nous prenons ce programme:
String target = "f3c5ac5a63d50099f3b5147cabbbd81e89211513a92e3dcd2565d8c7d302ba9c";
for (BigInt n = 0; n < 2**2048; n++) {
String s = n.toString();
if (sha256(s).equals(target)) {
print("Found SHA value\n");
exit(0);
}
}
print("Not found SHA value\n");
nous savons que le programme imprimera soit "Valeur SHA trouvée" soit "Valeur SHA non trouvée" (points bonus si vous pouvez me dire laquelle est vraie). Cependant, pour qu'un compilateur puisse raisonnablement optimiser cela prendrait de l'ordre de 2 ^ 2048 itérations. Ce serait en fait une excellente optimisation car je prédis que le programme ci-dessus fonctionnerait (ou pourrait) fonctionner jusqu'à la mort thermique de l'univers plutôt que d'imprimer quoi que ce soit sans optimisation.