Тестування, чи є довільний доказ круговим?


13

Я думав про докази і натрапив на цікаве спостереження. Тож докази еквівалентні програмам через ізоморфізм Керрі-Говарда, а кругові докази відповідають нескінченній рекурсії. Але з проблеми зупинки ми знаємо, що в цілому тестування того, чи довільна програма повторюється назавжди, не можна визначити. Керрі-Говард, чи означає це, що немає "перевірки доказів", який би міг визначити, чи використовує доказ кругові міркування?

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

Відповіді:


15

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

Ya.(aa)a

aaa

Ключовим тут є те, що Y-комбінатор вбудований у мову, це сприймається як аксіома. Тож якщо ви хочете, щоб він не створював вам проблем, просто позбудьтесь цього як аксіоми!

Через це більшість офіційних систем підтвердження вимагають, щоб ваші рекурсії були обґрунтованими. Вони приймають лише функції, які, як вони можуть довести, зупиняться. І як результат, вони відкидають деякі програми, які зупиняються, але які вони не можуть цього довести.

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


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

1
@boyers FWIW, у Coq можна використовувати Functionабо Program Fixpointконструкції, щоб довести, що якась функція є тотальною, якщо перевірка сукупності не вдається. Простий приклад є функція злиття сортування за списками. Потрібно довести вручну, ми розділили списки (довжини> 1) на суворіші менші списки.
Антон Трунов

@boyers Так, за першою теоремою Геделя повинні бути речі, які ви не можете довести в Coq. На практиці зустрічається з ними рідко, але завжди є діагональний аргумент: Coq не може довести Coq себе, він може лише довести підмножину (дуже великий підмножина, розум, включаючи всі функції, але з нижньою межею кількості рекурсії він може впоратися). Я пам'ятаю, як читав, що теорія Кока еквівалентна аксіомам Пеано плюс існування певної великої порядкової (і тому докази, які передбачають, що ще більша порядкова кількість не може вміститися), але я не можу знайти посилання зараз.
Жил "ТАК - перестань бути злим"

@AntonTrunov У цьому контексті Programтощо є червоною оселедцем. Вони не змінюють теорію. Те, що вони роблять, - це синтаксичний цукор, щоб використовувати міру для доказування: замість того, щоб міркувати, що об'єкт, який вас цікавить, зменшується, ви додаєте рівень непрямості: обчислюйте, що інший об'єкт стає меншим (наприклад, якийсь розмір) і доводить, що це стає менше. Дивіться Wfбібліотеку.
Жил "ТАК - перестань бути злим"

@Gilles Я припускав, що контекст стосується практичної (конкретної) сторони, як, наприклад, коли евристика Кока зазнає невдачі ... Чи можете ви, будь ласка, спробувати знайти згаданий вами документ? Посилання буде дуже вдячно.
Антон Трунов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.