En System F à la Church, ¿podemos automatizar la inferencia de tipos para la eliminación total?


9

La pregunta es la siguiente. En general, cuando se tiene un término como , podemos eliminar el principio aplicando este término a un tipo, como instancia .( Λ X . t ) [ T ] t [ X : = T ]ΛX.t(ΛX.t)[T]t[X:=T]

Ahora, supongamos que se trata de una flecha y queremos darle un argumento, entonces tendríamos que aplicar este término al tipo apropiado para que pueda recibir dicho argumento. Eso es lo que pregunto si puedo automatizar: ¿Es posible construir una función tome dos términos y devuelva un tipo tal que nos dé el tipo necesario para ser reemplazado por en tal que puede aceptar el argumento ?f < Λ X . t > < r > X t t rff<ΛX.t><r>Xttr

Algunos ejemplos:

  • f<ΛX.λxXX.t><λxT.x>=T .

  • f<ΛX.λxX.r><(λxR.tT) s>=T


2
Su pregunta sería un poco más legible si no coloca el argumento en f como sub / superíndices, cada uno con otros sub / superíndices.
Dave Clarke

Para referencia: Este tipo de problema es uno de los dos problemas resueltos por "Inferencia de tipo local" ( dl.acm.org/citation.cfm?id=345100 ). También relevante debe ser dl.acm.org/citation.cfm?id=1086383 .
Blaisorblade

Respuestas:


8

No estoy realmente seguro de haber entendido la pregunta. Primero, trato de reducir su problema al siguiente problema de unificación:

Dado un sistema F tipo τ (X) con una variable libre (tipo) X, y un tipo σ.
¿Es posible encontrar un tipo γ tal que τ (γ) = σ?

Aquí hay un pseudocódigo (con una excepción planteada cuando no es unificable) para resolver este problema.

unify (X, σ) = σ
unify (Y, Y) = Y
unify (τ₁ → τ₂, σ₁ → σ₂) = unify(τ₁,σ₁) → unify(τ₂,σ₂)
unify (∀Y.τ(Y), ∀Y.σ(Y)) = ∀Y.unify(τ(Y),σ(Y)) (with Y a fresh variable)
unify (_,_) = raise Not_unifiable

Puede probar (por inducción) que γ = τ (unificar (τ (X), σ) funciona si y solo no se genera una excepción.

Ahora para tu problema puedes tomar

f (ΛX.t) (r) = match type of t with "τ₁ → τ₂" => unify (τ₁, type of r) | _ => fail end

(por supuesto, su función f debería tomar como argumento un contexto si sus términos están abiertos).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.