Teoría Homotópica de Tipos

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.

Definición 1 — Diccionario proposiciones-tipos
LógicaTiposDescripción
\top1\mathbb{1}Tipo unitario, un solo término
\bot\emptysetTipo vacío, sin constructores
PQP \land QP×QP \times QPar: pair(p,q)\text{pair}(p, q) con p:Pp : P y q:Qq : Q
PQP \lor QP+Q1\lVert P + Q \rVert_1Coproducto truncado
PQP \Rightarrow QPQP \to QFunción: λx.q\lambda x.\, q
¬P\neg PPP \to \emptysetFunción al tipo vacío
x:A,  P(x)\forall x : A,\; P(x)x:AP(x)\prod_{x:A} P(x)Función dependiente
x:A,  P(x)\exists x : A,\; P(x)x:AP(x)1\lVert \sum_{x:A} P(x) \rVert_1Par dependiente truncado

La conjunción PQP \land Q corresponde al producto P×QP \times Q: para probar ambas, necesitamos un testigo de PP y un testigo de QQ, es decir, un par pair(p,q)\text{pair}(p, q). La implicación PQP \Rightarrow Q corresponde al tipo función PQP \to Q: una prueba es una función λx.q\lambda x.\, q que transforma testigos de PP en testigos de QQ.

La negación ¬P\neg P se define como PP \to \emptyset: si pudiéramos construir un término de PP, obtendríamos un término de \emptyset, lo cual es imposible.

Para la disyunción y el existencial usamos la truncación proposicional 1\lVert - \rVert_1, que colapsa un tipo a una proposición olvidando cuál constructor se usó. Sin truncación, P+QP + Q 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

Teorema 1 — Modus ponens

P×(PQ)    QP \times (P \to Q) \;\to\; Q

Demostración

Sea h:P×(PQ)h : P \times (P \to Q). Por eliminación del producto obtenemos p:Pp : P y f:PQf : P \to Q. Por eliminación de la función (β\beta-reducción), f(p):Qf(p) : Q.

QED

Eliminación de la conjunción

Teorema 2 — Eliminación de la conjunción

(P×Q)    P(P \times Q) \;\to\; P

Demostración

Sea c:P×Qc : P \times Q. Por la regla de eliminación del producto, obtenemos directamente un término de tipo PP.

QED

Conmutatividad de la conjunción

Teorema 3 — Conmutatividad de ×\times

P×Q    Q×PP \times Q \;\to\; Q \times P

Demostración

Sea c:P×Qc : P \times Q. Por eliminación obtenemos p:Pp : P y q:Qq : Q. Por introducción del producto, pair(q,p):Q×P\text{pair}(q, p) : Q \times P.

QED

Asociatividad de la conjunción

Teorema 4 — Asociatividad de ×\times

(P×Q)×R    P×(Q×R)(P \times Q) \times R \;\to\; P \times (Q \times R)

Demostración

Sea c:(P×Q)×Rc : (P \times Q) \times R. Por eliminación obtenemos d:P×Qd : P \times Q y r:Rr : R. Eliminando dd obtenemos p:Pp : P y q:Qq : Q. Por introducción: pair(p,pair(q,r)):P×(Q×R)\text{pair}(p, \text{pair}(q, r)) : P \times (Q \times R).

QED

Composición de funciones (silogismo hipotético)

Teorema 5 — Composición / Silogismo hipotético

(PQ)    (QR)    PR(P \to Q) \;\to\; (Q \to R) \;\to\; P \to R

Demostración

Sean f:PQf : P \to Q y g:QRg : Q \to R. Construimos λp.g(f(p))\lambda p.\, g(f(p)), que tiene tipo PRP \to R. Esto es la composición gfg \circ f.

QED

Contrarrecíproco

Teorema 6 — Contrarrecíproco

(PQ)    (¬Q¬P)(P \to Q) \;\to\; (\neg Q \to \neg P)

