Какие языки исследований имеют более сильную систему типов, чем Haskell и почему?

14

Здесь я прочитал это:

У Haskell определенно нет самой продвинутой системы типов (даже близко, если считать языки исследований), но из всех языков, которые фактически используются в производстве, Haskell, вероятно, находится на вершине.

Поэтому я прошу две вещи:

  1. какие языки исследований имеют более мощные системы типов, чем Haskell;
  2. что они улучшают.

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

Виталий Олегович
источник
3
Что "лучше"?
Дэвид Ричерби
2
@DavidRicherby Полагаю, это означает более мощную систему типов
Виталий Олегович
2
Как только вы доказали, что система типов полна по Тьюрингу , это действительно имеет значение? ;-)
DevSolar
7
Машины Тьюринга полны по Тьюрингу, почему бы вам не использовать их для повседневных задач программирования?
Галле
4
Обратите внимание, что в оригинальном тексте упоминаются языки с более продвинутыми системами типов и не делается никаких утверждений, что «более продвинутый» лучше или хуже для системы типов.
Петерис

Ответы:

25

Вопрос несколько проблематичен, поскольку опирается на субъективное определение «лучше».

Языки с независимой типизацией, такие как Agda , Idris и Coq, имеют более сильную систему типов, чем Haskell. Это означает, что вы можете использовать типы в этих языках, чтобы доказать больше свойств вашего кода, чем в Haskell. То есть есть более неправильные программы, которые будут пойманы.

Однако это происходит по цене: вывод типа и проверка существования каких-либо значений данного типа больше невозможны. Это означает, что для этих языков вам необходимо явно аннотировать ваш код типами. По сути это сводится к написанию собственных доказательств правильности вашего кода.

Так эти языки "лучше", чем Haskell? Они могут проверить расширенные доказательства правильности вашего кода, но не могут автоматически подтвердить свойства вашего кода, как это может сделать Haskell.

Еще один язык исследований, который "лучше", чем Haskell, - это LiquidHaskell . В основном это Haskell с типами уточнений, прикрепленными сверху, проанализированными из специальных комментариев.

Типы уточнения позволяют уточнять типы с помощью свойств. Например, вместо Intуказания можно указать {i : Int | i > 0}тип всех положительных целых чисел. Вывод типа разрешаем с типами уточнения, но вы не можете доказать столько свойств корректности с ними, сколько вы можете с зависимыми типами.

Существуют и другие системы уточнения, но я не очень знаком с любой из них.

jmite
источник
Спасибо! Можно ли доказать, что система типов Haskell является самой сильной, которая все еще допускает вывод типов?
Виталий Олегович
3
Haskell определенно НЕ является самым сильным, который допускает вывод типов. Типы уточнения, о которых я упоминал, допускают вывод типов, и в Haskell добавляется множество расширений GHC, которые допускают немного более сильную систему типов.
jmite
4
Кроме того, существует множество систем типов, и многие из них несопоставимы: они будут в некоторых отношениях сильнее, чем Haskell, но в других слабее, чем Haskell. Нет линейного упорядочения систем типов от самых сильных до самых слабых.
jmite
5
Теперь я хочу доказать, что нет самой сильной системы типов, которая допускает вывод типов. Должен сопротивляться доказательству бесполезных фактов.
Андрей Бауэр
1
Этот факт не кажется мне бесполезным. Знание того, что существует сильнейшая система типов с выводом типов, было бы очень интересно, особенно если это оказалось возможным реализовать.
rationalis
10

Семейство языков ML (StandardML, OCaml ) возникло по аналогии с Haskell и поэтому имеет схожие системы типов. Однако они не совсем такие же, как на Haskell, и некоторые их функции могут вам подойти лучше (не существует такой вещи, как объективно лучшая система типов, потому что системы языков в языках программирования существуют, чтобы помочь людям ). Вот некоторые особенности OCaml, которые Haskell либо не имеет (но может иметь аналогичную концепцию), либо Haskell имеет, но сделал иначе:

  1. Полиморфные варианты .
  2. Объекты с глубиной подтипов и классов .
  3. Функторы , которые являются картами между модулями (на Haskell есть модули) и даже первоклассными модулями

И, пожалуйста, нет необходимости превращать это в перестрелку ML-Haskell, иначе я начну ссылаться на сообщения в блоге Боба Харпера ;-)

Андрей Бауэр
источник
9

Исследовательский язык Clean имеет лучшую систему типов, чем Haskell, потому что он имеет уникальные типы . Идеи, лежащие в основе типов уникальности, тесно связаны с линейной логикой , которая ближе к ресурсному ограниченному «реальному миру», чем классическая логика.

Анти-исследовательский язык Rust также имеет систему типов с уникальными функциями, которые ближе к «реальному миру», чем классические системы чистого типа. Большинство идей, которые повлияли на систему типов, были опубликованы совершенно независимо от Rust задолго до того, как она появилась. Но способ, которым эти старые идеи собраны воедино, уникален и также заслуживает реальных научных публикаций, даже если существуют известные лазейки и несоответствия.

Томас Климпел
источник
3
Каким-то образом «опубликованные» и «анти-исследования» не сочетаются друг с другом.
Андрей Бауэр
1
Уникальность, безусловно, является интересной концепцией, но IMO больше касается семантики, а не функции системы типов как таковой. И действительно ли это делает систему типов строго лучше ? Может ли Clean сделать более новые вещи, которые Haskell добавил к своей системе типов, полиморфизму более высокого ранга и т. Д. - некоторые из них даже возможны, когда система типов уже должна иметь дело с уникальностью?
оставил около
1
@leftaroundabout Насколько вы знакомы с типами уникальности или линейной логикой? Если x имеет уникальный тип, то, например, f (x, x) не является типизированным. Может быть возможно расширить Haskell, чтобы также поддерживать типы уникальности. Семантика перемещения в C ++ также может рассматриваться как улучшение поддержки уникальных типов поверх существующей системы типов.
Томас Климпел
Я знаком с семантикой перемещения C ++, возможно, именно поэтому мое впечатление об уникальности «не очень похоже на систему типов». Что я нахожу интересным, так это то, мешают ли полные распространяющиеся наружу типы уникальности мешать другим функциям усовершенствованной системы типов?
оставил около
1
@leftaroundabout Rvalue для меня звучит как система типов. Почему типы уникальности должны мешать другим расширенным возможностям типов? В худшем случае эти расширенные функции просто не будут применяться к типам уникальности. Конечно, функции «реального мира», такие как типы уникальности, означают стремление к широте, а не к глубине, и времени, которое вы потратите на расширение, больше не будет для углубления. Но у меня сложилось впечатление, что типы уникальности предлагают хороший баланс между теорией и практикой, поэтому я думаю, что время будет хорошо потрачено.
Томас Климпел