Caracterização de termos lambda que possuem tipos de união

29

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):

ΓM:T1ΓM:T2ΓM:T1T2(I)ΓM:(I)

Os tipos de interseção têm propriedades interessantes com relação à normalização:

  • A lambda-termo pode ser digitado sem usar o I 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?

ΓM:T1ΓM:T1T2(I1)ΓM:T2ΓM:T1T2(I2)

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?

Gilles 'SO- parar de ser mau'
fonte
Pergunta interessante. Você poderia dizer que as interfaces do OOP correspondem a isso?
Raphael
Talvez você possa estar interessado neste cs.cmu.edu/~rwh/courses/refinements/papers/Barbaneraetal95/...
Fabio F.

Respostas:

11

No primeiro sistema, o que você chama de subtipagem são essas duas regras:

Γ,x:T1M:SΓ,x:T1T2M:S(E1)Γ,x:T2M:SΓ,x:T1T2M:S(E2)

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:

Γ,x:T1M:SΓ,x:T2M:SΓ,x:T1T2M:S(E)Γ,x:M:S(E)

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)Ω:AAE


Pensamentos aleatórios: (talvez valha a pena perguntar no TCS)

Isso me leva a supor que as propriedades relacionadas são algo como:

  • um termo λ admite um tipo que não contém se M N tem uma forma normal para todos os N que têm uma forma normal. ( δ falha nos dois testes, mas o termo λ acima é aprovado)MMNNδ
  • um termo λ pode ser digitado sem usar a regra E se M N estiver fortemente normalizando para todos os N fortemente normalizados .MEMNN

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)

Stéphane Gimenez
fonte
Good point about the subtyping rules, they show that union types aren't nearly as natural as intersections (which get typed orthogonally to arrows). About the second part I need to think some more.
Gilles 'SO- stop being evil'
I think M=(λx.xx)(λy.y) answers the exercise, if you are talking about union types.
jmad
Sobre call / cc: ele precisa mais do que apenas termos lambda (como termos lambda-mu ou outra estrutura), mas os sistemas de tipos são mais complexos, sistemas lógicos, nos quais os tipos de união podem ser irrelevantes.
Jmad
@jmad: Na verdade, tipos de interseção são necessários para digitar esse termo :-( Talvez as uniões e interseções juntos seria interessante?
Stéphane Gimenez
Eu estaria interessado em um termo λ que se possa digitar com tipos de união (rs. Com tipos de interseção), mas não com tipos simples (rs. Com tipos de interseção).
Jmad
16

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 type M2 and M1M2 then I can type M1". This is often not true in non-intersection types because a term can be duplicated:

(λx.Mxx)NMNN

and then typing MNN means that you can type both occurrences of N but not with the same type, for example

M:T1T2T3N:T1N:T2
With intersection types you can transform this into:
M:T1T2T1T2T3N:T1T2
and then the crucial step is now really easy:
(λx.Mxx):T1T2T3N:T1T2
so (λx.Mxx)N can by typed with intersection types.

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,

x:T1T2Tnxx:S
But you still have to prove that for every i, x:Tixx:S which seems impossible even is S is an union type.

This is why I don't think there is an easy characterization about normalization for union types.

jmad
fonte