Существует ли иерархия выразительности для систем типов?

23

Вдохновленный обширными иерархиями, присутствующими в теории сложности, я подумал, существуют ли такие иерархии и для систем типов. Однако два примера, которые я обнаружил до сих пор, больше похожи на контрольные списки (с ортогональными функциями), а не на иерархии (с последовательно растущими и более выразительными системами типов).

Два примера, которые я нашел, - это лямбда-куб и концепция полиморфизма с k-ранжированием . Первый - это контрольный список с тремя вариантами, второй - реальная иерархия (хотя я считаю, что ранжирование по k для конкретных значений k встречается редко). Все другие особенности системы типов, которые я знаю, в основном ортогональны.

Меня интересуют эти концепции, потому что я создаю свой собственный язык, и мне очень любопытно, как он относится к существующим в настоящее время системам типов (насколько я знаю, моя система типов несколько нетрадиционна).

Я понимаю, что понятие «выразительность» может быть немного расплывчатым, что может объяснить, почему системы типов кажутся мне контрольными списками.

Алекс тен Бринк
источник
4
Я уверен, что жесткие и быстрые сравнения выразительности могут быть сделаны только между более теоретическими системами типов. Если вы разрабатываете полноценный язык программирования, то вы можете сделать сравнение функций с существующими языками / формализмом. К сожалению, так как многие функции могут быть закодированы с точки зрения других функций, это не будет тривиальной задачей. Если у вас могут быть такие же причудливые типы, как у Scala или Haskell, то у вас все будет хорошо с точки зрения выразительности.
Дэйв Кларк
3
Я действительно должен написать свое сообщение в блоге "Как сравнивать языки программирования" ...
Андрей Бауэр,
@ Андрей Бауэр: Это было бы интересным дополнением к ответам и замечаниям, уже представленным здесь. Я уже довольно много узнал о том, как можно определить «выразительность» - возможно, мне следовало бы спросить об этом вместо этого ...
Алекс тен Бринк
Я уверен, что видел полиморфизм ранга 2, используемый в нескольких местах. Один из тех, что я помню сейчас, - это Ламмель, Пейтон-Джонс, Scrap Your Boilerplate, 2003.
Раду ГРИГОР,
2
@Radu GRIGore: полиморфизм ранга 2 важен, потому что он позволяет аргументам типа появляться в дважды противоположном положении, что при обычном виде двойственности позволяет моделировать экзистенциальные типы по их кодированию по Церковью. Ранг 3 просто снова дает универсальное количественное определение, и оно чередуется оттуда, так что по сравнению с ним добавляется мало выразительной силы.
CA McCann

Ответы:

22

Есть несколько чувств "выразительности", которые вы можете захотеть для системы типов.

  1. Какие математические функции вы можете выразить в конкретной системе типов. Например, в простом типе лямбда-исчисления не все вычисляемые функции могут быть выражены. То же самое верно для Системы , но может быть выражено строго больше функций. Это не очень интересно, когда вы переходите к системам типов для языков, полных по Тьюрингу.F

  2. Может ли система проверять каждую программу, написанную в системе B ? Это в основном то, что первое понятие силы Коди о PTSs. Опять же , система F сильнее STLC в таком порядке, так как каждый типов STLC программы в System F . Аналогично, система с подтипом будет сильнее, чем система без.ABFF

  3. Существуют ли локальные преобразования (в смысле статьи Феллайзена « О выразительной силе языков программирования» ), которые позволяют программе, которая печатает в системе печатать в системе B , но не наоборот. AB

  4. Гарантирует ли одна система типов более сильные свойства, чем другая. Например, системы линейного типа просто отклоняют больше программ, но это позволяет им делать более сильные заявления о программах, которые они принимают.

К сожалению, я не верю, что проводилась работа по категоризации или формализации этих понятий, за исключением лямбда-куба Барендрегта, как обсуждает @cody.

Сэм Тобин-Хохштадт
источник
3
Я предполагаю, что под «бумагой выразительности Феллайзена» вы имеете в виду его « О выразительной силе языков программирования» .
Мартин Бергер
Да, точно. Я уточнил этот ответ.
Сэм Тобин-Хохштадт
13

Я не уверен, что у меня есть удовлетворительный ответ на ваш вопрос, но если вы рассмотрите Системы Чистого Типа, которые являются обобщением систем, найденных в лямбда-кубе (подробный, если несколько устаревший обзор можно найти в классическом тексте Барендрегта ) то есть пара естественных понятий иерархии:

  1. ΓA t:TΓB t:TΓ,tT:(,,)PTS в том смысле, что от любого другого PTS есть морфизм. Это можно рассматривать как меру выразительности системы типов, где окончательная PTS является наиболее выразительной системой.

  2. ABAFωECC

Коди
источник