Ответы:
Прежде чем я отвечу на ваш общий вопрос, позвольте мне сначала сделать шаг назад, дать некоторую историю и ответить на предварительный вопрос: существуют ли вообще невычислимые функции?
[примечание: мы можем связать любую функцию с языком а затем обсудить разрешимость а не вычислимость ]
Есть некоторые языки, которые не может решить ни одна машина Тьюринга. Аргумент прост: существует «только» счетное количество разных ТМ, но неисчислимо много разных языков. Таким образом, существует не более разрешимых языков, а остальные (бесконечно много) неразрешимы. Дальнейшее чтение:
Чтобы положить руку на определенный неразрешимый язык, идея состоит в том, чтобы использовать технику, называемую диагонализацией (Georg Cantor, 1873), которая первоначально использовалась, чтобы показать, что вещественных чисел больше, чем целых чисел, или, другими словами, что .
Идея создания первого неразрешимого языка проста: мы перечисляем все машины Тьюринга (что возможно, поскольку они рекурсивно перечислимы!) И создаем язык, который не согласуется с каждой ТМ хотя бы на одном входе.
В приведенном выше примере каждая строка представляет собой одну ТМ, а каждый столбец - один вход. Значение ячейки равно 0, если ТМ отклоняет или никогда не останавливается, и 1, если ТМ принимает этот ввод. Мы определяем язык , чтобы D содержал i- тый вход тогда и только тогда, когда i-й ТМ не принимает этот вход.
Следуя приведенной выше таблице, поскольку M 1 принимает ε . Аналогично, 0 ∉ D , но 1 ∈ D, поскольку M 3 не принимает 1 .
Теперь предположим, что решает D и ищем строку k в таблице: если в k-м столбце есть 1 , то M k принимает этот вход, но его нет в D , и если там есть 0 , вход находится в D, но M k не принимает его. Следовательно, M k не решает D , и мы пришли к противоречию.
Теперь на ваш вопрос. Есть несколько способов доказать, что язык неразрешим. Я постараюсь коснуться самых распространенных.
Первый способ, это прямо показать, что язык неразрешим, показывая, что ни один TM не может его решить. Это обычно следует методу диагонализации, показанному выше.
Пример.
Покажите , что (комплемент) диагональной языка неразрешима.
Доказательство.
Предположим , разрешима, и пусть М Д быть его решающая. Есть два случая:
Иногда мы можем использовать свойства замыкания, чтобы показать, что некоторые языки не разрешимы, основываясь на других языках, которые, как мы уже знаем, не разрешимы.
В частности, если не разрешима (мы пишем L ∉ R ), то и ее дополнение ¯ L неразрешимо: если существует решатель M для ¯ L, мы могли бы просто использовать его для определения L , принимая каждый раз, когда M отклоняет, и наоборот. Поскольку M всегда останавливается с ответом (это решающий фактор), мы всегда можем инвертировать его ответ.
Вывод: Диагональный язык неразрешима, L D ∉ R .
Подобный аргумент может быть применен, отметив , что , если оба и его дополнение ¯ L рекурсивно перечислимы, оба разрешимые. Это особенно полезно, если мы хотим доказать, что язык не является рекурсивно перечислимым, что является сильным свойством, чем неразрешимость.
Как правило, довольно трудно непосредственно доказать, что язык неразрешим (если он уже не построен по диагонали). Последний и наиболее распространенный метод доказательства неразрешимости - это использование другого языка, который, как мы уже знаем, неразрешим. Идея состоит в том, чтобы свести один язык к другому: показать, что если один является разрешимым, то другой также должен быть разрешимым, но уже известно, что один из них неразрешим, что приводит к выводу, что первый также неразрешим. Узнайте больше о сокращениях в "Каковы общие методы для уменьшения проблем друг с другом?" ,
Пример.
Покажите , что диагональный язык неразрешим.
Доказательство.
Мы знаем, что неразрешима. Мы уменьшаем L D до H P (это обозначается как L D ≤ H P ), то есть мы показываем, что если бы H P было разрешимым, мы могли бы использовать его решающий элемент для определения L D , что является противоречием.
Сокращение работает путем преобразования кандидата для L D (т.е. вход для любого потенциального Decider / акцептор для L D ) кандидату ш ' для H P таким образом, что ж ∈ L D тогда и только тогда , когда W ' ∈ H P . Мы уверены, что это преобразование вычислимо. Таким образом, решение ш ' говорит нам о том или нет , ж ∈ L D , поэтому , если мы можем решить HP мы будем также в состоянии решить L D .¹
Преобразование происходит следующим образом. Возьми , а выход ш ' = ⟨ M ' , ⟨ M ⟩ ⟩ , ² , где М ' является ТМ , которая ведет себя так же , как М , но если М бракованных, то М ' переходит в бесконечный цикл.
Давайте посмотрим, что удовлетворяют требованиям.
Если вес ∈ L D , это означает , что M привалы и принимает входные данные ⟨ M ⟩ . Таким образом, М ' также останавливается и принимает входной сигнал ⟨ M ⟩ . Таким образом, ⟨ М ' , ⟨ М ⟩ ⟩ ∈ H P .
С другой стороны, если w ∉ L D, то M либо отвергает, либо никогда не останавливается на ⟨
. В обоих случаях М " будет идти в бесконечный цикл на ⟨ M ⟩ . Таким образом, ⟨ М ' , ⟨ М ⟩ ⟩ ∉ Н Р , и мы сделалипоказывающиечто ж ∈ L D тогда и только тогдакогда W ' ∈ Н Р , и, таким образом показаночто Н P ∉ R .
Дальнейшее чтение: множество примеров сокращений и доказательств неразрешимости языков можно найти с помощью тега сокращений .
Есть еще некоторые ограничения на снижение, чтобы быть действительным. Само преобразование должно быть вычислимо и четко определено для любого ввода.
Вход выглядит как ⟨ М , х ⟩ , где М представляет собой ТМ и х является некоторой строкой. Итак, здесь мы выбираем строку x как кодировку машины M , которая является просто некоторой строкой ..
«Таким образом, каждый раз, когда мы хотим доказать, что неразрешима, нам нужно уменьшать L D (или H P ) до него?
Ну, на самом деле, есть. Это теорема Райса .
Теорема гласит, что многие языки, имеющие определенную структуру, неразрешимы. Поскольку все эти языки имеют эту определенную структуру, мы можем сделать сокращение один раз и применить его к любому языку, который допускает подобную структуру.
Теорема формально сформулирована следующим образом,
Множество является подмножеством языков в ; мы называем это свойством, потому что оно описывает свойство принятого языка . Все ТМ, язык которых удовлетворяет этому свойству, принадлежат .
Например, может быть тем свойством, что принятый язык содержит ровно два слова:
В этом случае - это множество всех ТМ, язык которых состоит ровно из двух слов:
Свойство может быть очень простым, но это не может быть все языки RE или ни один из языков RE. Если или то свойство называется тривиальным , и индуцированный вычислим. Примером простого является тот, который содержит только один язык, скажем, . Обратите внимание, что хотя содержит только один язык, существует бесконечно много машин с языком , поэтому бесконечен и неразрешим.
Теорема очень сильна, чтобы доказать неразрешимость многих языков.
Пример.
Язык , неразрешима
Доказательство.
Мы можем написать как , то есть для свойства . Это нетривиальное свойство (оно включает язык , но не включает, например, язык . Следовательно, по теореме Райса неразрешима.
Теперь докажем теорему. Как упоминалось выше, мы собираемся показать сокращение от до (для любого произвольного нетривиального ).
Доказательство.
Пусть - нетривиальное свойство, . Мы показываем , то есть мы уменьшаем до так что если мы сможем решить мы сможем решить (что, как мы знаем, невозможно, поэтому не может быть разрешимым). В доказательстве ниже мы предполагаем , что пустой язык не является частью , то есть . (если пустой язык находится в , эквивалентное доказательство работает со свойством дополнения , я опущу детали). Снетривиален, включает в себя хотя бы один язык; давайте назовем этот язык и предположим, что - это машина, которая принимает (такая машина существует, поскольку включает только языки в RE).
Напомним, что при таком сокращении (см. Раздел 3 выше) нам нужно показать, как преобразовать вход для во вход для чтобы
Пусть , мы конвертируем его в где описание машины (на входе ) следующее:
Мы видим, что это преобразование действительно. Сначала отметим, что описание просто построить с учетом .
Если , то останавливается на . В этом случае переходит к шагу 2 и ведет себя так же, как . Поэтому его общепринятый язык . Следовательно, .
Если то зацикливается на . Этот случай, петли на любом входе - она застревает на этапе 1. язык , принимаемый в этом случае пусто, . Следовательно, .
Теорема Райс дает нам простой способ показать , что определенный язык , который удовлетворяет определенные свойства неразрешимы, то есть . Расширенная версия теоремы Райса позволяет нам определить, является ли язык рекурсивно-перечислимым или нет, то есть определяет ли , проверяя, удовлетворяет ли некоторым дополнительным свойствам.
Теорема (Райс, расширенная). Учитывая свойство , язык является рекурсивно-перечислимым ( ) тогда и только тогда, когда все следующие три утверждения совместно держать
- Для любых двух , если , а также затем также .
- Если , то существует конечное подмножество так , что .
- Множество всех конечных языков в перечислимо (другими словами: существует TM, который перечисляет все конечные языки ).
Доказательство.
Это теорема «тогда и только тогда», и мы должны доказать оба ее направления. Сначала покажем, что если одно из условий (1,2,3) не выполняется, то . После этого мы покажем, что если все три условия выполняются одновременно, то .
Если (1,2) выполнено, а (3) нет, то .
Предположим, что , и мы увидим, что у нас есть способ принять любые конечные языки в (и, таким образом, множество всех этих языков есть RE), таким образом, условие (3) выполняется, и мы достигаем противоречия , Как решить , если конечная принадлежит или нет? Легко - мы используем описание для построения машины которая принимает только слова в , и теперь мы запускаем машину на (помните - мы предполагали , поэтому есть машина, которая принимает!). Если то и, поскольку , его машина скажет «да» на входе , и все готово.
Если (2,3) выполнено, а (1) нет, то .
Мы предполагаем, что и мы покажем, что у нас есть способ определить , что приводит к противоречию.
Поскольку условие (1) не выполняется, есть язык и надстройкой из него, так , что . Теперь мы собираемся повторить аргумент, использованный в Разделе 4 для определения : учитывая ввод для , мы создаем машину , язык которой равен если или иначе, его язык - . Затем мы можем решить : либо останавливается на , либо RE-машина для принимает; мы можем работать как параллельно, так и по крайней мере один из них будет остановлен.
Давайте дадим детали построения (на входе ):
Почему это работает? Если то 1.1 никогда не останавливается, и принимает точно все входные данные, которые принимаются на шаге 1.2, поэтому . С другой стороны, если то в какой-то момент шаг 1.1 останавливается, и принимает именно . Может случиться, что принимает заранее, но так как , это не меняет язык в этом случае.
Если (1,3) выполнено, а (2) нет, то .
Мы снова примем и покажем, что становится разрешимой, что является противоречием.
Если условие (2) не выполняется, то для любого все его конечные подмножества удовлетворяют (обратите внимание, что должен быть бесконечным, поскольку ). Как и в чтобы определить для данного входа , мы создаем машину , язык которой равен если и некоторых конечных иначе. Противоречие следует так же, как и выше.
Конструкция этой машины очень похожа на предыдущую мы построили. Машина (на входе ) делает:
Утверждается, что если , то в некоторый момент, скажем, после 1000 шагов, останавливается на . Следовательно, шаг 1 остановит (и отклонит) любой ввод длиной . Таким образом, в этом случае является конечным . Также отметим , что и , в частности, в силу наших предположений о недействительности условия (2), получим , что .
С другой стороны, если , то шаг 1 никогда не останавливается, и мы никогда не отказываемся на шаге 2. В этом случае легко увидеть, что и в частности, .
Нам осталось показать другое направление расширенной теоремы. То есть нам нужно показать, что если все условия (1,2,3) выполнены, то у нас есть ТМ, который принимает , то есть . Другими словами, нам нужно показать машину чтобы для любого ввода для которого , машина принимает этот ввод, .
Вот как себя машина (на входе ):
Почему это работает? Если то у него есть конечное подмножество , и как только выведет это подмножество, шаг 2.2 / 2.3 обнаружит, что принимает все слова на этом языке и принимаем.
С другой стороны, если может не быть принимать все слова в для любого . Действительно, по условию (1) любой также находится в , поэтому, если принимает все слова в для некоторого , то и, следовательно, , в противоречии.
Наконец, обратите внимание, что следующее является простым (и очень полезным) следствием вышесказанного:
Следствие (Рис, расширенный). Учитывая нетривиальное свойство , так что , язык не является рекурсивно-перечислимым, то есть .
Одним из полезных инструментов является теорема Райса . Вот что это говорит:
Пусть нетривиальным множество частично вычислимых функций одинарных и Гедель нумерации из . Тогда индекс набора
не является рекурсивным
Вы также найдете это в терминах кодировок машин Тьюринга (или любого другого языка программирования, полного Тьюринга), то есть ; здесь определяет нумерацию Гёделя.
То есть, вы можете использовать теорему Райса, чтобы доказать, что такие множества нерекурсивны и являются индексными множествами нетривиальных наборов функций (или такие сводимы к )
Обратите внимание, что есть расширение, которое можно использовать, чтобы показать, что определенные наборы индексов не являются рекурсивно перечисляемыми.
Пусть нумерация Гёделя. Рассмотрим множество натуральных
.
Теперь, поскольку для
Теорема Райса может быть применена, и не разрешима.
Поскольку многие не знакомы с нумерациями Гёделя, обратите внимание, что этот пример также работает в терминах машин Тьюринга (т. Программ) с использованием .
Рассмотрим множество натуральных
что, конечно, не вычислимо. Однако не является индексом, установленным для любого ! Пусть для некоторого . Поскольку является нумерацией Гёделя , существует (бесконечно много) с но для всех выполняется, потому что .
Будьте осторожны с этим! Как правило, если индекс функции используется «с правой стороны» или в качестве параметра функции в определении набора, скорее всего, это не набор индексов. Вам может понадобиться свойство нумерации Геделя и теорема о фиксированной точке, чтобы показать, что набор не является индексным набором.
Смотрите здесь и здесь для связанных постов по теореме Райс.