Що робить мову (та її тип-систему) здатною доводити теореми про власні терміни?


12

Нещодавно я намагався реалізувати Седіл-Коре Аарона , мінімалістичну мову програмування, здатну доводити математичні теореми про власні умови. Я також довів індукцію для кодованих λ типів даних на ньому, завдяки чому стало зрозуміліше, чому його розширення будуть необхідними.

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

Коротше кажучи, що конкретно що кваліфікує мову (та її тип-систему) як систему, здатну доводити теореми про власні терміни?


Я читав блог, який стосувався цього питання, але зараз не можу його знайти :( Він містив речення "Система T достатня!" Або щось подібне, і в ній говорилося про системи залежного типу.
Labbekak

2
Знайшов це: queuea9.wordpress.com/2010/01/17/… Це насправді написано Аароном Штуком, щоб ви могли вже про це знати.
Лаббекак

Неохоронна рекурсія "руйнує" мову як систему підтвердження, захищена рекурсія не робить. Щоб довести, що примітиви мають сенс, я б сказав, що ви будуєте модель. А щоб довести теореми про власні терміни, йому потрібен такий собі ізоморфізм Керрі-Говарда і залежний тип, щоб речі, які ви докажете (типи), могли говорити про ваші терміни.
xavierm02

Відповіді:


5

[Наступна самореклама, але я вважаю, що це актуально.]

Існує кілька можливих підходів до цього питання. Один із способів (який я досліджував під час кандидатської дисертації в контексті мови, що нагадує ML) - це розширення системи типів шаром першого порядку, щоб термінами мови можна було маніпулювати як об'єкти основної логіки . Звичайно, вам також потрібно включити деякі предикати, щоб було що спостерігати. У випадку з моєю системою ці предикати є еквівалентними термінами. Зокрема, якщо і є термінами мови, то тип лише тоді, коли і дійсно (спостережно) еквівалентні. Ви можете використовувати квантори першого порядку для кодування властивостей, таких якu t u t u v , ( λ x . x )tututuv,(λx.x)vv за типами, і вони доводиться, будуючи програми, що їх населяють.

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

Ось кілька посилань, якщо ви хочете перевірити це:

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