Чи вирішується проблема зупинки для чистих програм на ідеальному комп'ютері?


25

Досить просто зрозуміти, чому проблема зупинки не вирішується для нечистих програм (тобто тих, у яких введення / виведення та / або стани залежать від стан-глобального стану машини); але інтуїтивно зрозуміло, що зупинка чистої програми на ідеальному комп'ютері може бути вирішена за допомогою, наприклад, статичного аналізу.

Це насправді так? Якщо ні, то які контрприклади чи документи, що спростовують це твердження?


35
Зауважте, що стандартні докази того, що проблема зупинки не визначається (наприклад, описана у wikipedia: en.wikipedia.org/wiki/Halting_problem#Sketch_of_proof ), усі працюють з моделями обчислень, які навіть не намагаються представляти введення-виведення. І хоча, наприклад, машини Тьюрінга є видатними, їх поведінка формально визначається з точки зору чистих функцій. Тож у певному сенсі "чисті програми на ідеальному комп'ютері" - це фактично обстановка, в якій проблема зупинки зазвичай виявляється не вирішеною.
Бен

1
Які дослідження ви провели? Гугл "Зупинка проблеми" повинен був уже відповісти на це питання для вас.
Джонатан У ролях

Відповіді:


38

Ось доказ нерозбірливості через зменшення проблеми зупинки.

Зменшення: Даючи машину і вхід x , побудуйте нову машину Turing H, яка не читає жодного вводу, але записує M і x на стрічку і імітує M на x, поки M не зупиниться.МхНMxМхМ

Поведінка цієї нової машини не залежить від вхідної стрічки, тому це чиста машина Тьюрінга, на якій застосовується лише статичний аналіз. Якщо статичний аналіз був би достатнім, то він би міг показати, чи зупиняється H , що б показало, чи зупиняється M на x , що вирішило б проблему зупинки для нечистих машин, які, як ми знаємо, не можна визначити, а отже, і ваша проблема теж не визначена.ННМх



@HendrikJan точно!
Lieuwe Vinkhuijzen

16

Ні, це не так, і більше того, це не залежить від вводу / виводу.

Простий контрприклад: написати програму, щоб знайти ідеальне непарне число (це відкрита проблема: ми ще не знаємо, чи існує одне) - вона не бере жодного вводу і не виконує жодних нечистих завдань; він може зупинитися, коли він знайде його, або може працювати нескінченно (якщо такої кількості не існує). Тепер, якщо статичний аналіз був досить потужним для визначення випадку зупинки, він би використовував відповіді на це (та ще багато інших питань), коли зупинка означатиме позитивне існування такої кількості, а не зупинка означатиме, що такої кількості немає, але, на жаль, статичний аналіз не така потужна.


18
Я не бачу сенсу в цій відповіді. Тільки тому, що в даний час ми не знаємо, чи існує таке число, не означає, що це не так, і що ми не змогли в майбутньому написати статичний аналізатор, здатний вирішити це. Кращою альтернативою є використання якоїсь відомої нерозв'язної проблеми. Наприклад, відомо, що не існує програми, яка могла б вирішити всі діофантинові рівняння, і розв’язання такого рівняння є аналогічним завданням, показаному у відповіді.
Бакуріу

2
Ну, якби проблема зупинки була вирішена, то кожна проблема була б вирішена, якщо ми можемо поставити її у форму, де ми запитуємо, зупиняється чи ні програма. Або будь-яке запитання форми: існує лічильний набір, і я можу вирішити, чи є якийсь окремий потенційний елемент у наборі чи ні. Чи порожній набір? Діофантинові рівняння мають підрахунковий набір потенційних рішень, і я можу перевірити, чи кожен окремий потенційний розчин є рішенням чи ні. Якби проблема зупинки була вирішуваною, рівняння Діофантіна були б вирішеними.
gnasher729

10
@ gnasher729 Так, і оскільки вони не є, проблема зупинки не вирішується. Це моя суть. Хоча твердження у цій відповіді не має реального значення: "Розгляньте це математичне визначення. Наразі ми не маємо уявлення, зупиняється чи ні програма, яка вирішує це, але завтра хлопець може дізнатись, що робить це чи ні", і ця відповідь стає 100 % безглуздо ».
Бакуріу

6
Хіба це не подібний випадок, як це можна визначити, чи π має деяку послідовність цифр? , проблема зупинки не визначається на класах задач, а не на окремих проблемах.
npostavs

2

Класичний доказ за допомогою діагоналізації - це чиста машина , вона не тільки є чистою машиною Тюрінга, але й не покладається на "відкриті проблеми".

Наприклад, машина Тьюрінга, яка виконує задуму Колатца, має незвіданий статус зупинки, але це покладається на наше незнання про Конлат Колац, одного разу ми можемо довести, що Колац був правий, і тоді ми зможемо визначити статус зупинки припущення (Або для деяких входів не зупиняється, або Завжди зупиняється).

Тож Collatz Conjecture вже міг відповісти на ваше запитання (принаймні тимчасово), але він покладається на те, що ми не знаємо . Натомість класичний доказ - це вирішена проблема: ми вже знаємо, що це неможливо вирішити .


0

Тільки для запису, стандартний доказ нерозбірливості проблеми зупинки спирається на ту саму ідею, що і quines: про те, що можна написати програму, деякий суб-термін якої оцінює до вихідного коду для всієї програми. Тоді, якби була функція, haltsяка, задавши вихідний код для програми, повертала True, якщо ця програма зупинилася на всіх вхідних даних, а False - інакше, це буде законною програмою:

prog() = if halts "prog" then prog() else ()

де "prog"було б якесь вираження, яке оцінюється для вихідного коду для prog; однак, ви можете швидко побачити, що progзупинки (для всіх входів) якщо вони не зупиняються, що є протиріччям. Ніщо в цьому доказі жодним чином не покладається на введення / виведення (чи потрібно мені введення / виведення, щоб написати квітку?).

До речі, ви можете заглянути в "діалогове введення-виведення" для отримання додаткових доказів того, що введення-виведення абсолютно не має значення для вашої проблеми (в основному, програми, які роблять введення-виведення, можуть бути зведені до програм, які приймають введення як (явні) функціональні аргументи і повертають висновок як (явні) додаткові результати в ледачій мові). На жаль, зараз я не можу знайти в Інтернеті розумну, необ’єктивну (або діалогову) сторінку в Інтернеті.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.