Чи існують якісь проблеми, які не можна було б вирішити оракул, що зупиняється?


11

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

Примітка: під «oracle» я маю на увазі oracle для стандартної машини Тьюрінга, а не TM з самим оракул.


2
Там є «довільно нерозв'язні» проблеми, см , наприклад , тут . Я не знаю про "практичні" приклади (що також не відповідає назві, яку ви вибрали); що кваліфікується як "практичне" для вас?
Рафаель

Це не надумано просто відповісти на це питання. Я визнав, що проблема зупинки на наступному рівні все ще діє.
ike

Крім того, всі мови, які не є рекурсивно перелічуваними, не можна зводити до HALT. Приклади включають FINITE, EMPTY, чи походять дві CFG однією мовою тощо

Відповіді:


15

Просто візьміть задачу, ступінь Тюрінга вище , що є ступенем оракула Холтінга. З точки зору арифметичної ієрархії, ви хочете задач, що вище Σ 0 1 . Прикладами таких завдань (де ф п є п -й часткової обчислюваної функції і W п = { K N | ф п ( до )  визначається } є п -й обчислюваності перелічуваних безліч):0'Σ10ϕnnWн={кNϕн(к) визначено}н

  • є Σ 0 2 -повне.{нNφн завершується на кінцево багато входів}Σ20
  • є Π 0 2 -повна.{нNφн є тотальною функцією}Π20
  • є Σ 0 3 -комплект.{нNWн є обчислювальним набором}Σ30

Жодне з них не може бути вирішено, навіть якщо у вас є оракул припинення. Наприклад, розглянемо другий приклад: " загалом ?" З огляду на п , як би допомогу Призупинення Oracle нам вирішити , кодуються чи машина Тьюринга по п привалів на кожному вході?φннн


[Додано 2014-06-03] Для "практичного" аспекту всього цього, врахуйте проблему: програміст написав функцію, void charge_credit_card(int card_number, int amount)і ми хотіли б знати, чи припиняється функція на всіх входах. Це неможливо , щоб написати компілятор , який може автоматично перевірити це в цілому. Більше того, навіть якщо ми дозволимо компілятору задати нам питання форми "чи charge_credit_cardзакінчується при введенні (k,m)?", Це все ще неможливо.


2
Сайнг "Я не розумію приклад", не пояснивши, що вас бентежить, не є продуктивним. Чи читали ви відповідні сторінки Вікіпедії, на які я вказував? Вони безпосередньо пов'язані з вашим запитанням, тому перше, що вам слід зробити, це ознайомитись з основними поняттями, що стосуються.
Андрій Бауер

1
@ike, приклад мав на увазі мати нескінченну кількість int, цілком очевидно. Вам справді потрібно, щоб я написав BigIntчи щось таке, чи ви потім скаржитеся, що пам'ять комп’ютера обмежена?
Андрій Бауер

1
Що б там не було. Я сказав вам, яка відповідь на ваше запитання. Якщо ви не хочете зрозуміти це добросовісно, ​​тоді не турбуйте нас питаннями.
Андрій Бауер

2
Практичний приклад - - комплімент зупинки. Це { < M , w > : M не зупиняється на w } З огляду на довільну програму та вхід до програми, визначте, чи програма не зупиняється. Ця проблема, поряд із усіма іншими нерекурсивно переліченими мовами, не зводиться до рівня HALT. НАLТ¯{<М,ш>:М не зупиняється на ш}

1
@tAllan: це слід опублікувати як відповідь. Мене перемагає те, що ОП вважає "практичним", але ваш приклад, безумовно, кращий, ніж мій.
Андрій Бауер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.