Introdução à teoria do tipo Martin-Löf


36

Qual seria a melhor introdução às idéias de Per Martin-Löfs sobre teoria de tipos? Eu assisti a algumas palestras da escola de verão em Oregon PL, mas ainda estou um pouco intrigado com a seguinte pergunta:

O que é um tipo?

Eu sei o que é um conjunto, já que você pode defini-los pelos axiomas ZF habituais e eles têm um modelo concreto muito intuitivo; pense em uma cesta cheia de coisas. No entanto, ainda não vi uma definição razoável de um tipo e fiquei imaginando se existe alguma fonte que destilaria essa idéia para dummy.


4
O livro do HoTT tem uma introdução que compara tipos e conjuntos, talvez isso ajude, consulte a Seção 1.1 do homotopytypetheory.org/book . Mais importante, porém, você quer que implantemos na sua cabeça a idéia correta dos tipos, enquanto que para os conjuntos, é um prazer tê-los descritos por axiomas, sem insistir em saber "o que realmente são". Bem, tipos são descritos pelas regras de inferência para tipos. E eles têm um modelo de concreto muito intuitivo, você sabe, um banho cheio de blocos de Lego. Tudo o que você pode construir a partir deles está no tipo.
Andrej Bauer

Acho que afastar meu cérebro da teoria dos conjuntos é o maior problema. No entanto, não tenho certeza de quão boa é a analogia da Lego. Quais são os blocos? Se x: A e y: A normalmente, não posso criar nada a menos que A seja algum tipo de seta recursiva. Claro que muitas vezes pode misturar coisas de tipo diferente de construir algo de um terceiro tipo ...
dst

4
Os blocos de Lego são os construtores de tipo. Assim, por exemplo a partir de e Y : Um pode construir ( x , y ) e ( x , x ) e i n l ( x ) , e r e l f x e λ z : Uma . x . Você também pode criar novos tipos, por exemplo , d ( x , y ) e zx:UMAy:UMA(x,y)(x,x)Euneu(x)reeufxλz:UMA.xEud(x,y)e assim por diante. As pessoas têm diferentes intuições sobre os tipos. Sets é um deles, mas bruto. Os tipos também são como espaços topológicos. Eles também são como dados estruturados em programação. Eles também são comoω-grupóides. Essa é a beleza disso, a riqueza de possibilidades. Escolha uma possibilidade e corra com ela. z:UMAEud(x,z)ω
Andrej Bauer

Respostas:


31

Um tipo é uma propriedade dos cálculos. É o que você escreve no lado direito de dois pontos.

Deixe-me elaborar sobre isso. Observe que a terminologia não é completamente padrão: alguns artigos ou livros podem usar palavras diferentes para certos conceitos.

Um termo é um elemento de uma sintaxe abstrata que se destina a representar a computação. Intuitivamente, é uma árvore de análise. Formalmente, é uma árvore finita onde os nós pertencem a algum alfabeto. Um cálculo não digitado define uma sintaxe para os termos. Por exemplo, o cálculo lambda (sem tipo) contém termos ( , N , etc. escritos ) criados a partir de três tipos de nós:MN

  • variáveis, de arity 0 (uma coleção numerável), escritas , y , etc .;xy
  • aplicação de uma variável da aridade 1 (uma coleção numerável da mesma, com uma seleção de variáveis), escrita etc .;λx.M
  • aplicação, de aridade 2, escrita .MN

Um termo é uma construção sintática. Uma semântica relaciona termos a cálculos. Existem muitos tipos de semântica, sendo a mais comum operacional (descrevendo como os termos podem ser transformados em outros termos) ou denotacional (descrevendo termos por uma transformação em outro espaço, geralmente construída a partir da teoria dos conjuntos).

Um tipo é uma propriedade de termos. Um sistema de tipos para um cálculo sem tipo descreve quais termos têm quais tipos. Matematicamente, no núcleo, um sistema de tipos é uma relação entre termos e tipos. Mais precisamente, um sistema de tipos é uma família de tais relações, indexadas por contextos - normalmente, um contexto fornece pelo menos tipos para variáveis ​​(ou seja, um contexto é uma função parcial de variáveis ​​para tipos), de modo que um termo possa ter apenas um tipo em contextos que fornecem um tipo para todas as suas variáveis ​​livres. Que tipo de objeto matemático é um tipo depende do sistema de tipos.

Alguns sistemas de tipos são descritos com tipos como conjuntos, usando noções de teoria de conjuntos, como interseção, união e compreensão. Isso tem a vantagem de se basear em fundamentos matemáticos familiares. Uma limitação dessa abordagem é que ela não permite raciocinar sobre tipos equivalentes.

Muitos sistemas de tipos descrevem os próprios tipos como termos em um cálculo de tipos. Dependendo do sistema de tipos, esses podem ser os mesmos termos ou termos diferentes. Usarei a frase termo base para me referir a um termo do cálculo que descreve a computação. Por exemplo, o cálculo lambda de digitação simples usa o seguinte cálculo de tipos (escrito , etc.):τ

  • tipos de base, de aridade 0 (uma coleção finita ou denumerável), escritos , B , etc .;UMAB
  • função, da aridade 2, escrita .τ0 0τ1 1

