Nivel 2 · Tipos simples (λ→)

Tipado à la Church y à la Curry

El tipado de λ\lambda-términos comienza asignando tipos a las variables. Existen dos enfoques principales, y la diferencia entre ellos organiza buena parte de la teoría de tipos :

  1. Tipado à la Church (explícito): se prescribe un tipo único para cada variable al momento de su introducción. Los tipos de los términos más complejos se deducen considerando las restricciones de tipado.
  2. Tipado à la Curry (implícito): no se asignan tipos explícitos a las variables; en su lugar, se busca inferir los tipos mediante un proceso de deducción y conjeturas.

Para comparar ambos estilos, la tesis tipa dos veces el mismo término,

M(λzu.z)(yx),M \equiv (\lambda z\, u .\, z)\,(y\, x),

una función constante de dos argumentos aplicada al resultado de yxy\,x. El contraste entre los dos resultados finales es el contenido real de esta página.

À la Church: tipos escritos a mano

El propósito es derivar, paso a paso, el tipo del término MM utilizando las reglas de tipado à la Church.

  1. Declaraciones iniciales. Se indican los tipos conocidos de las variables libres: x:αα,y:(αα)β.x : \alpha \rightarrow \alpha, \qquad y : (\alpha \rightarrow \alpha) \rightarrow \beta .
  2. Aplicación parcial yxy\, x. La variable yy espera un argumento de tipo αα\alpha \rightarrow \alpha y xx posee exactamente ese tipo, por lo que la aplicación es válida: yx:β.y\, x : \beta .
  3. Construcción de una función constante de dos argumentos. Se introducen dos nuevas variables para ilustrar una función que ignora su segundo argumento: z:β,u:γ,z : \beta, \qquad u : \gamma , y se define el término λzu.z  :  βγβ  =  β(γβ).\lambda z\, u .\, z \;:\; \beta \rightarrow \gamma \rightarrow \beta \;=\; \beta \rightarrow (\gamma \rightarrow \beta).
  4. Aplicación total. Al aplicar la función constante al resultado del paso 2 se obtiene: (λzu.z)(yx):γβ.(\lambda z\, u .\, z)\,(y\, x) : \gamma \rightarrow \beta .

Es decir, el término (λzu.z)(yx)(\lambda z\, u .\, z)(y\, x) recibe un valor de tipo γ\gamma y devuelve uno de tipo β\beta.

El formato explícito

En el tipado explícito, cada variable y expresión tiene un tipo declarado abiertamente. Retomando el cálculo anterior, con zz de tipo β\beta y uu de tipo γ\gamma, el resultado completo se escribe como un juicio (Definición 7.51):

x:αα, y:(αα)β  (λz:β.λu:γ.z)(yx):γβ.x : \alpha \rightarrow \alpha,\ y : (\alpha \rightarrow \alpha) \rightarrow \beta \ \vdash\ (\lambda z : \beta .\, \lambda u : \gamma .\, z)(y\, x) : \gamma \rightarrow \beta .

Esta expresión se lee así: «asumiendo que la variable xx tiene tipo αα\alpha \rightarrow \alpha y la variable yy tiene tipo (αα)β(\alpha \rightarrow \alpha) \rightarrow \beta (el contexto), se demuestra que el término (λz:β.λu:γ.z)(yx)(\lambda z : \beta .\, \lambda u : \gamma .\, z)(y\, x) resulta en una función de tipo γβ\gamma \rightarrow \beta». El símbolo \vdash separa el contexto de la afirmación principal. Nótese también que (λz:β.λu:γ.z)(\lambda z : \beta .\, \lambda u : \gamma .\, z) es una forma abreviada de expresar λz:β.(λu:γ.(z))\lambda z : \beta .\, (\lambda u : \gamma .\, (z)); si se excluyen los tipos, sería equivalente a λz.λu.z\lambda z .\, \lambda u .\, z.

À la Curry: tipos inferidos

