Відповіді:
Перш ніж відповісти на ваше загальне запитання, дозвольте мені спершу зробити крок назад, дати деяку історію історії та відповісти на попереднє запитання: Чи існують навіть не обчислювані функції?
[примітна примітка: ми можемо пов’язати будь-яку функцію з мовою а потім обговорити можливість визначення а не обчислюваність ]L f = { ( x , y ) ∣ y = f ( x ) } L f f
Є кілька мов, які жодна машина Тьюрінга не може вирішити. Аргумент простий: є "лише" безліч різних ТМ, але незліченно багато різних мов. Таким чином, є щонайбільше мови, які можна визначити, а решта (нескінченно багато) не можна визначити. Подальше читання:( ℵ ) ℵ 0
Для того, щоб поставити руку на певну невідрізну мову, ідея полягає у використанні методики, названої діагоналізацією (Георг Кантор, 1873), яка спочатку використовувалася для того, щоб показати, що існує більше реальних чисел, ніж цілих чисел, або іншими словами, що .
Ідея побудови першої невідкладної мови проста: ми перераховуємо всі машини Тьюрінга (що можливо, оскільки їх рекусивно перелічують!), І створимо мову, яка не погоджується з кожною TM на щонайменше одному вході.
У вищесказаному кожен рядок - одна TM, а кожен стовпець - один вхід. Значення комірки дорівнює 0, якщо TM відхиляє або ніколи не зупиняється, і 1, якщо TM приймає цей ввід. Ми визначаємо мову такою, що містить -й вхід тоді і тільки тоді, коли -й TM не приймає цей ввід.D i i
Дотримуючись таблиці вище, оскільки приймає . Аналогічно , але оскільки не приймає .M 1 ε 0 ∉ D 1 ∈ D M 3 1
Тепер, припустимо, вирішує і шукає рядок у таблиці: якщо в -му стовпці є , то приймає цей вхід, але він не знаходиться в , а якщо є , вхід знаходиться в але не приймає. Тому не вирішує , і ми дійшли до суперечності. D k 1 k M k D 0 D M k M k D
Тепер до вашого питання. Існує кілька способів довести, що мова не можна визначити. Спробую торкнутися найпоширеніших.
Перший метод - це безпосередньо показати, що мова не може бути визначеною, показавши, що жодна TM не може її вирішити. Це звичайно слід методом діагоналізації, показаним вище.
Приклад.
Покажіть, що (доповнення) діагональної мови можна визначити.
Доказ.
Припустимо, що визначається, і нехай є його рішенням. Є два випадки: MD
Іноді ми можемо використовувати властивості закриття, щоб показати, яку мову не можна вирішити, на основі інших мов, про які ми вже знаємо, що їх не можна вирішити.
Зокрема, якщо не визначається (пишемо ), то також його доповнення визначається: якщо є рішення для ми можемо просто використовувати його для вирішення , приймаючи щоразу відкидає і навпаки. Оскільки завжди зупиняється з відповіддю (це рішення), ми завжди можемо перевернути її відповідь.L ∉ R ¯ L M ¯ L L M M
Висновок: Діагональна мову нерозв'язна, . L D ∉R
Аналогічний аргумент може бути застосований, зазначивши, що якщо і і його доповнення є рекурсивно перелічуваними, обидва можна вирішити. Це особливо корисно, якщо ми хочемо довести, що мова не є рекурсивно перелічуваною, сильнішою властивістю, ніж нерозбірливість.¯ L
Зазвичай досить важко безпосередньо довести, що мова не може бути визначеною (якщо вона вже не побудована "діагонально"). Останній і найпоширеніший метод доказу невідповідності - це використання іншої мови, про яку ми вже знаємо, що її не можна визначити. Ідея полягає в тому, щоб звести одну мову до іншої: показати, що якщо одна рішуча, то інша також повинна бути рішучою, але одна з них уже відома як невирішальна, що призводить до висновку, що перша також не визначається. Детальніше про скорочення читайте в розділі "Які загальні методи для зменшення проблем один одного?" .
Приклад.
Покажіть, що діагональна мова визначається.
Доказ.
Ми знаємо, що можна визначити. Ми зменшуємо до (це позначається ), тобто ми показуємо, що якщо було вирішальним, ми могли б використовувати його рішення для визначення , що є протиріччям.L D H P L D ≤ H P H P L D
Скорочення працює шляхом перетворення кандидата для (тобто вхід для будь-якого потенційного рішення / акцептора для ) до кандидата для такого, що якщо і тільки якщо . Ми переконуємося, що це перетворення обчислюється. Таким чином, рішення говорить нам, чи , тож якщо ми можемо вирішити HP, ми також зможемо визначити .¹L D L D w ′ H P w ∈ L D w ′ ∈ H P w ′ w ∈ L D L D
Перетворення відбувається наступним чином. Візьміть деякий , і виведіть , ² де - це TM, який поводиться так само, як , але якщо відхиляє, тоді переходить у нескінченну петлю.ш ' = ⟨ M ' , ⟨ М ⟩ ⟩ М ' М М М '
Подивимось, що задовольняти вимоги.
Якщо , це означає, що зупиняє та приймає вхід . Тому також зупиняє та приймає вхід . Таким чином, .
З іншого боку, якщо то або відхиляє, або ніколи не зупиняється на . В обох випадках перейде в нескінченний цикл на . Таким чином, ш ∈ L Д М ⟨ М ⟩ М ' ⟨ М ⟩ ⟨ М ' , ⟨ М ⟩ ⟩ ∈ H P ш ∉ L Д М ⟨ М ⟩ М ' ⟨ М ⟩ ⟨ M ' , ⟨ М ⟩ ⟩ ∉ H P w ∈ L D w ′ ∈ H P
, І ми зробили , що показують , що тоді і тільки тоді , коли , і , таким чином , показали , що .
Подальше читання: безліч прикладів скорочень та доказування невизначеності мов можна знайти за допомогою тегу скорочень .
Існує ще деяке обмеження щодо зменшення, яке є дійсним. Саме перетворення повинно бути обчислюваним та чітко визначеним для будь-якого введення.
Вхід виглядає як , де - TM, а - рядок. Отже, тут ми вибираємо рядок для кодування машини , яка є лише деякою рядком.⟨ М , х ⟩ М х х М
"Отже, кожного разу, коли ми хочемо довести, що визначається, нам потрібно зменшити (або ) до нього? Чи немає ярлика?"L D H P
Ну, насправді, є. Це теорема Райса .
Теорема говорить, що багато мов, які мають певну структуру, не можна визначити. Оскільки всі ці мови мають певну структуру, ми можемо скоротити один раз і застосувати його до будь-якої мови, яка має подібну структуру.
Теорема формально викладена наступним чином,
Теорема (Рис). Враховуючи властивість , наступна мова визначається
Набір - це підмножина мов у ; ми називаємо це властивістю, оскільки воно описує властивість прийнятої мови . Усі ТМ, мова яких задовольняє цю властивість, належать .
Наприклад, може бути властивістю того, що прийнята мова містить рівно два слова:
У цьому випадку - це набір усіх ТМ, мова яких складається з рівно двох слів:
Властивість може бути дуже простою, але вона не може бути всіма мовами RE або жодною з мов RE. Якщо або то властивість вважається тривіальною , а індукований - обчислюваною. Приклад для простого - це той, що містить лише одну мову, скажімо, . Зауважимо, що хоча містить лише одну мову, існує нескінченно багато машин , мова яких є , тому нескінченно і не можна визначити.
Теорема є дуже потужною для підтвердження невідповідності багатьох мов.
Приклад.
Мова , не можна визначити
Доказ.
Ми можемо записати як , тобто для властивості . Це нетривіальна властивість (вона включає мову , але не включає, наприклад, мову . Отже, за теоремою Райса, визначається.
Тепер доведемо теорему. Як було сказано вище, ми будемо показувати зниження від до (для будь-яких довільних нетривіальних ).
Доказ.
Нехай - нетривіальна властивість, . Ми показуємо , тобто зменшуємо до так що якщо ми можемо вирішити ми зможемо вирішити (який, як ми знаємо, неможливий, отже, не можна визначити). У доказі нижче ми припускаємо , що порожній мова не є частиною , тобто . (якщо порожня мова знаходиться в , еквівалентний доказ працює на властивість доповнення , я опущу деталі). Оскількинетривіальний, він включає принаймні одну мову; давайте назвемо цю мову і припустимо, що - це машина, яка приймає (така машина існує, оскільки включає лише мови в RE).
Нагадаємо, що при такому зменшенні (див. Розділ 3 вище) нам потрібно показати, як перетворити вхід для у вхід для щоб
Нехай , ми перетворюємо його в де опис машини (на вході ) такий:
Ми бачимо, що ця конверсія є дійсною. Спершу зауважте, що просто побудувати опис заданого .
Якщо , то зупиняється на . У цьому випадку переходить до кроку 2 і поводиться так само, як . Тому його загальноприйнята мова . Тому .
Якщо то петлі на . Цей випадок, петлі на будь-якому вході - вона застряє на етапі 1. мову , що приймається в цьому випадку порожньо, . Тому .
Теорема Райс дає нам простий спосіб показати , що певний мову , який задовольняє певні властивості нерозв'язні, тобто . Розширена версія теореми Райса дозволяє нам визначити, мова є рекурсивно-перелічуваною чи ні, тобто визначає, чи відповідає , перевіряючи, чи задовольняє якісь додаткові властивості.
Теорема (Рис, розширена). З огляду на властивість , мова є рекурсивно-перелічувальною ( ), якщо і лише якщо всі наступні три твердження спільно тримати
- Для будь-яких двох , якщо , а також потім також .
- Якщо , то існує кінцеве підмножина так , що .
- Набір усіх кінцевих мов у безліч (іншими словами: є ТМ, який перераховує всі кінцеві мови ).
Доказ.
Це теорема "якщо і тільки якщо", і ми повинні довести обидва її напрямки. Спочатку ми покажемо, що якщо одна з умов (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) будь-який також є в , тому якщо приймає всі слова в для , тоді і, отже, , в суперечності.
Нарешті, зауважте, що наступне є простим (і дуже корисним) наслідком із зазначеного:
Висновок (Рис, розширений). З огляду на нетривіальне властивість , так що мова не є рекурсивно-перелічувальною, тобто .
Один корисний інструмент - теорема Райса . Ось що це говорить:
Нехай нетривіальним безліч частково обчислюваних функцій одинарних і Гедель нумерації з . Потім набір індексів
не є рекурсивним.
Ви знаходите це також у виразах кодування машин Тьюрінга (або будь-якої іншої мови програмування Тюрінга), тобто ; тут визначає нумерацію Геделя.
Тобто, ви можете використовувати теорему Райса, щоб довести такі множини нерекурсивні, що є наборами індексів нетривіальних наборів функцій (або таких можна звести до ).
Зауважте, що існує розширення, яке може бути показано, що певні набори індексів не є рекурсивно перелічуваними.
Нехай нумерація Геделя. Розглянемо безліч натуралів
.
Тепер, оскільки для
Теорема Райса може бути застосована, а не вирішується.
Оскільки багато хто не знайомий з нумерацією Gödel, зауважте, що приклад працює добре також і в машинах Тьюрінга (тобто програм), використовуючи .
Розглянемо безліч натуралів
що, звичайно, не піддається обчисленню. Однак не є набором індексу для жодного ! Нехай для деякого . Так є Гедель нумерації, є (нескінченно багато) з , але для всіх має місце тому , що .
Будьте обережні! Як правило, якщо індекс функції використовується в "правій частині" або як параметр функції в заданому визначенні, він, швидше за все, не є набором індексу. Вам може знадобитися властивість нумерації Gödel та теореми фіксованих точок, щоб показати, що множина не задана індексом.
Дивіться тут і тут для пов’язаних публікацій про теорему Райса.