Які найпростіші приклади програм, про які ми не знаємо, чи припиняються вони?


27

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


Ви суперечите у своїх відповідях ..... Дякую! Але програма зупинки передбачає знання джерела. ... Якщо це правда, ви відповіли на своє запитання. Програма зупинки вже знала б. Уявіть, що система керує знаком, вона завжди горить і блимає, коли вона вимикається? Перерва живлення, вимикач живлення або під час спалаху. Або даючи резервну батарею та генератор, ніколи.
htm11h


Я додам, що проблема зупинки є лише проблемою, якщо ви не ставите верхню межу часу. Напевно, немає різниці на практиці між тим, щоб отримати відповідь занадто пізно, щоб бути корисним, і ніколи не отримати відповідь. Ви можете запитати, чи програма поверне відповідь протягом декількох кроків, як визначення правильності в реальному часі. Якщо ви не можете гарантувати своєчасну відповідь, то у вас просто є програма, яка не має гарантії правильності.
Роб

1
@Rob Це насправді не так. Якщо ви не знаєте, чи зупиниться машина, ви можете чекати нескінченно, щоб побачити, чи вона зупиниться; після тисячоліття ви все одно не знатимете, припиниться чи ні, скажімо, наступного дня.
Кайл Странд

@KyleStrand Я згоден з вами. Але я також кажу, що на практиці це абсолютно переосмислена проблема, оскільки всі реалістичні обчислення підлягають термінам (мілісекундам до місяців). Якщо вам потрібна відповідь за 5 секунд, щоб вона була корисною, єдине, що важливо, чи можете ви гарантувати відповідь за 5 секунд. Припустимо, ви могли б гарантувати відповідь, задавши невизначений проміжок часу для обчислення. Це було б марною гарантією.
Роб

Відповіді:


41

Досить простим прикладом може бути програма, що тестує гіпотезу Collatz :

f(n)={HALT,if n is 1f(n/2),if n is evenf(3n+1),if n is odd

Як відомо, вона зупиняється на n принаймні до 5×2605.764×1018 , але загалом це відкрита проблема.


9
Наголошу на коментарі під питанням: проблема "чи зупиняється для всіх n ?" обчислюється . f(n)n
Рафаель

6
@KyleStrand Дивіться тут .
Рафаель

10
@KyleStrand, Рафаель стовідсотковий. Це поширена помилка. Ви повинні простежити, що саме таке визначення дуже ретельно, і тоді ви можете виявити, що ваша інтуїція не зовсім відповідає визначенню. Відповідно до визначення обчислюваності, достатньо того, що існує машина Тьюрінга для її обчислення - не має значення, чи знаємо ми, що це машина Тьюрінга. Спочатку, побачивши це, багато студентів думають, що це обман, але це не так - це лише наслідок визначення.
DW

2
@KyleStrand Ви повинні позбутися думки, що програма повинна вирішити проблему . Це не. Він просто повинен дати відповідь, що є тривіальним завданням. Алгоритмічно проблеми з кінцевими наборами екземплярів все нудні, оскільки ми можемо жорстко кодувати відповіді. (І навіть якщо ми не знаємо відповідей, ми все ще знаємо, що існує правильний алгоритм.) Загалом, показуючи, що алгоритм для чогось не існує, ви не робите жодних припущень щодо того, як це буде робота. Наша відсутність фантазії не дає доказів.
Рафаель

2
@KyleStrand Afaik, я використовую стандартне визначення обчислюваності, як це вчать сьогодні (і, afaik, це вже десятиліття). Я рекомендую вам засвоїти відповіді та пов’язані матеріали та опрацювати, де ви пішли не так. Немає сенсу для мене та інших повторювати одні й ті ж речі знову і знову. Ще одна спроба: визначення обчислюваності за своєю суттю екзистенційне, а не конструктивне. Поки ти думаєш, що в межах класичної логіки, взагалі немає необхідності здавати алгоритм «вирішення» - ми просто мусимо показати, що існує той, який дає правильні відповіді.
Рафаель

31

Проблема зупинки визначає, що не існує алгоритму, який би визначав, чи припиняється дана програма. Як наслідок, повинні бути програми, про які ми не можемо сказати, припиняються вони чи ні.

"Ми" - це не алгоритм =) Не існує загального алгоритму, який би міг визначити, чи зупиняється дана програма для кожної програми .

Які найпростіші (найменші) відомі приклади таких програм?

Розглянемо наступну програму:

n = 3
while true:
    if is_perfect(n):
            halt()
    n = n + 2

Функція is_perfect перевіряє, чи n є ідеальним числом . Невідомо, чи є непарні ідеальні номери, тому ми не знаємо, зупиняється чи ні ця програма.


7
Ми алгоритм.
PyRulez

3
@PyRulez немає доказів того, що обчислювальна сила людського розуму еквівалентна машині Тьюрінга. Доказ не працює, наприклад, невідомо, як імітувати один розум в іншому.
avsmal

1
@avsmal Добре, але це вкрай малоймовірно , що ми здатні гіперобчислення.
PyRulez

2
@PyRulez Джон Лукас та Роджер Пенроуз припустили, що людський розум може бути результатом якогось квантово-механічного посилення, "не алгоритмічного" обчислення. Це певне припущення. Але принаймні наш розум може мати певне джерело невизначеності. І цього достатньо, щоб зламати доказ: неможливо заперечувати "рандомізований" (для деякого підходящого визначення того, що означає рандомізований) Машина Тьюрінга, якщо невідомо, чи зупиняється він.
avsmal

