Recientemente comencé mis estudios en teoría de tipos / sistemas de tipos y cálculo Lambda.
Ya he leído sobre el cálculo simple de Lambda tipificado en estilo Church y Curry. El último también se conoce como sistema de asignación de tipo (TA).
Estoy pensando en las relaciones entre TA y Hindley-Milner (HM), el sistema en lenguajes como ML y Haskell.
El libro Lambda-Calculus and Combinators: An Introduction (Hindley) dice que la TA es polimórfica (pág. 119). ¿Es esa la misma sensación de polimorfismo en sistemas como HM y System-F?
Se dice que TA tiene una fuerte propiedad de normalización, por lo que no está completa. Los idiomas que utilizan el sistema HM están completos, por ejemplo, Haskell. Así debe ser el caso de que el sistema HM permita que términos como el bucle infinito reciban un tipo. ¿Es correcto o me falta algo?
De cualquier manera, me gustaría saber la relación entre TA y HM.
fuente
Respuestas:
El sistema F y su subsistema HM tienen un tipo anterior para la cuantificación universal:
que el sistema en Hindley / Seldin no tiene. Esa es la diferencia clave.
Ahora el Sistema F no tiene una inferencia de tipo decidible, y HM es una forma de combinar la inferencia de tipo con polimorfismo paramétrico razonablemente expresivo. HM logra esto permitiendo solo la cuantificación universal más externa, es decir, todos los tipos son de la forma
donde es libre de cuantificador (y ). HM proporciona un sistema de reglas que garantiza que solo los programas que se puedan escribir de esta manera sean admisibles. Esto se logra mediante el "let-polimorfismo". El sistema en Hindley / Seldin no hace nada de eso. Más tarde, en el Capítulo 13, Hindley / Seldin presenta sistemas de tipo puro (PTS), de los cuales el Sistema F es un caso especial. No estoy seguro si HM se puede expresar como PTS.τ n≥0
La cuestión de la fuerte normalización es ortogonal. El sistema F y HM se están normalizando fuertemente, pero eso puede remediarse fácilmente mediante la introducción de combinadores de punto fijo o similares. El documento Principales esquemas de tipos para programas funcionales de L. Damas y R. Milner incluso declara esto: " Por ejemplo, la recursión se omite ya que puede introducirse simplemente agregando el operador polimórfico de punto fijo ... " La introducción de puntos fijos , completando el sistema Turing, no plantea problemas desde el punto de vista de la inferencia de tipos.
fuente