Проблема зупинки констатує, що не існує алгоритму, який би визначав, чи припиняється дана програма. Як наслідок, повинні бути програми, про які ми не можемо сказати, припиняються вони чи ні. Які найпростіші (найменші) відомі приклади таких програм?
Проблема зупинки констатує, що не існує алгоритму, який би визначав, чи припиняється дана програма. Як наслідок, повинні бути програми, про які ми не можемо сказати, припиняються вони чи ні. Які найпростіші (найменші) відомі приклади таких програм?
Відповіді:
Досить простим прикладом може бути програма, що тестує гіпотезу Collatz :
Як відомо, вона зупиняється на принаймні до , але загалом це відкрита проблема.
Проблема зупинки визначає, що не існує алгоритму, який би визначав, чи припиняється дана програма. Як наслідок, повинні бути програми, про які ми не можемо сказати, припиняються вони чи ні.
"Ми" - це не алгоритм =) Не існує загального алгоритму, який би міг визначити, чи зупиняється дана програма для кожної програми .
Які найпростіші (найменші) відомі приклади таких програм?
Розглянемо наступну програму:
n = 3
while true:
if is_perfect(n):
halt()
n = n + 2
Функція is_perfect перевіряє, чи n є ідеальним числом . Невідомо, чи є непарні ідеальні номери, тому ми не знаємо, зупиняється чи ні ця програма.
Ви пишете:
Проблема зупинки визначає, що не існує алгоритму, який би визначав, чи припиняється дана програма. Як наслідок, повинні бути програми, про які ми не можемо сказати, припиняються вони чи ні.
Це не послідовність, в обох напрямках. Ви піддаєтесь звичайній помилці , до якої варто звернутися.
Тільки якщо вам потрібно, щоб алгоритм вирішив проблему зупинки для всіх програм, ви можете показати, що такого алгоритму не існує.
Тепер, якщо знати, що проблема зупинки не вирішується, це не означає, що існують програми, яким ніхто не може довести припинення чи циклічність. Навіть якщо ви не є більш потужним, ніж машина Тьюрінга (що є лише гіпотезою, не доведеним фактом), все, що ми знаємо, - це те, що жоден алгоритм / людина не може надати такого підтвердження для всіх програм. Для кожної програми може вирішитись інша людина.
Ще кілька пов'язаних читань:
Отже, ви бачите, що ваше фактичне запитання (як повторюється нижче) не має нічого спільного з тим, чи можна обчислити проблему зупинки. Зовсім.
Які найпростіші (найменші) відомі приклади [програм, яких ми не знаємо, щоб зупинити чи циклічно]?
Granted, these are not very "natural".
Будь-яка відкрита проблема щодо існування числа з певними властивостями породжує таку програму (таку, яка шукає таке число). Наприклад, візьміть гіпотезу Колатца; оскільки ми не знаємо, чи це правда, ми також не знаємо, чи припиняється наступна програма:
n:=1;
found:=false;
while not found do
s:={};
i:=n;
while i not in s do
add i to s;
if i even then i:=i/2 else i:=3i+1
if 1 not in s then found:=true;
n:=n+1
Зважаючи на те, що проблема зайнятої Бівера не вирішена для машини Тюрінга з 5-ти станом-2-символом, повинна бути машина Тьюрінга з лише п'ятьма станами і лише двома символами, які не виявились зупиненими або ні, коли запускалися для порожньої стрічки . Це дуже коротка, лаконічна і закрита програма.
питання складне, оскільки пов'язаність з вирішенням (формалізація / узагальнення CS еквівалента) пов'язана з languages so it needs to be recast in that format. this seems to not be pointed out much, but many open problems in math/ CS can be readily converted to problems (languages) of unknown decidability. this is because of a tight correspondence between theorem proving and (un)decidability analysis. for example (somewhat like the other answer wrt odd perfect numbers), take the twin primes conjecture which dates to the Greeks (over 2 millenia ago) and is subject to major recent research advances eg by Zhang/ Tao. convert it to an algorithmic problem as follows:
Вхідні дані : п . Вихід: Y / N існує щонайменше n близнюків.
алгоритм здійснює пошук близнюків-близнюків і зупинок, якщо він знайде n з них. невідомо, чи можна визначити цю мову . вирішення проблеми близнюків (що запитує, чи є кінцеве чи нескінченне число) також вирішило б рішучість цієї мови (якщо також доведено / виявлено, скільки їх існує, якщо є кінцевим).
ще один приклад, візьміть гіпотезу Рімана і розгляньте цю мову:
Вхідні дані : п . Вихід: Y / N існує принаймні n нетривіальних нулів функції дзета Рімана.
алгоритм шукає нетривіальні нулі (код не особливо складний, він подібний до кореневого знаходження, і є інші еквівалентні рецептури, які відносно прості, які в основному обчислюють суми "паритетності" всіх простих чисел менше x і т. д.) і зупиняються, якщо він виявляє n з них, і знову ж таки, невідомо, чи ця мова рішуча і роздільна здатність "майже" еквівалентна вирішенню гіпотези Рімана.
тепер, як щодо ще більш вражаючого прикладу? ( застереження, ймовірно, також суперечливіше)
Вхід: c: Вихід: Y / N існує алгоритм O (n c ) для SAT.
Аналогічно, розв'язання цієї мови майже рівнозначно проблемі P vs NP . однак існує менш очевидний випадок для "простого" коду для проблеми в цьому випадку.
Write a simple program that checks whether for every n, , послідовність Колатца, що починається з n, досягне числа 1 менш ніж за мільярд ітерацій. Коли у нього є відповідь, нехай програма зупиняється, якщо відповідь "Так", і нехай вона циклічно назавжди, якщо відповідь "Ні".
Ми не можемо сказати, припиняється чи ні ця програма. (Хто ми? Скажімо "ми" - це той, хто міг би додати коментар до моєї відповіді). Однак, хтось із неймовірно потужним комп'ютером може сказати. Якийсь геніальний математик міг би сказати. Можливо, буде досить малий n, скажімо, n ≈де потрібен мільярд ітерацій; це могло б охопити когось із великою рішучістю, багато часу та багато грошей. Але зараз ми не можемо сказати.