A relação entre termos e tipos que define o cálculo lambda simplesmente digitado é geralmente definida pelas regras de digitação . As regras de digitação não são a única maneira de definir um sistema de tipos, mas são comuns. Eles funcionam bem para sistemas de tipos composicionais, ou seja, sistemas de tipos em que o (s) tipo (s) de um termo é construído a partir dos tipos de subtermos. As regras de digitação definem um sistema de tipos indutivamente: cada regra de digitação é um axioma que afirma que, para qualquer instanciação das fórmulas acima da regra horizontal, a fórmula abaixo da regra também é verdadeira. Consulte Como ler regras de digitação? para mais detalhes. Existe um cálculo lambda digitado completo de Turing? também pode ser interessante.

Para o cálculo lambda de digitação simples, o julgamento de digitação significa que M tem o tipo τ no contexto Γ . Omiti a definição formal de contextos. x : τ ΓΓM:τMτΓ

x:τΓΓx:τ(Γ)Γ,x:τ0M:τ1Γλx.M:τ0τ1(I)ΓM:τ0τ1ΓN:τ0ΓMN:τ1(E)

Por exemplo, se e B são tipos baseados, então λ x . λ y . xAB possui o tipo ( A B ) A B em qualquer contexto (de baixo para cima, aplique ( I ) duas vezes, depois ( E ) e finalmente ( Γ ) em cada ramificação).λx.λy.xy(AB)AB(I)(E)(Γ)

É possível interpretar os tipos do cálculo lambda simplesmente digitado como conjuntos. Isso equivale a fornecer uma semântica denotacional para os tipos. Uma boa semântica denotacional para os termos base designaria para cada termo base um membro da denotação de todos os seus tipos.

A teoria dos tipos intuicionistas (também conhecida como teoria dos tipos de Martin-Löf) é mais complexa que simplesmente digita o cálculo lambda, pois possui muitos outros elementos no cálculo dos tipos (e também adiciona algumas constantes aos termos de base). Mas os princípios básicos são os mesmos. Uma característica importante da teoria dos tipos de Martin-Löf é que os tipos podem conter termos básicos (são tipos dependentes ): o universo dos termos básicos e o universo dos tipos são os mesmos, embora possam ser distinguidos por regras sintáticas simples (geralmente conhecidas como classificação, ou seja, atribuir classificações a termos, na reescrita da teoria).

Existem sistemas de tipos que vão além e misturam completamente tipos e termos básicos, para que não haja distinção entre os dois. Dizem que sistemas desse tipo são de ordem superior . Nesses cálculos, os tipos têm tipos - um tipo pode aparecer no lado esquerdo da . O cálculo da construção é o paradigma dos tipos dependentes de ordem superior. O cubo lambda (também conhecido como cubo Barendregt) classifica os sistemas de tipos em termos de permitir que os termos dependam dos tipos ( polimorfismo - alguns termos de base contêm tipos como subtermos), tipos de dependência de termos (tipos dependentes) ou tipos de dependência em tipos ( operadores de tipo - o cálculo de tipos tem uma noção de computação).:

A maioria dos sistemas de tipos recebeu semântica teórica-conjunto, para ligá-los aos fundamentos usuais da matemática. Como estão relacionadas as linguagens de programação e os fundamentos da matemática? e Qual é a diferença entre as visões semântica e sintática dos tipos de função? pode ser interessante aqui. Também tem havido trabalho sobre o uso da teoria dos tipos como base da matemática - a teoria dos conjuntos é a base histórica, mas não é a única opção possível. A teoria do tipo de homotopia é um marco importante nessa direção: descreve a semântica da teoria do tipo intuicionista intencional em termos da teoria da homotopia e constrói a teoria dos conjuntos nessa estrutura.

Eu recomendo os livros de Benjamin Pierce Tipos e linguagens de programação e tópicos avançados em Tipos e linguagens de programação . Eles são acessíveis a qualquer graduação sem outro pré-requisito que não seja familiaridade básica com o raciocínio matemático formal. TAPL descreve muitos sistemas de tipos; tipos dependentes são o assunto do capítulo 2 do ATTAPL.


+1 para TAPL. Eu era capaz de me ensinar um pouco sobre tipos lendo esse livro.
Guy Coder

Não tenho certeza se o ATTAPL é um bom ponto de partida para aprender sobre tipos dependentes.
Martin Berger

15

Talvez uma pergunta melhor para alguém proveniente da teoria dos conjuntos e que lide com a diferença entre teoria dos conjuntos e teoria dos tipos de Martin-Löf, seja refletir sobre o que são conjuntos. Suas intuições sobre a teoria dos conjuntos e os fundamentos da matemática serão infectadas com suposições inquestionáveis ​​da teoria dos conjuntos que você considera como garantidas. A teoria do tipo Alas-Martin-Löf não compartilha essas suposições.

