Na maioria dos sistemas de tipos, as regras de tipo trabalham juntas para definir julgamentos do formulário:
Γ⊢e:τ
Isto indica que no contexto a expressão e tem o tipo τ . Γ é um mapeamento das variáveis livres de e para seus tipos.Γeτ
Γe
Um sistema de tipos consistirá em um conjunto de axiomas e regras (um sistema formal de regras de inferência , como Raphael aponta).
Um axioma é da forma
Γ⊢e:τ
Isto indica que o julgamento detém (sempre).Γ⊢e:τ
Um exemplo é
x:τ⊢x:τ
que afirma que, sob a suposição de que o tipo de variável é τ , a expressão x tem o tipo τ .xτxτ
As regras de inferência pegam fatos que já foram determinados e constroem fatos maiores a partir deles. Por exemplo, a regra de inferência
Γ⊢e1:τ→τ′Γ⊢e2:τΓ⊢e1 e2:τ′
diz que se eu tiver uma derivação do fato e uma derivação do fato y- ⊢ e 2 : τΓ⊢e1:τ→τ′Γ⊢e2:τ , então eu posso obter uma derivação do fato . Nesse caso, esta é a regra para digitar o aplicativo de funções.Γ⊢e1 e2:τ′
Existem duas maneiras de ler esta regra:
- de cima para baixo - dadas duas expressões (uma função e outra expressão) e algumas restrições em seu tipo, podemos construir outra expressão (a aplicação da função à expressão) com o tipo fornecido.
- bottom-up - dada uma expressão que é, nesse caso, a aplicação de uma função a alguma expressão, a maneira como ela é digitada é digitando primeiro as duas expressões, garantindo que seus tipos atendam a algumas restrições, a saber, que a primeira é uma tipo de função e que o segundo tenha o tipo de argumento da função.
Algumas regras de inferência também manipulam adicionando novos ingredientes (visualizados de baixo para cima). Aqui está a regra para a atração- λ :Γλ
Γx:τ⊢e:τ′Γ⊢λx.e:τ→τ′
As regras de inferência são aplicadas indutivamente com base na sintaxe da expressão que está sendo considerada para formar uma árvore de derivação. Nas folhas da árvore (no topo) haverá axiomas e os galhos serão formados aplicando regras de inferência. No final da árvore está a expressão que você está interessado em digitar.
Por exemplo, uma derivação da digitação da expressão éλf.λx.f x
f:τ→τ′,x:τ⊢f:τ→τ′f:τ→τ′,x:τ⊢x:τf:τ→τ′,x:τ⊢f x:τ′f:τ→τ′⊢λx.f x:τ′⊢λf.λx.f x:τ′
Ambos os livros são muito abrangentes, mas começam lentamente, construindo uma base sólida.