Relação entre o sistema de atribuição de tipos (AT) e o sistema Hindley-Milner

8

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 infinitoΩpara receber um tipo. Está correto ou estou faltando alguma coisa?

De qualquer forma, gostaria de saber a relação entre TA e HM.

Rafael Castro
fonte
1
Eu nunca ouvi falar do sistema de atribuição de tipos antes. Eu pesquisei no Google e recebi essa pergunta como terceira resposta, o que significa que deve ser muito nicho. Você pode explicar o que é isso? Além disso, o que é um "loop infinito"? Você quer dizer uma computação sem interrupção?
gardenhead
A atribuição de tipos é uma versão do Cálculo Lambda com Digitação Simples criado por Curry. Você deve procurar isso no livro mencionado. E sim,Ω é o loop infinito padrão λcálculo ou o programa sem interrupção.
Rafael Castro
Acho que devo fazer essa pergunta em outra troca de pilha mais teórica / matemática. Eu devo?
Rafael Castro
Você poderia tentar. Dê uma chance à história e ao mathoverflow. No entanto, você disse que "iniciou seus estudos recentemente", então eu ficaria surpreso se sua pergunta fosse tão avançada. Eu acho que você está apenas usando terminologia incomum para descrever conceitos simples (embora possam estar errados). Por exemplo, o loop infinito é geralmente chamado de tipo inferior (se eu entendi corretamente).
gardenhead
1
Definitivamente, minha pergunta não está no nível de pesquisa. Minha pergunta é mais como "ei, estou entendendo esses conceitos básicos, certo?". Mas vou tentar, talvez eu receba uma resposta.
Rafael Castro

Respostas:

9

O sistema F e seu subsistema HM possuem um tipo antigo para quantificação universal:

τ:: =x.τ | ...

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

x1x2...xn.τ

Onde τ é um quantificador livre (e n0 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.

Martin Berger
fonte
Seria correto pensar HM = TA + "let-polymorphism"? O livro Lambda-Calculus and Combinators (Hindley), até o momento, não dizia nada sobre quantificação universal de tipos. O TA usa variáveis ​​de tipo, mas não sei nada sobre o intervalo desses tipos. Para deixar claro, ainda não estudei o sistema HM, mas sei para que serve.
Rafael Castro
@RafaelCastro Se você olhar de soslaio ... Se você tem um histórico de CS, o livro TAPL de Pierce é provavelmente uma explicação muito mais acessível sobre HM e sobre sistemas de digitação em geral. O artigo de Damas / Milner que mencionei é muito fácil de ler, se você pode ver além da configuração de tipo antiga. Dou-o aos meus alunos de doutorado iniciantes. Faça uma leitura! Hindley / Seldin é um pouco formal.
Martin Berger
As variáveis ​​de tipo @RafaelCastro variam sobre os tipos. Todos os tipos. É por isso que o Sistema F é impredicativo.
Martin Berger
Obrigado. Sim, eu sou estudante de graduação em CS, então tentarei o livro TAPL de Pierce.
Rafael Castro
@RafaelCastro Provavelmente, não há maneira melhor de aprender sobre tipos do que ler TAPL e implementar os sistemas de digitação discutidos lá.
Martin Berger