Es decir: (PQ)(Q)(P)(P \to Q) \to (Q \to \emptyset) \to (P \to \emptyset).

Demostración

Sean f:PQf : P \to Q y g:Qg : Q \to \emptyset. Construimos λp.g(f(p)):P\lambda p.\, g(f(p)) : P \to \emptyset. Este es el mismo término que la composición: el contrarrecíproco es un caso particular de la composición de funciones.

QED

Doble negación (una dirección)

Teorema 7 — Introducción de la doble negación

P    ¬¬PP \;\to\; \neg\neg P

Es decir: P(P)P \to (P \to \emptyset) \to \emptyset.

Demostración

Sean p:Pp : P y f:Pf : P \to \emptyset. Por eliminación de la función, f(p):f(p) : \emptyset. El término es λp.λf.f(p)\lambda p.\, \lambda f.\, f(p).

QED

Ex falso quodlibet

Teorema 8 — Ex falso quodlibet

    P\emptyset \;\to\; P

Demostración

Sea x:x : \emptyset. Por el principio de eliminación del tipo vacío (ind\text{ind}_\emptyset), obtenemos un término de cualquier tipo PP sin necesidad de considerar ningún caso (no hay constructores de \emptyset):

λx.ind(x)\lambda x.\, \text{ind}_\emptyset(x)

QED

Currying (shunting)

Teorema 9 — Currying

(P×QR)    (PQR)(P \times Q \to R) \;\to\; (P \to Q \to R)

Demostración

Sea f:P×QRf : P \times Q \to R. Construimos λp.λq.f(pair(p,q))\lambda p.\, \lambda q.\, f(\text{pair}(p, q)). Dado p:Pp : P y q:Qq : Q, formamos el par por introducción y aplicamos ff.

QED
Teorema 10 — Uncurrying

(PQR)    (P×QR)(P \to Q \to R) \;\to\; (P \times Q \to R)

Demostración

Sea g:PQRg : P \to Q \to R y c:P×Qc : P \times Q. Por eliminación del producto obtenemos p:Pp : P y q:Qq : Q. El término es g(p)(q):Rg(p)(q) : R.

QED

Distributividad

Teorema 11 — Distributividad del producto sobre el coproducto

A×B+A×C    A×(B+C)A \times B + A \times C \;\to\; A \times (B + C)

Demostración

Sea x:A×B+A×Cx : A \times B + A \times C. Por eliminación del coproducto (ind-+\text{ind-}+):

  • Si xinl(c1)x \equiv \text{inl}(c_1) con c1:A×Bc_1 : A \times B: por eliminación de c1c_1 obtenemos a:Aa : A y b:Bb : B. Por introducción: pair(a,inl(b)):A×(B+C)\text{pair}(a, \text{inl}(b)) : A \times (B + C).
  • Si xinr(c2)x \equiv \text{inr}(c_2) con c2:A×Cc_2 : A \times C: análogamente, pair(a,inr(c)):A×(B+C)\text{pair}(a, \text{inr}(c)) : A \times (B + C).
QED

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.

Teorema 12 — Tercero excluido (no demostrable)

El principio del tercero excluido afirma que para todo tipo PP:

P¬PP \lor \neg P

Es decir, P+(P)1\lVert P + (P \to \emptyset) \rVert_1. En la teoría de tipos, esto no es demostrable en general: para construir un término del coproducto necesitaríamos decidir si PP está habitado o no, lo cual no es siempre posible de manera constructiva.

Teorema 13 — Eliminación de la doble negación (no demostrable)

¬¬P    P\neg\neg P \;\to\; P

Es decir, ((P))P((P \to \emptyset) \to \emptyset) \to P. Tampoco es demostrable en general. La dirección P¬¬PP \to \neg\neg P 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 \to), y exact proporciona el término de prueba. El código en Rocq refleja directamente las construcciones tipo-teóricas de las secciones anteriores.