Nivel 2 · Tipos simples (λ→)
Tipado à la Church y à la Curry
El tipado de -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 :
- 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.
- 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,
una función constante de dos argumentos aplicada al resultado de . 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 utilizando las reglas de tipado à la Church.
- Declaraciones iniciales. Se indican los tipos conocidos de las variables libres:
- Aplicación parcial . La variable espera un argumento de tipo y posee exactamente ese tipo, por lo que la aplicación es válida:
- 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: y se define el término
- Aplicación total. Al aplicar la función constante al resultado del paso 2 se obtiene:
Es decir, el término recibe un valor de tipo y devuelve uno de tipo .
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 de tipo y de tipo , el resultado completo se escribe como un juicio (Definición 7.51):
Esta expresión se lee así: «asumiendo que la variable tiene tipo y la variable tiene tipo (el contexto), se demuestra que el término resulta en una función de tipo ». El símbolo separa el contexto de la afirmación principal. Nótese también que es una forma abreviada de expresar ; si se excluyen los tipos, sería equivalente a .
À la Curry: tipos inferidos
Ahora se infieren los tipos del mismo término sin suponer tipos de antemano, generando y resolviendo ecuaciones.
- Asignar tipos de variable. Se introduce un símbolo de tipo para cada variable del término (libres: ; ligadas: ), asegurando la consistencia de la aplicación :
- Analizar las partes. Se analizan los dos componentes de la aplicación principal:
- La función: el término toma un argumento de tipo y devuelve una función que toma un argumento de tipo para finalmente devolver . Por lo tanto, su tipo es .
- El argumento: la aplicación toma la función y el argumento . El resultado es un término de tipo .
- Unir las partes y resolver. Al aplicar la función al argumento, , se genera una restricción: el tipo que la función espera como entrada () debe coincidir con el tipo del argumento que se le pasa (): Sabiendo esto, la aplicación de una función de tipo a un argumento de tipo produce un resultado de tipo . Por lo tanto:
- Instanciación concreta. Si se elige, por ejemplo, (donde la declaración para es implícita por la restricción), las asignaciones corresponden a , y . Dado que , se tiene . Sustituyendo en el resultado final:
El enfoque à la Curry evidencia que un mismo término puede admitir distintos tipos según las asignaciones iniciales: el mismo recibió arriba el tipo y aquí el tipo .
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 y , entonces . La unicidad es un teorema propio de à 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 anteriorno 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 ?» es un esquema de tipos, como el obtenido arriba, del que y 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.
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 a , la convención garantiza que no aparece ya en , 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.