Потому что многие действительно практические проблемы являются скрытой проблемой остановки. Их решение решает проблему остановки.
Вам нужен компилятор, который находит максимально быстрый машинный код для данной программы? На самом деле проблема остановки.
У вас есть JavaScript с некоторыми переменными с высоким уровнем безопасности, а некоторые с низким уровнем безопасности. Вы хотите убедиться, что злоумышленник не может получить информацию с высоким уровнем безопасности. Это тоже просто проблема остановки.
У вас есть парсер для вашего языка программирования. Вы изменяете его, но хотите убедиться, что он все еще анализирует все программы, к которым он привык. На самом деле проблема остановки.
У вас есть антивирусная программа, и вы хотите увидеть, выполняет ли она когда-либо вредоносную инструкцию. На самом деле просто проблема остановки.
Что касается примера из Википедии, то да, вы можете смоделировать современный компьютер как конечный автомат. Но есть две проблемы с этим.
Каждый компьютер будет различным автоматом, в зависимости от точного количества бит оперативной памяти. Так что это бесполезно для проверки конкретного фрагмента кода, так как автомат зависит от машины, на которой он может работать.
Вам понадобится состояний, если у вас n бит ОЗУ. Так что для вашего современного компьютера на 8 ГБ это . Это число настолько велико, что вольфрам альфа даже не знает, как его интерпретировать. Когда я делаю он говорит, что у него десятичных цифр. Это явно слишком много для хранения на обычном компьютере.2 32000000000 2 10 9 3000000002N2320000000002109300000000
Проблема остановки позволяет нам рассуждать об относительной сложности алгоритмов. Это позволяет нам знать, что существуют некоторые алгоритмы, которых не существует, и что иногда все, что мы можем сделать, - это угадать проблему и никогда не узнать, решили ли мы ее.
Если бы у нас не было проблемы с остановкой, мы все равно искали бы магический алгоритм Гильберта, который вводит теоремы и выводит, верны они или нет. Теперь мы знаем, что можем перестать искать, и мы можем приложить наши усилия к поиску эвристики и лучших методов решения этих проблем.
ОБНОВЛЕНИЕ: Просто для решения пары вопросов, поднятых в комментариях.
@Tyler Fleming Cloutier: «бессмысленная» проблема возникает в доказательстве того, что проблема остановки неразрешима, но в основе неразрешимости действительно лежит бесконечное пространство поиска. Вы ищете объект с заданным свойством, и если он не существует, нет способа узнать, когда вы закончите.
Сложность проблемы может быть связана с количеством квантификаторов. Пытаясь показать, что существует ( ) объект с произвольным свойством, вы должны искать, пока не найдете его. Если ничего не существует, нет способа (в общем) узнать это. Доказать, что все объекты ( ) имеют свойство, сложно, но вы можете искать объект без свойства, чтобы опровергнуть его. Чем больше чередований между и существует, тем сложнее проблема.∀∃∀
Подробнее об этом смотрите Арифметическая Иерархия . Все что выше неразрешимо, хотя уровень 1 полуразрешим.Σ00=Π00
Также возможно показать, что есть неразрешимые проблемы, не используя бессмысленный парадокс, такой как проблема Остановки или парадокс Лжецов. Машина Тьюринга может быть закодирована с использованием цепочки битов, то есть целого числа. Но проблема может быть закодирована как язык, то есть подмножество целых чисел. Известно, что между множеством целых чисел и множеством всех подмножеств целых чисел нет биекции. Поэтому должны быть некоторые проблемы (языки), которые не имеют связанной машины Тьюринга (алгоритма).
@ Брент: да, это признает, что это решаемо для современных компьютеров. Но это решаемо для конкретной машины. Если вы добавляете USB-накопитель с дисковым пространством, или возможностью хранить в сети, или что-то еще, то машина изменилась, и результат по-прежнему не сохраняется.
Также необходимо сказать, что во многих случаях алгоритм говорит «этот код остановится», потому что в этом случае код завершится сбоем и закончится нехватка памяти, и что добавление одного дополнительного бита памяти приведет к тому, что код добиться успеха и дать другой результат.
Дело в том, что машины Тьюринга не имеют бесконечного количества памяти. Никогда не бывает времени, когда на ленту записывается бесконечное количество символов. Вместо этого машина Тьюринга имеет «неограниченную» память, а это означает, что вы можете получать больше источников памяти, когда вам это нужно. Компьютеры такие. Вы можете добавить ОЗУ или USB-накопители, или жесткие диски, или сетевое хранилище. Да, у вас заканчивается память, когда у вас заканчиваются атомы во вселенной. Но неограниченная память - гораздо более полезная модель.