Що ми отримуємо, маючи “залежні типи”?


13

Я подумав, що я правильно зрозумів залежне введення тексту (DT), але відповідь на це питання: /cstheory/30651/why-was-there-a-need-for-martin-l%C3% Інтуїтивістська теорія типу B6f для створення створювала думки про інше.

Прочитавши DT і намагаючись зрозуміти, що вони є, я намагаюся задатися питанням, що ми отримуємо від цього поняття DT? Вони здаються більш гнучкими та потужними, ніж просто набране лямбда-числення (STLC), хоча я не можу зрозуміти "як / чому" саме.

Що ми можемо зробити з DT, які неможливо зробити за допомогою STLC? Схоже, додавання DT робить цю теорію складнішою, але яка користь?

З відповіді на вищезазначене питання:

Залежні типи були запропоновані де Бруїном та Говардом, які хотіли поширити листування Кері-Говарда від логіки пропозицій до логіки першого порядку.

Здається, це має сенс на якомусь рівні, але я все ще не в змозі зрозуміти велику картину "як / чому"? Можливо, на прикладі явно показано, що таке розширення відповідності СН до логіки FO могло б допомогти досягти точки зору в розумінні, в чому полягає велика справа з DT? Я не впевнений, що розумію це так добре, як і повинен.


1
Ви їх гуглили? Ви чули про Coq, доказ теореми, побудований на залежних типах? Чи знали ви, що теорема про 4 кольори доведена за допомогою Coq?
Дейв Кларк

2
Я насправді. Що важко для Google, у чому полягає додаткова «сила» (за відсутністю кращого слова), яку ДТ надають для теоретичного типу, інтуїтивно кажучи?
Кандидат наук

1
Чому? Залежні типи дозволяють набирати більше програм, зберігаючи типи безпеки. Як? Шляхом параметризації типів з програмами.
Мартін Бергер

@MartinBerger - Чи можете ви, будь ласка, детальніше розглянути "більше програм"? Що "більше" я можу зробити чи потрібно з теоретичної точки зору?
Кандидат наук

2
@DaveClarke Те, що Кок, з його фантазійними типами, використовувався для створення фантазійних речей, не означає, що для цих фантазійних речей потрібні ці вигадливі типи. Наприклад, Twelf мав великі успіхи (наприклад, доказ коректності SML), і це лише другого порядку, а не вищого рівня. Я бачив деякі досить великі системи, перевірені лише логікою першого порядку.
Жиль "ТАК - перестань бути злим"

Відповіді:


22

Розширення мого коментаря: залежні типи можуть набирати більше програм. "Більше" просто означає, що набір програм, які можна набрати з залежними типами, є належним набором програм, які можна набрати в просто набраному рахунку (STLC). Прикладом можуть бути L i s t 2 3 + 4 ( α ) , списки довжиною 10 , що містять елементи типу α . Вираз 2 3 + 4 є водночас програмою і частиною типу. У STLC це зробити не можна.λList23+4(α)10α23+4

Основним правилом, що відрізняє залежні від незалежних типів, є застосування:

ΓM:ABΓN:AΓMN:BΓM:ΠxA.BΓN:AΓMN:B{N/x}

Зліва у вас є STLC, де програми в приміщенні 'вливаються' лише в програму висновку. На відміну від цього, у залежному правилі програми праворуч програма з правої передумови 'перетікає' у тип у висновку .N1

Для того, щоб можна було параметризувати типи за програмами, синтаксис залежних типів повинен бути багатшим, а для того, щоб типи були добре сформовані, ми використовуємо другу "систему набору тексту", що називається типами, що обмежує типи. Ця система організації по суті є STLC, але "на один рівень вище".

Існує багато пояснень залежних типів. Деякі приклади.


1 З точки зору кольорів: при незалежних типах чорні вирази у висновку будуються з чорних виразів у приміщеннях, тоді як червоні вирази у висновку будуються з червоних виразів у приміщеннях. Залежно від типів кольори можна змішувати, якщо чорні частини висновку будуються з червоної та чорної частин приміщення.


Тепер це має багато сенсу. Можливо, це було очевидно, але я чомусь не міг покласти пальця на це. Оцініть перехід від коментаря до відповіді. На жаль, питання було проголосовано за закриття, але я радий за відповідь :)
Кандидат наук

1
Я не божевільний за вашим прикладом, оскільки довжина списку - це лише те, що ви можете стерти з типів і отримати програми, що говорять про звичайні (неіндексовані) списки. Можливо, буде корисно зауважити, що є типи, які не залишаються добре набраними після такого стирання, наприклад, програма типу , де і . Arr nArr 0=natArr (n+1)=natArr n
коді

@cody Я не впевнений, що ти маєш на увазі. Залежні типи мають (або можуть бути налаштовані мати) стирання типу у такому значенні: для всіх типів P: iff , де - відношення скорочення часу виконання. . (Це спрощений опис, коли функція стирає карти програм із приміткою типу "ті ж" програми без анотації.) Можливо, ви маєте на увазі щось інше? e r a s e ( P ) e r a s e ( V ) PVerase(P)erase(V)
Мартін Бергер

@MartinBerger: так, у цьому випадку я говорю про стирання залежностей у залежних типах, щоб отримати прості типи. Єдиний приклад, на який я можу зараз вказати, - це доказ того, що нормалізує нормалізацію iff (наприклад, у книзі Барендрегта ). C o CFωCoC
Коді

@cody Я думаю, що це незвично називати стиранням цього типу. Яке краще ім’я? Може бути спрощення типу?
Мартін Бергер

2

Подумай про декларації типу, як не що інше, як твердження. Наразі все, що ви можете сказати, - це такі речі, як isInt32 (), isCharPtr () тощо. Ці різні твердження вибрано для перевірки під час компіляції. Але цю концепцію можна розширити на такі речі: isCharPtr () && isNotNull (). Нульові покажчики - величезна проблема. Покажчики не повинні бути нульовими як позиція за замовчуванням, при цьому нульові покажчики є типом, який не може бути відкидним, не знаючи, чи він є нульовим чи ні. Подібні проблеми є такими, як: isPositiveInteger (), або isEvenNaturalNumber ().

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