Універсальне / екзистенціальне кількісне визначення?


11

Я намагаюся зрозуміти мету універсального та екзистенційного кількісного визначення типів. Я граю разом із написанням іграшкової мови на основі обчислення конструкцій . Я читав про Морта та Хенка, щоб допомогти мені краще зрозуміти.

Я не розумію, чому у Кок є як лямбда, так і всебічна абстракція.

(λx:A.B)
(x:A.B)

Мені здається, що лямбда включає в себе систему, де типи передаються вручну. Іншими словами, що наступне

(x:.λa:x.a)

Можна замінити на

(λx:.λa:x.a)

Якщо він був вперше застосований до типу, що використовується.

Що я пропускаю? Які статті чи блоги чи статті можна прочитати, які можуть мені допомогти?

Дякую.

Відповіді:


12

Це допомагає пам’ятати, що (або як ви іноді бачите) - це тип. Це узагальнююче . Тому, хоча це має ідеальний сенс сказати , не має сенсу говорити тому що - це просто тип. Ви не скажете becaues - це не для обчислення як такої, саме там можна класифікувати лямбда-терміни, які можна застосовувати так .Π(λx:A.M) N(x:A.M) N...(AB) N

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

Дві програми, які ви написали, мають дуже різні наміри, і перша - неправильна. Немає сенсу говорити тому що вимагає обидва його аргументи за типами, це означає, що якщо має бути добре набрано, ми повинні мати . Однак не є типом, йому можна коли-небудь присвоїти тип форми , ніколи . Другий один з іншого боку, майже (я думаю , що ви мали в виду , щоб повернути НЕ ) є функцією і задається тип , використовуючи два s.x:A. λx. xx:A.BB:λx.xx:A.Bax


Так, я мав намір повернути . a
oconnor0

@ oconnor0 Чи має це сенс :)
Даніель Гратцер,

Не зовсім. Я ще трохи розгублений. Можливо, мені доведеться більше подумати про це. Я змінив як приклад програму для повернення замість , так як я намагався реалізувати . :)axid
oconnor0

Я думаю, на якомусь рівні я хотів зробити те, щоб терміни та типи були однаковими. Між вашою відповіддю та cs.stackexchange.com/questions/49531/… я думаю, що я бачу, куди я спробував. Я хочу це зробити в сильно нормалізуючої системі.
oconnor0

5

Майте на увазі, що екзистенційні та універсальні типи досить різні. Це конструктивна логіка, не класична логіка, а конструктивна логіка і не так пов'язані, як у класичній логіці.

x:A.B(x) - тип програм, які отримують об'єкт типу і повертають об'єкт типу . Тут важливо те, що тип залежить від і не є однаковим для всіх . Він може змінюватися залежно від того, що таке . Для одного вводу ми можемо вивести ціле число. Для іншого ми можемо вивести дійсне число. Для ще однієї ми можемо вивести функцію над реальними числами. Якщо не змінюються з , то ви можете використовувати в місці , яке є типом функцій з в .AB(x)B(x) xxxxB(x)xABAB

В В В х : . В ( х ) В ( х ) х : В ( х ) х : В х : х : . B B x : A A × Bx:A.B(x) - залежна версія (конструктивної) диз'юнкції. Ви можете думати про конструктивну диз'юнкція двох типів і , як недоладне об'єднання і . є об'єднанням непересічних колекції типів , індексованого . Той факт, що фургон типу змінюється залежно від значення робить його залежним типом. Порівняйте із випадком, коли не залежить від : . Ми беремо одну копію тієї самоїABABABx:A.B(x)B(x)x:AB(x)x:ABx:Ax:A.BB для кожного . Це ізоморфно .x:AA×B

Тепер ви можете запитати, для чого нам потрібні залежні типи товарів і сум? Тому що вони надають нам більшої виразності. Тепер ми можемо повністю ігнорувати типи та мати нетипізовану теорію типів / функціональне програмування. Але це усуває переваги наявності типів в першу чергу, наприклад, ви не знаєте, чи завжди всі програми припиняються (сильна нормалізація). Див. Куб лямбда та залежний тип . Я думаю, що хороший спосіб добре зрозуміти залежні типи - це переглянути правила введення та усунення залежних типів у теорії типів Мартіна-Лофа .

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


1
Що означає "∃x: AB (x) ∃x: AB (x) - залежна версія (конструктивної) диз'юнкції." означає?
oconnor0
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.