Se o problema da parada for muito obscuro, pense dessa maneira.
Pegue um problema matemático que se acredita verdadeiro para todo número inteiro positivo n , mas que não foi provado verdadeiro para todo n . Um bom exemplo seria a conjectura de Goldbach , de que qualquer número inteiro positivo maior que dois pode ser representado pela soma de dois números primos. Em seguida (com uma biblioteca bigint apropriada), execute este programa (segue o 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);
}
}
A implementação de isGoldbachsConjectureTrueFor()
é deixada como um exercício para o leitor, mas para esse propósito pode ser uma iteração simples sobre todos os números primos menores quen
Agora, logicamente, o acima deve ser o equivalente a:
for (; ;) {
}
(ou seja, um loop infinito) ou
print("Conjecture is false for at least one value of n\n");
como a conjectura de Goldbach deve ser verdadeira ou não verdadeira. Se um compilador sempre pudesse eliminar o código morto, definitivamente haveria código morto a ser eliminado aqui em ambos os casos. No entanto, ao fazer isso, pelo menos, seu compilador precisaria resolver problemas arbitrariamente difíceis. Poderíamos fornecer problemas comprovadamente difíceis que precisariam ser resolvidos (por exemplo, problemas de NP-completos) para determinar qual parte do código eliminar. Por exemplo, se usarmos 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 o programa imprimirá "Valor SHA encontrado" ou "Valor SHA não encontrado" (pontos de bônus se você puder me dizer qual é o verdadeiro). No entanto, para um compilador ser capaz de otimizar razoavelmente isso levaria da ordem de 2 ^ 2048 iterações. Seria, de fato, uma ótima otimização, pois eu prevejo que o programa acima funcionaria (ou poderia) até a morte pelo calor do universo, em vez de imprimir qualquer coisa sem otimização.