Подтипы и зависимые типы являются ортогональными понятиями.
Подтип обычно снабжен понятием подтипа, благодаря которому выражение одного типа может появиться в месте, где ожидается супертип.
Субтипирование, скорее всего, будет решаемо, и его легче будет реализовать при реализации.
Зависимая типизация гораздо более выразительна. Но если вы когда-нибудь захотите считать группу моноидом, вам нужно понятие подчинения, чтобы забыть о дополнительной структуре. Часто, например, при использовании Coq, создается тривиальное обязательное доказательство для борьбы с этим типом принуждения, поэтому на практике подтипирование может ничего не добавлять. Более важно иметь способы объединения различных теорий, чтобы сделать их многократно используемыми, например, повторное использование теории моноидов при разговоре о группах. Классы типов в Coq - недавнее новшество для таких вещей. Модули - более старый подход.
Если вы быстро сделаете гугл по «подтипам зависимых типов», вы обнаружите кучу работы по добавлению подтипов к зависимым типам, в основном примерно с 2000 года. Я полагаю, что мета-теория действительно сложна, поэтому в подтипах зависимых типов не появляется корректоры.
Еще одна вещь, которую дает подтип, - это то, что подразум подразумевает, что множество свойств когерентности имеют место. Теория зависимого типа также нуждается в понятии неуместности доказательства, чтобы моделировать все, что вы можете делать с подтипами. Например, в теории зависимых типов вы можете приблизить формирование подмножества с зависимой записью:
Получив это, вы можете систематически разрабатывать подтипы в теории зависимых типов. См. Тезис Уильяма Ловаса для примера добавления подтипов к теории зависимых типов (в данном случае, Twelf).
источник