Nivel 2 · Tipos simples (λ→)

Juicios y contextos

El módulo anterior cerró con un anticipo del cálculo lambda simplemente tipado λ\lambda\rightarrow: los tipos simples (Definición 7.45), los términos tipables (Definición 7.48), los términos pre-tipados (Definición 7.50) y la forma del juicio de tipado (Definición 7.51). Este módulo desarrolla λ\lambda\rightarrow en detalle, siguiendo a Nederpelt y Geuvers (2014) . La pregunta que lo organiza es doble: qué significa exactamente la afirmación «el término MM tiene el tipo σ\sigma», y cómo se demuestra. Esta página fija el lenguaje de las afirmaciones; la siguiente presenta las reglas que las derivan.

Los tipos, de un vistazo

El conjunto T\mathbb{T} de tipos simples de la

Definición 7.45

se escribe en forma compacta (estilo BNF) como

σ,τ::=α(στ),\sigma, \tau ::= \alpha \mid (\sigma \rightarrow \tau),

donde α\alpha recorre el conjunto infinito V\mathbb{V} de variables de tipo. Las letras griegas α,β,γ,\alpha, \beta, \gamma, \ldots denotan variables de tipo; los símbolos σ,τ,\sigma, \tau, \ldots denotan tipos simples arbitrarios; los paréntesis externos se omiten y la flecha agrupa por la derecha: αβγ\alpha \rightarrow \beta \rightarrow \gamma abrevia α(βγ)\alpha \rightarrow (\beta \rightarrow \gamma). La interpretación es la esperada:

  • las variables de tipo (α,β,\alpha, \beta, \ldots) representan tipos básicos, como nat\mathtt{nat} para los números naturales o list\mathtt{list} para las listas;
  • los tipos flecha (στ\sigma \rightarrow \tau) representan funciones, como natreal\mathtt{nat} \rightarrow \mathtt{real}, el conjunto de funciones de naturales a reales.
Nota 7.47 (Lectura del símbolo «:»)

El símbolo «::» se utiliza para denotar que un término tiene un tipo específico. Por ejemplo:

  • M:σM : \sigma significa que el término MM es de tipo σ\sigma;
  • x:σx : \sigma significa que xx es una variable de tipo σ\sigma;
  • λx.M:στ\lambda x .\, M : \sigma \rightarrow \tau significa que la función λx.M\lambda x .\, M toma un argumento de tipo σ\sigma y devuelve un resultado de tipo τ\tau;
  • MN:τM N : \tau significa que la aplicación de MM a NN produce un resultado de tipo τ\tau.

De los enunciados a los juicios

Las cuatro nociones que estructuran todo el sistema ya fueron definidas en la Definición 7.51; conviene repasarlas con calma, porque el resto del módulo las usa sin pausa.

  1. Un enunciado tiene la forma M:σM : \sigma, con MΛTM \in \Lambda_{\mathbb{T}} un término pre-tipado y σT\sigma \in \mathbb{T} un tipo simple; MM es el sujeto y σ\sigma el tipo. Por ejemplo, λx:α.x:αα\lambda x : \alpha .\, x : \alpha \rightarrow \alpha es un enunciado.
  2. Una declaración es un enunciado cuyo sujeto es una variable, como x:σx : \sigma.
  3. Un contexto Γ\Gamma es una lista de declaraciones con sujetos distintos: Γx1:σ1, x2:σ2, , xn:σn.\Gamma \equiv x_1 : \sigma_1,\ x_2 : \sigma_2,\ \ldots,\ x_n : \sigma_n . El contexto vacío se denota \varnothing.
  4. Un juicio tiene la forma ΓM:σ\Gamma \vdash M : \sigma, con Γ\Gamma un contexto y M:σM : \sigma un enunciado.

El juicio ΓM:σ\Gamma \vdash M : \sigma se lee en voz alta así: «asumiendo las declaraciones del contexto Γ\Gamma, el término MM tiene el tipo σ\sigma». El símbolo \vdash separa las suposiciones (los tipos asignados a las variables libres) de la afirmación demostrada (el enunciado M:σM : \sigma). Un contexto no es un adorno: sin conocer los tipos de las variables libres de MM, en general no puede asignarse tipo alguno a MM.

