Різниця між типом залежності, типом вдосконалення та логікою Хоара


18

Я мало знаю теорію залежних типів. З Вікіпедії:

Залежний тип - це тип, визначення якого залежить від значення.

І з мого курсу теорії типів я пам'ятаю, що залежний тип:

Родина типів, індексованих типом.

Але я маю плутанину щодо залежних типів та типів уточнення та логіки помилки.

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

Яку додаткову річ дає залежний тип порівняно з типами вдосконалення? І є залежним типом потужнішим за типи доопрацювання + вирішення проблем Sat / Constraint.

хтось може очистити повітря на прикладах.

Відповіді:


18

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

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

Потенційно знайома і, можливо, суперечлива, здавалося б, частина виникає, якщо ви переглядаєте типи а-ла-Керрі (зовнішньо) проти типів -а-церкви (внутрішньо). Коли ми думаємо про типи à la Curry, ми думаємо про типи як класифікацію нетипізованих термінів, які вже мають значення. У типах а-ля Церкви єдині терміни, що існують, - це добре введені терміни, тобто обмеження типу є частиною нашого синтаксису. Тож, про що я говорю, це те, що система типу Крі - це фактично система вдосконалення типу, що уточнює нетипізовані терміни, тоді як система типу церковного типу не є системою вдосконалення типу. Це означає, що, наприклад, ми можемо розглядати просто набране лямбда-числення як систему доопрацювання типу, або як систему нетипового типу.

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

Поки що я нічого не говорив про залежні типи. Причина в тому, що це абсолютно ортогональне питання. Я б сказав, що архетипні системи залежних типів зазвичай представлені в церковному стилі і, таким чином, це не системи доопрацювання типів, а NuPRL (заснований на теорії обчислювальних типів , варіант найбільш теоретично залежних типів архетипних типів, теорія типу Мартина-Лефа) як очевидно, це система вдосконалення типу, як я описав. Терміни в NuPRL можуть навіть не мати типів! Справді, той факт, що "PRL" означає "Логіка удосконалення програми", також може бути підказом. З іншого боку, типи уточнення для ML описує систему типів вдосконалення, можливо, походження терміна, який жодним чином не є системою залежного типу.

Що стосується трійки Хоара, то вони є системою вдосконалення типу. Вони фактично використовуються як приклад системи удосконалення типу в першій статті. Однак теорія типу Хоара дає щось, що може розглядатися як система невдосконаленого типу для мови, що має трійки Хоара.

Щоб отримати відповідь про "потужність" різних систем, вам потрібно вказати конкретну (сімейство) залежних типів систем (и) та певну (сімейство) системи вдосконалення типу. Термін "система залежного типу" охоплює дуже широкий клас типів систем, а "системи удосконалення типів" ще ширші. Навіть тоді терміни не є взаємовиключними, тому це не буде порівнянням між системами "залежного типу" та "системами уточненого типу". Однак якщо за допомогою системи "залежного типу" ви думаєте про щось на зразок Coq , а для "системи вдосконалення" - щось на зразок Liquid Typesто це досить однобічно. Кок, як правило, розглядається як достатньо потужний, щоб на практиці впоратися практично з усією математикою; ви могли буквально реалізувати та довести правильність SMT вирішувача в Coq, а потім використовувати його; і може бути сформульований дуже близький аналог типу підмножини. (NuPRL буквально має типи підмножини.) З іншого боку, розв'язувачі SMT, як правило, обмежуються розв'язуючими теоріями, коли Coq не має такого обмеження; і багато систем, таких як Рідкі типи, мають обмежену та нерозширювану мову для визначення предикатів. (Звичайно, під системою "залежний тип" ви можете означати залежний ML , а під "системою вдосконалення типу" NuPRL [що також є системою залежного типу], яка була б однобічною інакше.)


1
Дуже дякую, дійсно допомогло. Так, читав залежні типи в практичному програмуванні (popl '99) і заплутався. Ура.
Пушпа

1
Це ФАНТАСТИЧНА відповідь. дякую, що написав це.
Джонатан Стерлінг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.