Ahora se infieren los tipos del mismo término M(λzu.z)(yx)M \equiv (\lambda z\, u .\, z)\,(y\, x) sin suponer tipos de antemano, generando y resolviendo ecuaciones.

  1. Asignar tipos de variable. Se introduce un símbolo de tipo para cada variable del término (libres: y,xy, x; ligadas: z,uz, u), asegurando la consistencia de la aplicación yxy\, x: z:A,u:C,y:EF,x:E.z : A, \quad u : C, \quad y : E \rightarrow F, \quad x : E .
  2. Analizar las partes. Se analizan los dos componentes de la aplicación principal:
    • La función: el término λzu.z\lambda z\, u .\, z toma un argumento zz de tipo AA y devuelve una función que toma un argumento uu de tipo CC para finalmente devolver zz. Por lo tanto, su tipo es A(CA)A \rightarrow (C \rightarrow A).
    • El argumento: la aplicación yxy\, x toma la función y:EFy : E \rightarrow F y el argumento x:Ex : E. El resultado es un término de tipo FF.
  3. Unir las partes y resolver. Al aplicar la función al argumento, (λzu.z)(yx)(\lambda z\, u .\, z)(y\, x), se genera una restricción: el tipo que la función espera como entrada (AA) debe coincidir con el tipo del argumento que se le pasa (FF): Restriccioˊn: A=F\text{Restricción: } \boxed{A = F} Sabiendo esto, la aplicación de una función de tipo A(CA)A \rightarrow (C \rightarrow A) a un argumento de tipo AA produce un resultado de tipo CAC \rightarrow A. Por lo tanto: M:CA.M : C \rightarrow A .
  4. Instanciación concreta. Si se elige, por ejemplo, x:β,y:βα,u:δx : \beta, \quad y : \beta \rightarrow \alpha, \quad u : \delta (donde la declaración para zz es implícita por la restricción), las asignaciones corresponden a E=βE = \beta, F=αF = \alpha y C=δC = \delta. Dado que A=FA = F, se tiene A=αA = \alpha. Sustituyendo en el resultado final: M:δα.M : \delta \rightarrow \alpha .

El enfoque à la Curry evidencia que un mismo término puede admitir distintos tipos según las asignaciones iniciales: el mismo MM recibió arriba el tipo γβ\gamma \rightarrow \beta y aquí el tipo δα\delta \rightarrow \alpha.

Unicidad de tipos à la Church

Nota (Unicidad de tipos à la Church)

En el estilo de Church la multiplicidad anterior desaparece: relativo a un contexto dado, cada término legal tiene un único tipo. Es decir, si ΓM:σ\Gamma \vdash M : \sigma y ΓM:τ\Gamma \vdash M : \tau, entonces στ\sigma \equiv \tau. La unicidad es un teorema propio de λ\lambda\rightarrow à la Church, relativo al contexto: como cada abstracción anota el tipo de su variable de enlace y el contexto fija el de cada variable libre, las reglas de la

página anterior

no dejan ninguna elección libre, y una inducción directa sobre la derivación produce el resultado; véase Nederpelt y Geuvers (2014) . En el estilo de Curry, en cambio, la respuesta honesta a «¿qué tipo tiene MM?» es un esquema de tipos, como el CAC \rightarrow A obtenido arriba, del que γβ\gamma \rightarrow \beta y δα\delta \rightarrow \alpha son instancias. La distinción reaparece en la práctica: los asistentes de pruebas como Lean trabajan con anotaciones à la Church precisamente para que cada término tenga un tipo determinado de manera única.

Nota (Convención de Barendregt para términos tipados)

La convención de Barendregt del módulo 1 (elegir los nombres de las variables ligadas distintos entre sí y distintos de los de las variables libres, siguiendo a Barendregt, Dekkers y Statman (2013) ) se adopta también para los términos pre-tipados de la Definición 7.50. El dividendo es concreto: cuando la regla (abstracción) extiende el contexto de Γ\Gamma a Γ, x:σ\Gamma,\ x : \sigma, la convención garantiza que xx no aparece ya en dom(Γ)\operatorname{dom}(\Gamma), de modo que la lista resultante sigue siendo un contexto (una lista de declaraciones con sujetos distintos, según la Definición 7.51) sin necesidad de renombramientos.

Queda una pregunta de fondo: los cálculos de esta página fueron hechos a mano, pero ¿existe un algoritmo que los haga siempre, para cualquier término? La respuesta, sorprendentemente generosa, es el tema de la página siguiente.