Разница между зависимым типом, типом уточнения и Hoare Logic


18

Я знаю немного теории зависимых типов. Из википедии:

Зависимый тип - это тип, определение которого зависит от значения.

И из моего курса теории типов я вспоминаю, что зависимый тип:

Семейство типов, проиндексированных по типу.

Но у меня путаница в отношении зависимых типов, типов уточнения и логики хора.

Потому что из Depenedent vs тип уточнения типы уточнения выглядят как логика Хоара. Что дает больше типов уточнения мощности, помимо простого разрешения предиката, который должен быть удовлетворен (что выглядит почти так же, как Hoare Logic)?

Какую дополнительную вещь дает этот зависимый тип по сравнению с типами уточнения? И Зависимый тип более мощный, чем Типы уточнения + Sat / Constraint solver.

может кто-нибудь очистить воздух с примерами.

Ответы:


18

Это недавняя работа Пола-Андре Мельеса и Ноама Цайльбергера, которая исследует это. В частности, в статьях « Функторы» представлены системы уточнения типов и теорема двойственности Избелла для систем уточнения типов . Там также видео беседы о первом.

Я думаю, что существует много путаницы вокруг типов уточнения из-за того, что люди считают конкретные системы репрезентативными, что приводит к тому, что цели и детали этих конкретных систем связывают с общей идеей. Суть в том, что системы уточнения типов классифицируют термины, которые существуют независимо, тогда как (не уточняющие) типы, зависимые или нет, являются частью терминов. Это может звучать знакомо и, возможно, даже несколько противоречиво.

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

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

До сих пор я ничего не говорил о зависимых типах. Причина в том, что это абсолютно ортогональная проблема. Я бы сказал, что архетипически зависимые системы типов обычно представлены в церковном стиле и, следовательно, являются не системами уточнения типов, а NuPRL (на основе вычислительной теории типов , варианта наиболее архетипически зависимой теории типов, теории типов Мартина-Лёфа) это явно система уточнения типа, как я описал. Термины в NuPRL могут даже не иметь типов! Следует признать, что тот факт, что «PRL» означает «логика уточнения программы», также может быть подсказкой. С другой стороны, Типы уточнения для ML описывают систему типов уточнения, возможно, происхождение термина, который никоим образом не является системой зависимых типов.

Что касается троек Хоара, то это система уточнения типов. Они фактически используются в качестве примера системы уточнения типов в первой статье. Однако теория типов Хоара дает нечто, что можно рассматривать как систему типов без уточнения для языка, имеющего тройки Хоара.

Чтобы получить ответ о «мощи» различных систем, необходимо указать конкретную (семейство) систем (ы) зависимых типов и конкретную (семейство) систему (ы) уточняющих типов. Термин «система зависимых типов» охватывает очень широкий класс систем типов, а «системы уточнения типов» еще шире. Даже тогда термины не являются взаимоисключающими, поэтому это не будет сравнение между "системами зависимых типов" и "системами уточняющих типов". Однако, если под «системой зависимых типов» вы подразумеваете что-то вроде Coq , а для «системы типов уточнения» что-то вроде Liquid Typesтогда это довольно односторонне. Coq обычно считается достаточно мощным, чтобы справляться практически со всей математикой на практике; вы можете буквально внедрить и доказать правильность решения SMT в Coq, а затем использовать его; и очень близкий аналог к ​​типу подмножества может быть сформулирован. (NuPRL буквально имеет типы подмножеств.) С другой стороны, решатели SMT обычно ограничиваются разрешимыми теориями, где Coq не имеет такого ограничения; и многие системы, такие как Liquid Types, имеют ограниченный и нерасширяемый язык для указания предикатов. (Конечно, под «системой зависимых типов» можно подразумевать « зависимый ML» , а под «системой уточнения типов» NuPRL [которая также является системой зависимых типов), которая в других отношениях была бы односторонней).


1
Большое спасибо, действительно помогли. Да, читал Dependent Types на практике программирования (popl '99) и впал в замешательство. Приветствия.
Пушпа

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