Приклад Дайкстри неоднозначної програми


12

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

Відповіді:


11

Прочитай це:

http://en.wikipedia.org/wiki/Halting_problem#Recogising_partial_solutions

http://www.cs.ucsb.edu/~pconrad/cs40/08S/notes/ має приємне висвітлення; пошук "зупинення проблеми"

Існує кілька форм істотного протиріччя зупинки.

def halts( code_block ):
    # Some magical code

def whistler():
    while halts(whistler): 
        sys.whistle( 1 )

Чи свистить "свистун" нуль, один раз чи нескінченну кількість разів?

Якщо halts()функція визначає, що функція, whistlerздавалося, зупиняється, функція whistlerне може зупинитися.

Якщо halts()функція визначає, що функція whistlerне зупиняється, функція whistlerзупиняється.

Тому halts()функція не може існувати.


4
Ви забули третій варіант, куди він повертається FILE_NOT_FOUND;)
FrustratedWithFormsDesigner

2
Дякую! Те, що Дайкстра описував у прочитаному документі, не було проблемою зупинки. Це лише кілька рядків простого коду, але ви не можете сказати, що це означає. Контекст полягає в тому, що Дайкстра говорить про методи, які він використовує, щоб продемонструвати аудиторії, що програмування важке, тому програмісти повинні бути скромними. Зауважте, що папір не є, мені сумно сказати: "Покірний програміст". :)
Dijkstra Reader


Знову дякую. Сумно сказати, що це не один. У роботі, яку я маю на увазі, Дайкстра конкретно говорить, що програмування важке, навіть розумним людям ми повинні поважати це: "Наприклад, що робить наступна маленька програма?"
Dijkstra Reader

Напевно, не cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html . Але я піднімаю це як загальне посилання на те, наскільки важким є програмування.
S.Lott

2

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

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


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