Los subtipos y los tipos dependientes son conceptos ortogonales.
El subtipo generalmente está equipado con una noción de subsunción, por lo que una expresión de un tipo puede aparecer en el lugar donde se espera un supertipo.
La subtipificación es más probable que sea decidible y es más simple de administrar en la implementación.
La escritura dependiente es mucho más expresiva. Pero si alguna vez quiere considerar que un grupo también es un monoide, entonces necesita una noción de subsunción para olvidar la estructura adicional. A menudo, como cuando se usa Coq, se genera una obligación de prueba trivial para lidiar con este tipo de coerción, por lo que en la práctica el subtipo puede no agregar nada. Lo que es más importante es tener formas de agrupar varias teorías para hacerlas reutilizables, como reutilizar la teoría de los monoides cuando se habla de grupos. Las clases de tipos en Coq son una innovación reciente para hacer tales cosas. Los módulos son un enfoque más antiguo.
Si realiza una búsqueda rápida en Google de "subtipos de tipos dependientes", encontrará un montón de trabajo agregando subtipos a tipos dependientes, principalmente a partir del año 2000. Me imagino que la metateoría es realmente desafiante, por lo que no aparece ningún subtipo de tipos dependientes en asistentes de prueba.
Una cosa adicional que le da el subtipo es que la subsunción implica que se mantienen muchas propiedades de coherencia. Una teoría de tipo dependiente también necesita una noción de irrelevancia de prueba para modelar todo lo que puede hacer con subtipos. Por ejemplo, en la teoría del tipo dependiente puede aproximarse formando un subconjunto con un registro dependiente:
Una vez que tenga eso, puede elaborar sistemáticamente el subtipo en la teoría del tipo dependiente. Ver la tesis de William Lovas para un ejemplo de agregar subtipos a una teoría de tipo dependiente (en este caso, Twelf).
fuente