Existe uma hierarquia de expressividade para sistemas de tipos?


23

Inspirado pelas extensas hierarquias presentes na teoria da complexidade, perguntei-me se essas hierarquias também estavam presentes nos sistemas de tipos. No entanto, os dois exemplos que encontrei até agora são mais como listas de verificação (com recursos ortogonais) do que hierarquias (com sistemas de tipos sucessivamente cada vez mais expressivos).

Os dois exemplos que encontrei são o cubo Lambda e o conceito de polimorfismo com classificação k . O primeiro é uma lista de verificação com três opções, o segundo é uma hierarquia real (apesar de que k-classificado para valores específicos de k é incomum, acredito). Todos os outros recursos do sistema de tipos que conheço são principalmente ortogonais.

Estou interessado nesses conceitos porque estou projetando minha própria linguagem e estou muito curioso em saber como ela se classifica entre os sistemas de tipos existentes no momento (meu sistema de tipos é um pouco não convencional, tanto quanto eu sei).

Percebo que o conceito de 'expressividade' pode ser um pouco vago, o que pode explicar por que os sistemas de tipos me parecem listas de verificação.


4
Tenho certeza de que comparações de expressividade rígidas e rápidas só podem ser feitas entre os sistemas de tipos mais teóricos. Se você estiver projetando uma linguagem de programação completa, poderá fazer uma comparação recurso a recurso com linguagens / formalismo existentes. Infelizmente, como muitos recursos podem ser codificados em termos de outros recursos, isso não será uma tarefa trivial. Se você pode ter tipos tão sofisticados quanto os de Scala ou Haskell, estará se saindo bem em termos de expressividade.
Dave Clarke

3
Eu realmente deveria finsih escrevendo esse post do meu blog sobre "Como comparar as linguagens de programação" ...
Andrej Bauer

@Andrej Bauer: Isso seria uma adição interessante às respostas e observações já presentes aqui. Eu já aprendi um pouco sobre como "expressividade" pode ser definida - talvez eu devesse ter perguntado isso ...
Alex ten Brink

Tenho certeza de que vi o polimorfismo de grau 2 usado em alguns lugares. Um que eu me lembro agora é Lammel, Peyton-Jones, Scrap Seu Boilerplate, 2003.
Radu Grigore

2
@Radu GRIGore: O polimorfismo Rank-2 é significativo porque permite que argumentos de tipo apareçam em posição duplamente contravariante, o que, pelo tipo usual de dualidade, permite modelar tipos existenciais por sua codificação da Igreja. O Rank-3 apenas fornece quantificação universal novamente e alterna a partir daí, então há pouco poder expressivo adicionado em comparação.
CA McCann

Respostas:


22

Existem vários sentidos de "expressividade" que você pode querer para um sistema de tipos.

  1. Que funções matemáticas você pode expressar em um sistema de tipos específico. Por exemplo, no cálculo lambda simplesmente digitado, nem todas as funções computáveis ​​podem ser expressas. O mesmo vale para o Sistema , mas estritamente mais funções podem ser expressas. Isso não é muito interessante quando você digita sistemas para idiomas completos de Turing.F

  2. Can sistema typecheck cada programa escrito em sistema B . É basicamente sobre isso que se trata a primeira noção de força de Cody para os PTSs. Mais uma vez, Sistema F é mais forte do que a STLC neste ordenação, uma vez a cada tipos de programa STLC em Sistema F . Da mesma forma, um sistema com subtipagem será mais forte que um sistema sem.UMABFF

  3. Existem transformações locais (no sentido do artigo de Felleisen Sobre o poder expressivo das linguagens de programação ) que permitem que um programa que digita no sistema digite no sistema B , mas não vice-versa. UMAB

  4. Um sistema de tipo garante propriedades mais fortes que outro. Por exemplo, sistemas do tipo linear apenas rejeitam mais programas, mas isso lhes permite fazer afirmações mais fortes sobre os programas que eles aceitam.

Infelizmente, não acredito que tenha havido trabalho para categorizar ou formalizar essas noções, com exceção do cubo lambda de Barendregt, como o @cody discute.


3
Acho que por "artigo de expressividade de Felleisen" você quer dizer o seu sobre o poder expressivo das linguagens de programação .
Martin Berger

Sim, exatamente. Esclarei essa parte da resposta.
Sam Tobin-Hochstadt

13

Não tenho certeza se tenho uma resposta satisfatória para sua pergunta, mas se você considerar o Pure Type Systems, que é uma generalização dos sistemas encontrados no cubo lambda (uma visão geral completa, embora um pouco datada, pode ser encontrada no texto clássico de Barendregt) ), existem algumas noções naturais de hierarquias:

  1. Morphisms de PTSses: intuitivamente há um morfismo entre o PTS A eo PTS B se cada termo bem digitado pode ser digitado em B: y- B t : TΓUMA t:TΓB t:TΓ,tT:(,,)PTS no sentido de que existe um morfismo de todos os outros PTS para ele. Isso pode ser visto como uma medida da expressividade de um sistema de tipos, onde o PTS final é o sistema mais expressivo.

  2. UMABUMAFωECC

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.