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


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↔

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.