Причина, по которой невозможно ответить на вопрос " - программа 'while (System.in.readline ()) {}' остановится? " в том, что ввод не указан, поэтому в данном конкретном случае проблема заключается в отсутствии информации, а не в неразрешимости.
Проблема остановки заключается в невозможности построения общего алгоритма, который, когда он снабжен как программой, так и входом, всегда может определить, будет ли эта программа с этим входом завершена или будет работать вечно.
В проблеме остановки и программа, и ввод могут быть произвольно большими, но они должны быть конечными.
Кроме того, не существует конкретного экземпляра ' program + input ', который сам по себе неразрешим: с учетом конкретного экземпляра всегда можно (в принципе) построить алгоритм, который анализирует этот экземпляр и / или класс экземпляров, и вычисляет правильный ответ.
Однако, если проблема неразрешима, то независимо от того, сколько раз был расширен алгоритм для правильного анализа дополнительных экземпляров или классов экземпляров, процесс никогда не закончится: всегда будет возможно найти новые экземпляры, которые Алгоритм не сможет отвечать, если он не будет расширен.
Я бы сказал, что большая буква " while (System.in.readline ()) {} " равна O (n), где n - размер ввода (можно увидеть программу в качестве основы, например, программы подсчета строк).
В этом случае определяется большой O, потому что для каждого ввода конечного размера программа останавливается.
Таким образом, вопрос, который нужно задать, может быть следующим: « останавливает ли программа все возможные конечные входные данные, которые ей могут быть предоставлены? »
Если этот квестон можно свести к проблеме остановки или любой другой неразрешимой проблеме, то он неразрешим.
Оказывается, его можно уменьшить, как пояснено здесь:
https://cs.stackexchange.com/questions/41243/halting-problem-reduction-to-halting-for-all-inputs
Неразрешимость является свойством проблем и не зависит от языков программирования, которые используются для создания программ, работающих на одних и тех же машинах. Например, вы можете считать, что любая программа, написанная на функциональном языке программирования, может быть скомпилирована в машинный код, но этот же машинный код может быть создан эквивалентной программой, написанной на ассемблере, поэтому с точки зрения машины Тьюринга функциональные языки программирования больше не являются мощнее, чем языки ассемблера.
Кроме того, неразрешимость не помешает алгоритму рассчитать большое значение O для бесчисленного (теоретически бесконечного) числа программ, поэтому любые усилия по созданию алгоритма для этой цели не обязательно будут бессмысленными.