Чим відрізняються докази та програми (або між пропозиціями та типами)?


26

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


1
Здається, більше підходить для cstheory.stackexchange.com

Якщо op хотів би, @ мені в коментарі, і я можу перенести це за вас.

2
Джон Крослі написав документ про це, який я випадково побачив десь недавно: [Яка різниця між доказами та програмами?] [ Citeseerx.ist.psu.edu/viewdoc/… - Я ще не читав цього, але Це прийшло рекомендовано ...
TJ Ellis

1
@TJ Ellis, дякую за посилання, але після короткого пробігу, здається, що папір не відповідає на питання, поставлене в його заголовку (або у відповіді "вони однакові").
макс талдикін

@TJ Ellis, ти бачив це повідомлення на reddid / r / compsci? Я це зробив,;) @max, я відчував це так, тому я публікую це питання.

Відповіді:


20

Мови програмування, якими користуються люди щодня, не так добре вписуються у листування Кері-Говарда, оскільки їхні типові системи занадто слабкі. Щоб сказати щось цікаве, використовуючи Curry-Howard для імперативних програм, потрібно мати більш складну систему типів. Книга Адаптація доказів як програм підштовхує цей кут з метою синтезу імперативних програм. Коли залежні типи стають все більш популярними, безумовно, у дослідницьких функціональних мовах ( Agda , Epigram ), розмежування стає розмитим. Звичайно, ви можете зробити синтез / вилучення програми в рамках теореми Кока (і, мабуть, інших), яка, звичайно, заснована на Керрі-Говарда.

Переписка Кері-Говарда також може використовуватися в ситуаціях, коли докази не так чітко відповідають програмам (або вони не є програмами, які ніхто ніколи не запускатиме). Одним із прикладів цього є авторизація перевірки . Пропозиції відповідають заявам про те, хто має право робити що. Докази забезпечують необхідні докази наявності пропозиції, тому запит на авторизацію дозволений. Для кодування доказів вводяться умови доказування (через Curry-Howard). Умови доказування надсилаються між сторонами як представлення доказів дійсності запитів на авторизацію, але вони не вважаються програмами.


1
Ви повинні згадати мови, що залежать від типу, оскільки в них розмивається лінія між доказів і пропозицій.
Охад Каммар

1
Справді. Не будемо забувати синтез / вилучення програми Coq.
Дейв Кларк

яка програма відповідала б неконструктивному (класичному) доказуванню форми ? (Припустимо, що Т - якесь цікаве вирішальне відношення, наприклад, e- th TM зупиняється на k кроках.) (Я можу задати це як нове запитання, якщо відповідь не дуже коротка.)k T(e,k)¬k T(e,k)Tek
Kaveh

1
@Kaveh: задайте це окремим питанням. У коментарі ви можете сказати, що "переклад Годеля-Гентцена - це перетворення, яке проходить далі", але нічого менш виразного не підходить. :)
Ніл Крішнасвамі


10

У Coq є 2 типи (Prop і Set), вони використовуються програмістом для розділення того, що є доказом, який не видасть фактичний код, і тієї частини доказу, яка буде використана для вилучення запущеного коду (вашої програми).

Це приємне рішення проблеми, про яку ви ставите, як визначити, що означає генерувати машинний код (програму) і що існує для завершення підтвердження пропозиції (або типу).

AFAIK не існує автоматичного способу розрізнити обидва. Це може бути щось цікаве для дослідження? А може хтось може вказати, що це явно неможливо?

Залежно від типів не тільки не існує чіткого розрізнення між доказами та програмами, але також немає відмінності між програмами та типами! Єдине відмінність полягатиме в тому, де відображається тип (або програма), що робить його частиною місця "програми" або "типу" даного терміна.

Приклад дозволить зрозуміти, що я сподіваюся:

Коли ви використовуєте функцію ідентичності з залежними типами, вам потрібно передати тип, з яким ви збираєтеся використовувати цю функцію! Тип використовується як значення у вашій "програмі"!

