Existem muitas maneiras de modelar o polimorfismo via teoria de domínio, deixe-me descrever uma que é fácil de entender, para que você possa pensar sobre isso sozinho. É um "modelo PER".
Pegue qualquer modelo do -calculus sem tipo, por exemplo, um domínio tal que seja uma retração de (por exemplo, considere tal que . Seja e sejam a retração e a seção, respectivamente.λDD→DDDD≅N⊥×(D→D))Λ:D→(D→D)Γ:(D→D)→D
Vamos interpretar os tipos como relações de equivalência parciais (PER) em . Lembre-se de que um PER é uma relação simétrica e transitiva, mas não precisa ser reflexiva. Para cada tipo , atribuímos um PER . Pense em como " é um elemento de " e como " e são iguais no que diz respeito a ".Dτ∼τx∼τxxτx∼τyxyτ
Podemos ter alguns tipos básicos (mas não precisamos), por exemplo, se garantirmos que seja um subdomínio de por meio de uma incorporação então podemos definir por
N⊥Dι:N→D∼nat
x∼naty⟺∃n∈N.x=ι(n)=y.
Dado PERs e , defina o espaço de função PER por
∼τ∼σ ∼τ→σ
x∼τ→σy⟺∀z,w∈D.z∼τw⇒Λ(x)(z)∼σΛ(y)(w)
Os termos são interpretados como não tipificado termos -calculus como seria normalmente interpretar-los em .λD
Aqui está o punchline. Você pode interpretar o polimorfismo como interseção de PERs, ou seja:
Podemos calcular o PER correspondente a : é a interseção de todos os PERs, mas esse será o PER vazio. Calculando é um exercício interessante. Calculando é um exercício difícil (que me manteve ocupado por uma semana quando eu era estudante de teoria de domínio).
x∼∀X.τ(X)y⟺for all PERs ≈, x∼τ(≈)y.
∀X.X∀X.X→X∀X.X→X→X
Se queremos recursão em nosso idioma, precisamos contabilizar pontos fixos. Uma possibilidade é restringir os PERs àqueles que contêm e são fechados sob o suprema de cadeias crescentes. Mais precisamente, tome apenas os PERs para que⊥D≈
- ⊥D≈⊥D e
- se e estão aumentando cadeias em modo que para todos os , então .x0≤x1≤x2≤⋯y0≤y1≤y2≤⋯Dxi≈yiisupixi≈supiyi
Agora podemos interpretar aplicando o teorema de Kanster-Tarski sobre a existência de pontos fixos, assim como fazemos na teoria de domínio comum. Desta vez, não está vazio, pois contém precisamente .fixτ:(τ→τ)→τ∀X.X⊥D