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 : τ ∈ ΓY ⊢ M: τMτΓ
x : τ∈ΓΓ⊢x:τ(Γ)Γ,x:τ0⊢M:τ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(A→B)→A→B(→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.