Nota (Dos torniquetes distintos)

El símbolo \vdash (el torniquete) reaparecerá en el módulo 3 con un significado distinto. En la Definición 9.3, Γ\Gamma es un conjunto de fórmulas proposicionales y Γφ\Gamma \vdash \varphi afirma que la fórmula φ\varphi es derivable a partir de Γ\Gamma mediante deducción natural . Aquí, en cambio, Γ\Gamma es una lista de declaraciones de variables y lo que se deriva es un enunciado de tipado M:σM : \sigma. Son dos relaciones definidas sobre objetos diferentes y no deben confundirse. La coincidencia tipográfica, sin embargo, no es casual: la correspondencia de Curry–Howard identificará ambas lecturas de manera precisa (Definición 7.60).

Anatomía de un contexto

Los contextos son listas finitas y admiten las operaciones de manipulación habituales. Las siguientes cuatro nociones son la contabilidad básica con la que se enuncian las propiedades generales de λ\lambda\rightarrow.

Definición 7.55 (Propiedades de contextos)

Considérese:

  1. Dominio (dom\operatorname{dom}): el dominio de un contexto Γ\Gamma, escrito dom(Γ)\operatorname{dom}(\Gamma), es la secuencia ordenada de las variables declaradas en él. Así, para Γx1:σ1,,xn:σn\Gamma \equiv x_1 : \sigma_1, \ldots, x_n : \sigma_n, su dominio es (x1,,xn)(x_1, \ldots, x_n).
  2. Subcontexto (\subseteq): un contexto Γ\Gamma' es subcontexto de Γ\Gamma si cada declaración en Γ\Gamma' también existe en Γ\Gamma, manteniendo el mismo orden.
  3. Permutación: un contexto Γ\Gamma' es una permutación de Γ\Gamma si ambos contextos están compuestos por el mismo conjunto de declaraciones, sin importar el orden en que aparecen.
  4. Proyección (\upharpoonright): la proyección de un contexto Γ\Gamma sobre un conjunto de variables Φ\Phi, escrita ΓΦ\Gamma \upharpoonright \Phi, produce un subcontexto de Γ\Gamma que contiene exclusivamente las declaraciones de Γ\Gamma cuyas variables son miembros de Φ\Phi. Formalmente, el dominio del nuevo contexto es la intersección dom(Γ)Φ\operatorname{dom}(\Gamma) \cap \Phi.
Ejemplo 7.56 (Dominio, subcontexto, permutación y proyección)

Dado el contexto Γy:σ, x1:ρ1, x2:ρ2, z:τ, x3:ρ3\Gamma \equiv y : \sigma,\ x_1 : \rho_1,\ x_2 : \rho_2,\ z : \tau,\ x_3 : \rho_3:

  • Su dominio es dom(Γ)=(y,x1,x2,z,x3)\operatorname{dom}(\Gamma) = (y, x_1, x_2, z, x_3). El dominio del contexto vacío, dom()\operatorname{dom}(\varnothing), es la lista vacía, ()().
  • La relación de subcontexto se ilustra con (x1:ρ1, z:τ)Γ\varnothing \subseteq (x_1 : \rho_1,\ z : \tau) \subseteq \Gamma.
  • Un reordenamiento como x2:ρ2, x1:ρ1, z:τ, x3:ρ3, y:σx_2 : \rho_2,\ x_1 : \rho_1,\ z : \tau,\ x_3 : \rho_3,\ y : \sigma es una permutación de Γ\Gamma.
  • La proyección de Γ\Gamma sobre el conjunto {z,u,x1}\{z, u, x_1\} resulta en x1:ρ1, z:τx_1 : \rho_1,\ z : \tau: la variable uu no está declarada en Γ\Gamma, así que simplemente no aporta nada.

Con el lenguaje ya fijado, queda lo esencial: las tres reglas que permiten derivar juicios ΓM:σ\Gamma \vdash M : \sigma, y el primer dividendo de esta contabilidad, el Lema 7.57 de variables libres, que conecta FV(M)FV(M) con dom(Γ)\operatorname{dom}(\Gamma).