Muitos livros didáticos cobrem tipos de interseção no cálculo lambda. As regras de digitação para interseção podem ser definidas da seguinte maneira (além do cálculo lambda simplesmente digitado com subtipagem):
Os tipos de interseção têm propriedades interessantes com relação à normalização:
- A lambda-termo pode ser digitado sem usar o governar sse é fortemente normalizando.
- Um termo lambda admite um tipo que não contém se tiver uma forma normal.
E se, em vez de adicionar interseções, adicionarmos sindicatos?
O cálculo lambda com tipos simples, subtipos e uniões possui alguma propriedade semelhante interessante? Como os termos tipificáveis com união podem ser caracterizados?
lambda-calculus
type-theory
logic
Gilles 'SO- parar de ser mau'
fonte
fonte
Respostas:
No primeiro sistema, o que você chama de subtipagem são essas duas regras:
Eles correspondem às regras de eliminação para ; sem eles o conectivo ∧ é mais ou menos inútil.∧ ∧
No segundo sistema (com conectivos e → , aos quais também podemos adicionar um ⊥ ), as regras de subtipagem acima são irrelevantes, e acho que as regras que você tinha em mente são as seguintes:∨ → ⊥
Pelo que vale a pena, esse sistema permite digitar (usando a regra ⊥ E ), que não pode ser digitada apenas com tipos simples, que têm uma forma normal, mas não é altamente normalizante.(λx.I)Ω:A→A ⊥E
Pensamentos aleatórios: (talvez valha a pena perguntar no TCS)
Isso me leva a supor que as propriedades relacionadas são algo como:
Exercício: prove que estou errado.
Também parece ser um caso degenerado, talvez devêssemos considerar adicionar esse cara à imagem. Tanto quanto me lembro, permitiria obter ?A∨(A→⊥)
fonte
I just want to explain why intersection types are well-suited to characterize classes of normalization (strong, head or weak), whereas other type systems can not. (simply-typed or system F).
The key difference is that you have to say: "if I can typeM2 and M1→M2 then I can type M1 ". This is often not true in non-intersection types because a term can be duplicated:
and then typingMNN means that you can type both occurrences of N but not with the same type, for example
Now about union types: suppose you can type(λx.xx)(λy.y) with some union type, then you can also type λx.xx and then get for some types S,T1,…
This is why I don't think there is an easy characterization about normalization for union types.
fonte