Вдохновленный обширными иерархиями, присутствующими в теории сложности, я подумал, существуют ли такие иерархии и для систем типов. Однако два примера, которые я обнаружил до сих пор, больше похожи на контрольные списки (с ортогональными функциями), а не на иерархии (с последовательно растущими и более выразительными системами типов).
Два примера, которые я нашел, - это лямбда-куб и концепция полиморфизма с k-ранжированием . Первый - это контрольный список с тремя вариантами, второй - реальная иерархия (хотя я считаю, что ранжирование по k для конкретных значений k встречается редко). Все другие особенности системы типов, которые я знаю, в основном ортогональны.
Меня интересуют эти концепции, потому что я создаю свой собственный язык, и мне очень любопытно, как он относится к существующим в настоящее время системам типов (насколько я знаю, моя система типов несколько нетрадиционна).
Я понимаю, что понятие «выразительность» может быть немного расплывчатым, что может объяснить, почему системы типов кажутся мне контрольными списками.
источник
Ответы:
Есть несколько чувств "выразительности", которые вы можете захотеть для системы типов.
Какие математические функции вы можете выразить в конкретной системе типов. Например, в простом типе лямбда-исчисления не все вычисляемые функции могут быть выражены. То же самое верно для Системы , но может быть выражено строго больше функций. Это не очень интересно, когда вы переходите к системам типов для языков, полных по Тьюрингу.F
Может ли система проверять каждую программу, написанную в системе B ? Это в основном то, что первое понятие силы Коди о PTSs. Опять же , система F сильнее STLC в таком порядке, так как каждый типов STLC программы в System F . Аналогично, система с подтипом будет сильнее, чем система без.A B F F
Существуют ли локальные преобразования (в смысле статьи Феллайзена « О выразительной силе языков программирования» ), которые позволяют программе, которая печатает в системе печатать в системе B , но не наоборот.A B
Гарантирует ли одна система типов более сильные свойства, чем другая. Например, системы линейного типа просто отклоняют больше программ, но это позволяет им делать более сильные заявления о программах, которые они принимают.
К сожалению, я не верю, что проводилась работа по категоризации или формализации этих понятий, за исключением лямбда-куба Барендрегта, как обсуждает @cody.
источник
Я не уверен, что у меня есть удовлетворительный ответ на ваш вопрос, но если вы рассмотрите Системы Чистого Типа, которые являются обобщением систем, найденных в лямбда-кубе (подробный, если несколько устаревший обзор можно найти в классическом тексте Барендрегта ) то есть пара естественных понятий иерархии:
источник