Lógica de Primer Orden en Teoría de Tipos
En los capítulos anteriores introdujimos la correspondencia de Curry-Howard y los tipos inductivos fundamentales. Ahora veremos que estas herramientas son suficientes para reconstruir toda la lógica de primer orden dentro de la teoría de tipos. El sistema tipo-teórico no solo soporta razonamiento lógico: contiene la lógica clásica como un fragmento.
Conectivas lógicas como tipos
La correspondencia de Curry-Howard establece una traducción sistemática entre las conectivas de la lógica y los constructores de tipos. Probar una proposición es construir un término del tipo correspondiente.
| Lógica | Tipos | Descripción |
|---|---|---|
| Tipo unitario, un solo término | ||
| Tipo vacío, sin constructores | ||
| Par: con y | ||
| Coproducto truncado | ||
| Función: | ||
| Función al tipo vacío | ||
| Función dependiente | ||
| Par dependiente truncado |
La conjunción corresponde al producto : para probar ambas, necesitamos un testigo de y un testigo de , es decir, un par . La implicación corresponde al tipo función : una prueba es una función que transforma testigos de en testigos de .
La negación se define como : si pudiéramos construir un término de , obtendríamos un término de , lo cual es imposible.
Para la disyunción y el existencial usamos la truncación proposicional , que colapsa un tipo a una proposición olvidando cuál constructor se usó. Sin truncación, distingue cuál de los dos lados vale, lo cual es más información de la que una proposición debería tener.
Teoremas de lógica clásica
Cada teorema se presenta como un tipo (la proposición) junto con su término de prueba, usando las reglas de formación y eliminación de los capítulos anteriores.
Modus ponens
▶Demostración
Sea . Por eliminación del producto obtenemos y . Por eliminación de la función (-reducción), .
Eliminación de la conjunción
▶Demostración
Sea . Por la regla de eliminación del producto, obtenemos directamente un término de tipo .
Conmutatividad de la conjunción
▶Demostración
Sea . Por eliminación obtenemos y . Por introducción del producto, .
Asociatividad de la conjunción
▶Demostración
Sea . Por eliminación obtenemos y . Eliminando obtenemos y . Por introducción: .
Composición de funciones (silogismo hipotético)
▶Demostración
Sean y . Construimos , que tiene tipo . Esto es la composición .
Contrarrecíproco
Es decir: .
▶Demostración
Sean y . Construimos . Este es el mismo término que la composición: el contrarrecíproco es un caso particular de la composición de funciones.
Doble negación (una dirección)
Es decir: .
▶Demostración
Sean y . Por eliminación de la función, . El término es .
Ex falso quodlibet
▶Demostración
Sea . Por el principio de eliminación del tipo vacío (), obtenemos un término de cualquier tipo sin necesidad de considerar ningún caso (no hay constructores de ):
Currying (shunting)
▶Demostración
Sea . Construimos . Dado y , formamos el par por introducción y aplicamos .
▶Demostración
Sea y . Por eliminación del producto obtenemos y . El término es .
Distributividad
▶Demostración
Sea . Por eliminación del coproducto ():
- Si con : por eliminación de obtenemos y . Por introducción: .
- Si con : análogamente, .
Lógica clásica vs constructiva
Los teoremas anteriores son demostrables en la teoría de tipos sin axiomas adicionales. Sin embargo, hay principios de la lógica clásica que no son demostrables constructivamente.
El principio del tercero excluido afirma que para todo tipo :
Es decir, . En la teoría de tipos, esto no es demostrable en general: para construir un término del coproducto necesitaríamos decidir si está habitado o no, lo cual no es siempre posible de manera constructiva.
Es decir, . Tampoco es demostrable en general. La dirección sí es demostrable (como vimos arriba), pero la inversa no.
Ambos principios son consistentes con la teoría de tipos: se pueden agregar como axiomas sin generar contradicciones. Sin embargo, al agregarlos se pierde el carácter computacional del sistema: toda prueba deja de tener un contenido algorítmico directo.
Para proposiciones (tipos de h-level 1), agregar el tercero excluido recupera la lógica clásica en su totalidad. En la práctica, gran parte de la matemática se desarrolla sobre proposiciones, por lo que la lógica clásica queda disponible como un caso especial.
Nota sobre Rocq y UniMath
Los teoremas de este capítulo pueden formalizarse en el asistente de pruebas Rocq usando la biblioteca UniMath. A modo de ilustración:
Theorem modusPonens {P Q : UU} (h : P × (P → Q)) : Q.
Proof.
induction h as [p f].
exact (f p).
Qed.
Theorem comp {P Q R : UU} (f : P → Q) (g : Q → R) : P → R.
Proof.
intro p.
exact (g (f p)).
Qed.
La táctica induction descompone un término del tipo producto en sus componentes (regla de eliminación), intro asume una hipótesis (regla de introducción de ), y exact proporciona el término de prueba. El código en Rocq refleja directamente las construcciones tipo-teóricas de las secciones anteriores.