Recentemente, iniciei meus estudos em teoria de tipos / sistemas de tipos e Lambda Calculus.
Eu já li sobre o Simple Typed Lambda Calculus no estilo Church and Curry. O último também é conhecido como sistema de atribuição de tipos (TA).
Estou pensando nas relações entre TA e Hindley-Milner (HM), o sistema em idiomas como ML e Haskell.
O livro Lambda-Calculus and Combinators: An Introduction (Hindley) diz que a AT é polimórfica (pag. 119). Esse é o mesmo senso de polimorfismo em sistemas como HM e System-F?
Diz-se que o AT possui a forte propriedade de normalização, portanto não está completo. Os idiomas que usam o sistema HM estão completos, Haskell por exemplo. Portanto, deve ser o caso do sistema HM permitir termos como o loop infinitopara receber um tipo. Está correto ou estou faltando alguma coisa?
De qualquer forma, gostaria de saber a relação entre TA e HM.
fonte
Respostas:
O sistema F e seu subsistema HM possuem um tipo antigo para quantificação universal:
que o sistema em Hindley / Seldin não possui. Essa é a principal diferença.
Agora, o Sistema F não possui inferência de tipo decidível, e o HM é uma maneira de combinar inferência de tipo com polimorfismo paramétrico razoavelmente expressivo. A HM consegue isso permitindo apenas a quantificação universal mais externa, ou seja, todos os tipos têm a forma
Ondeτ é um quantificador livre (e n ≥ 0 ) O HM fornece um sistema de regras que garante que apenas os programas que podem ser digitados dessa maneira sejam admissíveis. Isso é alcançado pelo "let-polymorphism". O sistema em Hindley / Seldin não faz nada disso. Posteriormente, no Capítulo 13, Hindley / Seldin apresenta sistemas de tipo puro (PTS), dos quais o Sistema F é um caso especial. Não tenho certeza se o HM pode ser expresso como um PTS.
A questão da forte normalização é ortogonal. O sistema F e o HM estão fortemente normalizando, mas isso pode ser facilmente remediado com a introdução de combinadores de ponto de correção ou similares. Os esquemas de tipos principais de papel para programas funcionais de L. Damas e R. Milner afirmam ainda: " Por exemplo, a recursão é omitida, pois pode ser introduzida simplesmente adicionando o operador de ponto fixo polimórfico ... " A introdução de pontos de fixação , tornando o sistema Turing completo, não apresenta problemas do ponto de vista da inferência de tipo.
fonte