Se il problema di arresto è troppo oscuro, pensaci in questo modo.
Prendi un problema matematico che si ritiene sia vero per tutti gli interi positivi n , ma non è stato dimostrato che sia vero per ogni n . Un buon esempio sarebbe la congettura di Goldbach , secondo cui qualsiasi numero intero pari positivo maggiore di due può essere rappresentato dalla somma di due numeri primi. Quindi (con una libreria bigint appropriata) esegui questo programma (segue lo pseudocodice):
for (BigInt n = 4; ; n+=2) {
if (!isGoldbachsConjectureTrueFor(n)) {
print("Conjecture is false for at least one value of n\n");
exit(0);
}
}
L'implementazione di isGoldbachsConjectureTrueFor()
è lasciata come esercizio per il lettore, ma a questo scopo potrebbe essere una semplice iterazione su tutti i numeri primi di menon
Ora, logicamente, quanto sopra deve essere equivalente a:
for (; ;) {
}
(ovvero un ciclo infinito) o
print("Conjecture is false for at least one value of n\n");
poiché la congettura di Goldbach deve essere vera o no. Se un compilatore potesse sempre eliminare il codice morto, ci sarebbe sicuramente un codice morto da eliminare qui in entrambi i casi. Tuttavia, almeno così facendo il compilatore dovrebbe risolvere problemi arbitrariamente difficili. Potremmo fornire problemi dimostrabilmente duro che avrebbe dovuto risolvere i problemi (es NP-completi) per determinare quale porzione di codice per eliminare. Ad esempio se prendiamo questo programma:
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");
sappiamo che il programma stamperà "Valore SHA trovato" o "Valore SHA non trovato" (punti bonus se puoi dirmi quale è vero). Tuttavia, affinché un compilatore sia in grado di ottimizzare ragionevolmente ciò richiederebbe l'ordine di 2 ^ 2048 iterazioni. Sarebbe in effetti una grande ottimizzazione poiché prevedo che il programma di cui sopra sarebbe (o potrebbe) funzionare fino alla morte per calore dell'universo piuttosto che stampare qualsiasi cosa senza ottimizzazione.