Nivel 4 · Curry–Howard

Normalización = evaluación

El nivel más profundo del isomorfismo está en la dinámica. Una prueba con un desvío contiene una regla de introducción seguida inmediatamente de su eliminación: se construye algo solo para deshacerlo. Eliminar el desvío es la normalización de la prueba. En el cálculo lambda , ese desvío es un redex (Definición 7.25) y su simplificación es la evaluación. La presentación sigue a Sørensen y Urzyczyn (2006) y a Wadler (2015) .

El desvío de implicación

Del lado lógico: una \toI que descarga la hipótesis AA, seguida de una \toE contra una prueba de AA. El desvío se elimina insertando la prueba de AA en cada lugar donde la hipótesis se usaba:

[A]xBAB (Ix)ABAB\begin{array}{c} \dfrac{\begin{array}{c}[A]^x \\ \vdots \\ B\end{array}}{A \to B}\ (\to\mathrm{I}^x) \qquad \begin{array}{c}\vdots \\ A\end{array} \\[-0.2em] \hline B \end{array} \quad \Longrightarrow \quad \begin{array}{c} \vdots \\ A \\ \vdots \\ B \end{array}

Del lado computacional, el mismo dibujo con los términos restaurados:

[x:A]xN:Bλx.N:AB (Ix)M:A(λx.N)M:BM:AN[x:=M]:B\begin{array}{c} \dfrac{\begin{array}{c}[x : A]^x \\ \vdots \\ N : B\end{array}}{\lambda x.\, N : A \to B}\ (\to\mathrm{I}^x) \qquad \begin{array}{c}\vdots \\ M : A\end{array} \\[-0.2em] \hline (\lambda x.\, N)\, M : B \end{array} \quad \Longrightarrow \quad \begin{array}{c} \vdots \\ M : A \\ \vdots \\ N[x := M] : B \end{array}

La reducción del desvío corresponde exactamente a la β-reducción (Definición 7.24): la prueba de AA sustituye cada suposición de AA dentro de la prueba de BB, tal como MM sustituye cada ocurrencia de xx en NN.

El desvío de conjunción

Construir un par para luego seleccionar un componente se simplifica a ese componente:

ABAB (I)AAM:AN:BM,N:A×B (×I)π1M,N:AM:A\begin{array}{c} \dfrac{\begin{array}{c}\vdots \\ A\end{array} \quad \begin{array}{c}\vdots \\ B\end{array}}{A \land B}\ (\land\mathrm{I}) \\[-0.2em] \hline A \end{array} \quad \Longrightarrow \quad \begin{array}{c} \vdots \\ A \end{array} \qquad\qquad \begin{array}{c} \dfrac{M : A \quad N : B}{\langle M, N \rangle : A \times B}\ (\times\mathrm{I}) \\[-0.2em] \hline \pi_1 \langle M, N \rangle : A \end{array} \quad \Longrightarrow \quad \begin{array}{c} \vdots \\ M : A \end{array}

La normalización del desvío de conjunción corresponde a la proyección. Las reglas completas, una por conectivo, son:

Definición 9.23 (Reglas de reducción)
1. Implicacioˊn (β-reduccioˊn)(λx.N)MN[x:=M]2. Conjuncioˊn (producto)π1M1,M2M1π2M1,M2M23. Disyuncioˊn (suma)case(in1(N);x.K;y.L)K[x:=N]case(in2(N);x.K;y.L)L[y:=N]\begin{array}{lll} \textbf{1. Implicación (β-reducción)} & & \\ (\lambda x.\, N)\, M & \to & N[x := M] \\[0.8em] \textbf{2. Conjunción (producto)} & & \\ \pi_1 \langle M_1, M_2 \rangle & \to & M_1 \\ \pi_2 \langle M_1, M_2 \rangle & \to & M_2 \\[0.8em] \textbf{3. Disyunción (suma)} & & \\ \operatorname{case}(\operatorname{in}_1(N);\, x.K;\, y.L) & \to & K[x := N] \\ \operatorname{case}(\operatorname{in}_2(N);\, x.K;\, y.L) & \to & L[y := N] \end{array}

Véalo en el espejo

En el widget siguiente, selecciónese el preset «Un desvío» y púlsese el botón «normalizar = β-reducir». A la izquierda desaparece el rodeo lógico (una \toI seguida de su \toE); a la derecha, el redex (λx:p.x)z(\lambda x{:}p.\, x)\, z se contrae a zz. Son el mismo gesto: no hay una operación sobre pruebas y otra sobre programas, sino una sola.

El espejo de Curry–Howard

Prueba (NJ)

Axp,qpp,\, q \vdash p→Ipqpp \vdash q \to p→Ip(qp)\vdash p \to (q \to p)

Programa (λ→)

variablex:p,y:qx:px{:}p,\, y{:}q \vdash x : pabstracciónx:pλy:q.x  :  qpx{:}p \vdash \lambda y{:}q.\, x \;:\; q \to pabstracciónλx:p.λy:q.x  :  p(qp)\vdash \lambda x{:}p.\, \lambda y{:}q.\, x \;:\; p \to (q \to p)

Cada regla lógica es un constructor de términos: →I es una abstracción λ; la hipótesis es una variable.

La tabla completa

El isomorfismo se resume así:

Lógica intuicionista (IPC)Cálculo lambda (λ\lambda_\to)
Proposición (fórmula)Tipo
Prueba (construcción)Programa (término)
DemostrabilidadHabitabilidad del tipo
HipótesisVariable de término
Conectivo (\to, \land, \lor)Constructor de tipo (\to, ×\times, ++)
Prueba con desvíoRedex (término reducible)
Normalización de una pruebaEvaluación (β-reducción)
Prueba normalizadaValor ( forma normal )

Una prueba es un término

La consecuencia decisiva es la primera línea de la tabla: una prueba es un término. Esto es exactamente lo que Lean industrializa: en un asistente de pruebas basado en teoría de tipos , demostrar un teorema es construir un término cuyo tipo es el enunciado, y verificar la prueba es comprobar el tipado del término. En la formalización del teorema de completitud (nivel 7, próximamente), una derivación de deducción natural no se describe ni se importa: se construye como un término tipado cuya corrección verifica el núcleo del sistema.

Entre este punto y Lean quedan dos escalas por subir. El nivel 5 recorre el cubo lambda: los sistemas de tipos cada vez más expresivos que llevan de λ\lambda_\to al Cálculo de Construcciones. El nivel 6 añade la pieza que falta para la matemática real, los tipos inductivos del CIC , donde el tipo vacío pendiente de la página anterior encuentra su lugar como el False de Lean. Probar y programar serán, literalmente, lo mismo.