Чи дають залежні типи все, що робить підтипом?


24

Типи та мови програмування зосереджується на підтипуванні, але, наскільки я можу сказати, підтипи не здаються особливо фундаментальними. Чи дає підтипізація щось більше, ніж залежні типи? Робота з залежними типами повинна бути більшою роботою, тому я можу зрозуміти, чому підтипи можуть бути корисними на практиці. Однак мене більше цікавить теорія типів як основа математики, ніж як основа для мов програмування, чи варто приділяти багато уваги підтипу?

Відповіді:


22

Підтипові та залежні типи - це ортогональні поняття.

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

Підтипізація, швидше за все, вирішується і простіше керувати у впровадженні.

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

Якщо ви зробите швидкий google з "підтипу залежних типів", ви знайдете купу роботи, додаючи підтипи до залежних типів, в основному, приблизно з 2000 року. кореспонденти.


3
Дякую, саме це я шукав. Зараз я поставив кілька запитань нооба, які, здається, були дещо добре сприйняті, хоча cstheory.SE не є правильним місцем для таких питань. За шкалою від -5 до +5 ви б заохочували чи відлякували подібні питання в майбутньому? Як я розумію, як я розумію (з читання Роберта Харпера), типові класи - це підкатегорія модулів, чи правильно це?
Джон Сальватьє

3
Це питання знаходиться в правій частині кордону того, що підходить для cstheory.SE. Класи типу насправді не є підкатегорією модулів. Це більше схоже на те, що типи класів - це модулі + тип виводу + free_plumbing.
Дейв Кларк

2
Я б уявив, що ви завжди зможете моделювати / моделювати підгрупування залежних типів досить легко. У Haskell HList (який лише побудований на рівномірному рівні рівності) дає вам підтипи, наприклад (див. "Система обстежених об'єктів Haskell"). Єдина складна частина підгрупування - це висновок про тип, і коли ви працюєте з залежними типами, ви все одно викинули 90%.
sclv

(змінено з коментаря до відповіді)
Neel Krishnaswami

Теорія підмножин теорії типів Мартіна-Лоефа - це в основному те, що потрібно для моделювання забуття, і це датується 1980-ми роками. Я думаю, що це щось, на що @Neel отримує свою відповідь.
Чарльз Стюарт

22

Однак мене більше цікавить теорія типів як фундамент математики, ніж як основа для мов програмування, чи варто приділяти багато уваги підтипу?

Ще одна додаткова річ, яку дає вам підтип, - це те, що під підрядкою мається на увазі наявність багатьох властивостей узгодженості. Теорія залежних типів також потребує поняття доречності, щоб моделювати все, що можна зробити з підтипами. Наприклад, в теорії залежних типів можна наблизити формування підмножини із залежною записом:

{xS|;P(x)} vs. Σx:S.P(x)

SP(x)x:

X<:Yx:Xx:YП(х)П(х)

Після цього ви зможете систематично розробити підтипи до теорії залежного типу. Дивіться дисертацію Вільяма Ловаса на прикладі додавання підтипів до теорії залежного типу (в даному випадку Twelf).

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