Esistono molti modi per modellare il polimorfismo tramite la teoria dei domini, lasciatemi solo descriverne uno che sia facile da capire, quindi potete pensarci da soli. È un "modello PER".
Prendi qualsiasi modello del -calculus non tipizzato , ad esempio un dominio tale che è un retrattile di (ad esempio, prendi tale che . Sia e siano rispettivamente la retrazione e la sezione.λDD→DDDD≅N⊥×(D→D))Λ:D→(D→D)Γ:(D→D)→D
Stiamo per interpretare i tipi come relazioni di equivalenza parziali (per) su . Ricorda che un PER è una relazione simmetrica e transitiva, ma non deve essere riflessiva. Ad ogni tipo assegniamo quindi un PER . Pensare come " è un elemento di " e come " ed sono uguali per quanto è interessato".Dτ∼τx∼τxxτx∼τyxyτ
Possiamo avere alcuni tipi di base (ma non è necessario), ad esempio se ci assicuriamo che sia un sottodominio di tramite un incorporamento allora possiamo definire di
N⊥Dι:N→D∼nat
x∼naty⟺∃n∈N.x=ι(n)=y.
Dato PERs e , definire lo spazio delle funzioni PER di
∼τ∼σ ∼τ→σ
x∼τ→σy⟺∀z,w∈D.z∼τw⇒Λ(x)(z)∼σΛ(y)(w)
I termini sono interpretati come non tipizzata termini -calcolo come uno normalmente interpretarli .λD
Ecco la battuta finale. Puoi interpretare il polimorfismo come intersezione di PER, ovvero:
Possiamo caclulare il PER corrispondente a : è l'intersezione di tutti i PER, ma quello sarà il PER vuoto. Calcolo è un esercizio interessante. Calcolo è un esercizio difficile (che mi ha tenuto impegnato per una settimana quando ero uno studente di teoria dei domini).
x∼∀X.τ(X)y⟺for all PERs ≈, x∼τ(≈)y.
∀X.X∀X.X→X∀X.X→X→X
Se vogliamo ricorsione nella nostra lingua, dobbiamo tenere conto dei punti fissi. Una possibilità è quella di limitare i PER a quelli che contengono e sono chiusi sotto le catene crescenti. Più precisamente, prendi solo quei PER per i quali⊥D≈
- ⊥D≈⊥D e
- se e stanno aumentando le catene in tale che per tutti , quindi .x0≤x1≤x2≤⋯y0≤y1≤y2≤⋯Dxi≈yiisupixi≈supiyi
Ora possiamo interpretare applicando il teorema di Kanster-Tarski sull'esistenza di punti fissi, proprio come facciamo nella teoria del dominio ordinario. Questa volta, non è vuota, poiché contiene precisamente .fixτ:(τ→τ)→τ∀X.X⊥D