Если проблема остановки слишком неясна, подумайте об этом следующим образом.
Возьмите математическую задачу, которая, как полагают, верна для всех n положительных чисел , но не доказана, чтобы быть верной для каждого n . Хорошим примером может служить гипотеза Гольдбаха о том , что любое положительное целое число, большее двух, может быть представлено суммой двух простых чисел. Затем (с соответствующей библиотекой bigint) запустите эту программу (псевдокод следует):
for (BigInt n = 4; ; n+=2) {
if (!isGoldbachsConjectureTrueFor(n)) {
print("Conjecture is false for at least one value of n\n");
exit(0);
}
}
Реализация isGoldbachsConjectureTrueFor()
оставлена в качестве упражнения для читателя, но для этой цели может быть простая итерация по всем простым числам меньше, чемn
Теперь, по логике, вышеприведенное должно быть эквивалентно:
for (; ;) {
}
(т.е. бесконечный цикл) или
print("Conjecture is false for at least one value of n\n");
так как гипотеза Гольдбаха должна быть либо верной, либо неверной. Если бы компилятор всегда мог устранить мертвый код, то в любом случае здесь обязательно был бы мертвый код. Однако при этом, по крайней мере, ваш компилятор должен будет решать сколь-нибудь сложные задачи. Мы могли бы обеспечить проблемы доказуемо трудно , что бы решить (например , NP-полных задач) , чтобы определить , какой бит кода устранить. Например, если мы возьмем эту программу:
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");
мы знаем, что программа распечатает «Найденное значение SHA» или «Не найденное значение SHA» (бонусные баллы, если вы можете сказать мне, какое из них истинно). Однако, чтобы компилятор мог разумно оптимизировать процесс, он бы занимал порядка 2 ^ 2048 итераций. На самом деле это была бы отличная оптимизация, так как я предсказываю, что вышеуказанная программа будет (или может) работать до тепловой смерти вселенной, а не печатать что-либо без оптимизации.