Contrariamente ao entendimento convencional, a teoria dos conjuntos é uma teoria de duas relações: igualdade e associação de conjuntos , não apenas associação de conjuntos. E essas duas relações são construídas em fases substancialmente distintas.

  1. Construímos a lógica de primeira ordem como uma teoria da igualdade de coisas arbitrárias (não apenas conjuntos). A lógica de primeira ordem usa uma noção informal de prova. A prova de conceito não é expressável formalmente apenas na lógica de primeira ordem.

  2. Em seguida, construímos a teoria dos conjuntos sobre a lógica de primeira ordem como uma teoria dos conjuntos e da associação de conjuntos.

  3. A associação e a igualdade de conjuntos são então relacionadas pelo axioma da extensionalidade, que diz que dois conjuntos são iguais exatamente quando eles têm os mesmos membros.

  4. Finalmente, o conceito informal de prova de (1) obtém uma racionalização ex post como certos conjuntos (árvores de prova).

É importante perceber que a noção de prova é, portanto, um cidadão de segunda classe na teoria dos conjuntos.

Essa configuração funciona bem para a matemática convencional de pequeno / médio porte, mas agora estamos enfrentando provas em larga escala, como a classificação de todos os grupos simples finitos ou a verificação de programas de computador não triviais, ela se desfaz, porque não leva a uma fácil mecanização.

TT

λ


Isso foi extremamente útil. Penso que uma questão importante para quem entra em matemática construtiva é desaprender muitas coisas.
dst

Concordo. Demora um pouco para desaprender as suposições da teoria dos conjuntos não reconhecidas. Fazer muita programação da Agda me ajudou e pode funcionar para você também, se você for de ciência da computação.
Martin Berger

10

Não conheço caminhos fáceis para a teoria do tipo Martin-Löf. Eu acho que o seguinte poderia servir como introdução.

No entanto, se você está intrigado com a pergunta "o que é um tipo", sugiro entrar primeiro em teorias de tipos muito mais simples. Qualquer linguagem de programação digitada serve, mas por exemplo, Ocaml, F # e Haskell seriam especialmente úteis. Simplificando um pouco, pode-se dizer que a teoria do tipo Martin-Löf estende os tipos por trás das linguagens mencionadas de duas maneiras:

  1. Com tipos dependentes . Você os encontra em forma de domador em várias linguagens de programação.
  2. Com tipos de identidade. Essa é a principal inovação das teorias de tipos dependentes anteriores de Martin-Löf.

A idéia principal por trás dos tipos dependentes é simples: os tipos podem ser parametrizados por programas. Isso não é possível (simplificando um pouco) em sistemas de digitação mais convencionais, como os mencionados acima. Embora simples, as consequências são profundas: os tipos dependentes elevam a correspondência de Curry-Howard à lógica construtiva de primeira ordem. Os tipos de identidade são um pouco incomuns. Se / quando você se sentir confortável com um idioma como Haskell, poderá aprender Agda , que é basicamente Haskell com a teoria do tipo Martin-Löf. Eu sinto que o Agda é muito mais fácil de aprender para um programador do que ler os livros mencionados acima.


Eu realmente conheço Haskell. Meu problema é que qualquer tutorial mostrará apenas como definir tipos, mas nunca o que eles realmente são. Parece haver alguma tag mágica anexada a todos os seus dados, para que o verificador de tipos possa escolher a versão correta de uma função polimórfica e verificar se as coisas não estão misturadas de maneiras que não fazem sentido. Eles ainda deixam a questão em aberto sobre o que é um tipo. Estou especialmente intrigado com isso, já que a Voevodsky & Co. está tentando basear toda a matemática nisso, mas nunca vi uma definição precisa.
dst 29/09

2
Em Haskell, você tem julgamentos de digitação ΓM:α Onde M é um programa, α é o tipo de M, assumindo que MAs variáveis ​​livres do são digitadas conforme assumido no ambiente de digitação Γ. Na primeira aproximação, os próprios tipos de Haskell são 'blobs', marcadores sintáticos. Isso é exatamente o mesmo na teoria dos tipos de Martin-Löf. Acontece que os tipos, os 'blobs', os marcadores sintáticos da teoria dos tipos de Martin-Löf são mais complicados do que os de Haskell.
Martin Berger

Os tipos são definidos com muita precisão em Haskell, na teoria dos tipos de Martin-Löf e na teoria dos tipos de homotopia de Voevodsky. Não há ambiguidade alguma. Por exemplo, o Apêndice A.2 fornece um sistema de provas para todos os termos e tipos de teoria dos tipos de homotopia. Se você deseja ainda mais rigor, pode consultar as formalizações Coq ou Agda .
Martin Berger

2
Talvez você precise engolir que tipos não têm outra essência além de como eles são definidos. Isso não é diferente com, por exemplo, Conjuntos, eles são dados pelos axiomas da teoria dos conjuntos. (Isso não é bem verdade, mas não deixa de ser importante para entender.)
Martin Berger
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.