Нетипічне обчислення лямбда:

id = λx.x

Залежно від типів:

id: (A: Встановити) -> A -> A

ID = (λA.(λx.x))

Якщо ви використовуєте цю функцію, ви зробите це так, як на цьому прикладі:

id Naturals 1

Зауважте, що "тип" (у цьому випадку Набір природних), який передається як значення, викидається, тому він ніколи не буде обчислюватися, але все-таки він знаходиться в "програмній" частині терміна. Ось що також буде з деталями "доказування", вони повинні бути там, щоб термін перевірити тип, але під час обчислень вони будуть викинуті.


6

Я вийду на кінцівку тут і скажу, що, якщо ви готові трохи примружити, докази і припинення програми можна визначити.

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

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

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

x:xТ з явними умовами істинності. Будь-яке судження може бути перетворене на тип його доказів.

Це досить спрощено, але я думаю, що це говорить про надійність ідеї. (Навіть якщо деяким людям це не подобається. ;-))


дуже хороша відповідь.
Тото

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

Я думаю, що це трохи хитро, залежно від того, як ви визначаєте кінцеве та нескінченне стосовно доказів. Взагалі всі докази, які ми приймаємо, є кінцевими, оскільки вони повинні переконати людину за невеликий обмежений час. Доказ, який спирається на індукційну схему (тобто більшість "нескінченних" доказів), є цією мірою ще кінцевим, вони просто символічні кроки, які представляють нескінченне, але регулярне обчислення. По-справжньому нескінченний доказ, який, на мою думку, більшість із нас відкидає як вагомий доказ, був би таким, де вам буквально довелося розглянути нескінченну кількість різних фактів, щоб підтвердити.
Марк Хаманн

5

Підтвердження недоречності?

Коли ви пишете якусь програму, вас цікавить її продуктивність, споживання пам’яті тощо.
Наприклад, краще використовувати якийсь розумний алгоритм сортування замість сортування бульбашок, навіть якщо їх реалізація має однакові типи (навіть у залежному від налаштування типу).

Але коли ти доводиш якусь теорему, це цікавить лише існування доказу.

Звичайно, з естетичної точки зору деякі докази більш прості / красиві / надихаючі / тощо (наприклад, докази з Книги).


4

Якщо ви приймаєте листування Кері-Говарда, то питання в основному є філософським. "Чи відрізняються докази та програми? Звичайно. Як? Ну, ми називаємо докази" доказами ", а програми називаємо" програмами "."

Або кажучи менш легковажно, якщо між доказами та програмами існує ізоморфізм - який, здається, явно є, - тоді ви ставите питанням, чи існує якийсь оракул, здатний розрізнити їх два. Люди класифікують їх як різні (здебільшого), тому, безумовно, можна стверджувати, що такий оракул існує. Тоді важливим питанням стає чи є якась змістовна різниця між ними, що підлягає філософській дискусії. Що таке "доказ"? Не існує формального визначення того, що є доказом; це термін мистецтва, подібно до поняття "ефективного обчислення" в тезі Церкви – Тьюрінга. З цього приводу "програма" також не має формального визначення.

Це слова природної мови, які використовуються для категоризації різних областей математичного дослідження. Що зауважили Керрі і Говард, це те, що ці дві різні галузі насправді вивчають одне і те ж. Помітити цей зв'язок важливо, оскільки воно говорить про те, що ці різні дослідники повинні спілкуватися один з одним. Але на іншому рівні помітити зв’язок - це повірити в різницю між ними. Під час вирішення проблеми іноді вигідніше сприймати це як проблему програмування, тоді як в інших випадках вигідніше розглядати це як логічну проблему. Ця різниця в перспективі є, я думаю, важливою різницею між ними. Але чи різниця в точці зору є різницею ідентичності - це глибоке філософське питання, яке досліджувалося принаймні так само, як і у ФрегеUeber Sinn und Bedeutung .

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