5
Чи вважаються квантові обчислення гіперкомп'ютацією? Я припускав, що квантові комп’ютери можуть бути ідеально змодельовані тюрінг-машинами - лише трохи повільніше.
MaiaVictor

10

Ви пишете:

Проблема зупинки визначає, що не існує алгоритму, який би визначав, чи припиняється дана програма. Як наслідок, повинні бути програми, про які ми не можемо сказати, припиняються вони чи ні.

Це не послідовність, в обох напрямках. Ви піддаєтесь звичайній помилці , до якої варто звернутися.

PPP

Тільки якщо вам потрібно, щоб алгоритм вирішив проблему зупинки для всіх програм, ви можете показати, що такого алгоритму не існує.

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

Ще кілька пов'язаних читань:


Отже, ви бачите, що ваше фактичне запитання (як повторюється нижче) не має нічого спільного з тим, чи можна обчислити проблему зупинки. Зовсім.

Які найпростіші (найменші) відомі приклади [програм, яких ми не знаємо, щоб зупинити чи циклічно]?

S

g(n)={1,S true,g(n+1),else.

Granted, these are not very "natural".


  1. Not necessarily all, but "many" in some sense. Infinitely many, at least.

Коментарі не для розширеного обговорення; ця розмова булаmoved to chat.
Raphael

Щоб спробувати переформулювати це для мого власного розуміння, чи правильно сказати, що, хоча не існує унікального алгоритму, можна визначити, чи припиняється будь-яка довільна задана програма, можливо, може існувати певний програмний алгоритм для вирішення проблеми зупинки кожної можливої ​​програми?
Асад Саєдюддін

@AsadSaeeduddin Це "гірше": для кожного заданого кінцевого набору програм проблема зупинки тривіальна . Кожен кінцевий набір можна вирішити.
Рафаель

7

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

    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  

6

Зважаючи на те, що проблема зайнятої Бівера не вирішена для машини Тюрінга з 5-ти станом-2-символом, повинна бути машина Тьюрінга з лише п'ятьма станами і лише двома символами, які не виявились зупиненими або ні, коли запускалися для порожньої стрічки . Це дуже коротка, лаконічна і закрита програма.


0

питання складне, оскільки пов'язаність з вирішенням (формалізація / узагальнення 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 . однак існує менш очевидний випадок для "простого" коду для проблеми в цьому випадку.


1
Чи пояснив би низовик, що не так у цій відповіді?
MaiaVictor

2
Ваша мова "близнюк-прем'єр-міністр" визначальна. Якщо є лише кінцеве числоN з них відповідь "Так" для нNі "Ні" в іншому випадку, інакше завжди "Так". Звичайно, ми не знаємоN, але це не має значення, (дуже проста) машина Тьюрінга відповідає. Так само, як і мова "останньої теореми Ферма", є цілі числаа,б,c такий як ан+бн=cн для н? ", нещодавно" ми "це з’ясували N=2, Докази Wiles не змінили мову .
фонбранд

3
Я не переслідувач, але всі твердження у цій відповіді неправильні. Усі три ці проблеми, очевидно, вирішуються (не потрібно робити жодних недоведених припущень). Чому уважно вивчіть відповідь Рафаеля.
DW

ок, можливо, вхід повинен мати вказаний TM, і алгоритм вирішує, чи TM розраховує проблему. доведеться подумати про це докладніше ... думаю, існує кілька простих рецептів для таких типів проблем, які, в основному, підключають відкриті проблеми до нерозбірливих мов ... але погоджено, це рідко документовано / сформульовано в CS-рефератах ... знайшли лише кілька розсіяних refs ... або, можливо, введення є доказом, і мова перевіряє, чи доказ правильний ... в інших відповідях з високою оцінкою згадуються непарні ідеальні числа, проблема з коллацом тощо. Програми невідомо зупинятись чи ні для конкретних констант .
взн

sorry for the confusion! on some further thought the assertions are correct in the form that they describe simple programs not known to terminate (for all inputs) (ie the original question) and the failure of the overall idea sketched out/ pointed by DW is attempting to convert each into undecidable languages. will continue to ponder that latter construction idea looking for one that succeeds. another way of looking at it is that the problems can be seen as individual instances/ inputs for a halting problem solver but not really (known to be) equivalent to the halting problem itself.
vzn

0

Write a simple program that checks whether for every n, 1н1050, послідовність Колатца, що починається з n, досягне числа 1 менш ніж за мільярд ітерацій. Коли у нього є відповідь, нехай програма зупиняється, якщо відповідь "Так", і нехай вона циклічно назавжди, якщо відповідь "Ні".

Ми не можемо сказати, припиняється чи ні ця програма. (Хто ми? Скажімо "ми" - це той, хто міг би додати коментар до моєї відповіді). Однак, хтось із неймовірно потужним комп'ютером може сказати. Якийсь геніальний математик міг би сказати. Можливо, буде досить малий n, скажімо, n ≈1020де потрібен мільярд ітерацій; це могло б охопити когось із великою рішучістю, багато часу та багато грошей. Але зараз ми не можемо сказати.

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