Si el problema de detención es demasiado oscuro, piénselo de esta manera.
Tome un problema matemático que se cree que es verdadero para todos los enteros positivos n , pero no se ha demostrado que sea cierto para todos los n . Un buen ejemplo sería la conjetura de Goldbach , de que cualquier entero positivo incluso mayor que dos puede representarse por la suma de dos números primos. Luego (con una biblioteca bigint apropiada) ejecute este programa (sigue el pseudocódigo):
for (BigInt n = 4; ; n+=2) {
if (!isGoldbachsConjectureTrueFor(n)) {
print("Conjecture is false for at least one value of n\n");
exit(0);
}
}
La implementación de isGoldbachsConjectureTrueFor()
se deja como un ejercicio para el lector, pero para este propósito podría ser una simple iteración sobre todos los números primos menores quen
Ahora, lógicamente, lo anterior debe ser el equivalente de:
for (; ;) {
}
(es decir, un bucle infinito) o
print("Conjecture is false for at least one value of n\n");
como la conjetura de Goldbach debe ser verdadera o no verdadera. Si un compilador siempre pudiera eliminar el código muerto, definitivamente habría un código muerto para eliminar aquí en cualquier caso. Sin embargo, al hacerlo al menos su compilador necesitaría resolver problemas arbitrariamente difíciles. Podríamos proporcionar problemas demostrablemente difíciles que tendría que resolver (por ejemplo, problemas de NP completo) para determinar qué bit de código eliminar. Por ejemplo, si tomamos este programa:
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");
sabemos que el programa imprimirá "Valor SHA encontrado" o "Valor SHA no encontrado" (puntos de bonificación si puede decirme cuál es el verdadero). Sin embargo, para que un compilador pueda optimizar razonablemente eso tomaría del orden de 2 ^ 2048 iteraciones. De hecho, sería una gran optimización, ya que predigo que el programa anterior se ejecutará (o podría) hasta la muerte por calor del universo en lugar de imprimir cualquier cosa sin optimización.