Teoría Homotópica de Tipos

Deducción Natural y Lambda Cálculo

En la deducción natural, probamos enunciados sobre proposiciones usando árboles de prueba construidos a partir de reglas. Estas reglas se dividen en dos tipos: las reglas de introducción nos dicen cómo probar algo, y las reglas de eliminación nos dicen cómo usar algo.

Lógica proposicional

Reglas para la conjunción

Definición 1 — Conjunción ∧\land

Dadas proposiciones PP y QQ, la conjunción P∧QP \land Q se gobierna por las siguientes reglas:

Introducción (∧\land-intro): Si tenemos PP y QQ, entonces tenemos P∧QP \land Q.

PQP∧Q\frac{P \quad Q}{P \land Q}

Eliminación izquierda (∧\land-elim-l): Si tenemos P∧QP \land Q, entonces tenemos PP.

P∧QP\frac{P \land Q}{P}

Eliminación derecha (∧\land-elim-r): Si tenemos P∧QP \land Q, entonces tenemos QQ.

P∧QQ\frac{P \land Q}{Q}

Reglas para la implicación

Definición 2 — Implicación →\to

Introducción (→\to-intro): Si, asumiendo PP, podemos probar QQ, entonces tenemos P→QP \to Q. La hipótesis PP queda descargada.

P‾i⋮QP→Q  i\frac{\overline{P}^i \quad \vdots \quad Q}{P \to Q} \; i

Eliminación (→\to-elim, modus ponens): Si tenemos PP y P→QP \to Q, entonces tenemos QQ.

PP→QQ\frac{P \quad P \to Q}{Q}

Ejemplo 1 — QQ se sigue de P∧(P→Q)P \land (P \to Q)

Para cualesquiera proposiciones P,QP, Q: de P∧(P→Q)P \land (P \to Q) se deduce QQ.

P∧(P→Q)P  ∧-elim-lP∧(P→Q)P→Q  ∧-elim-rQ  →-elim\frac{\dfrac{P \land (P \to Q)}{P}\;\land\text{-elim-l} \quad \dfrac{P \land (P \to Q)}{P \to Q}\;\land\text{-elim-r}}{Q} \;\to\text{-elim}

Ejemplo 2 — (P∧Q)→P(P \land Q) \to P

P∧Q‾i∧-elim-lP    →-introi\frac{\overline{P \land Q}^i \quad \land\text{-elim-l}}{P} \;\; \to\text{-intro}^i

Luego ⊢(P∧Q)→P\vdash (P \land Q) \to P.

Lambda cálculo simplemente tipado

Si hacemos la deducción natural proof-relevant (es decir, que registremos la forma de la prueba), obtenemos el lambda cálculo simplemente tipado (STLC).

Definición 3 — Proof-relevance

En la deducción natural escribimos "PP" para decir "PP vale". En el STLC, escribimos "p:Pp : P" para decir que "pp es una prueba/testigo de PP", o equivalentemente, "pp habita PP".

Llamamos a pp una prueba, testigo, término o elemento de PP, y a PP una proposición o tipo.

Reglas tipadas para ∧\land

Definición 4 — Reglas para ∧\land en STLC

Formación:

Γ⊢P  typeΓ⊢Q  typeΓ⊢P∧Q  type\frac{\Gamma \vdash P \;\text{type} \quad \Gamma \vdash Q \;\text{type}}{\Gamma \vdash P \land Q \;\text{type}}

Introducción: Si Γ⊢p:P\Gamma \vdash p : P y Γ⊢q:Q\Gamma \vdash q : Q, entonces Γ⊢(p,q):P∧Q\Gamma \vdash (p, q) : P \land Q.

Eliminación: Si Γ⊢a:P∧Q\Gamma \vdash a : P \land Q, entonces Γ⊢pr1 a:P\Gamma \vdash \text{pr}_1\, a : P y Γ⊢pr2 a:Q\Gamma \vdash \text{pr}_2\, a : Q.

Computación (β\beta): Γ⊢pr1(p,q)≐p:P\Gamma \vdash \text{pr}_1(p, q) \doteq p : P y Γ⊢pr2(p,q)≐q:Q\Gamma \vdash \text{pr}_2(p, q) \doteq q : Q.

Unicidad (η\eta): Γ⊢(pr1 a,pr2 a)≐a:P∧Q\Gamma \vdash (\text{pr}_1\, a, \text{pr}_2\, a) \doteq a : P \land Q.

Reglas tipadas para →\to

Definición 5 — Reglas para →\to en STLC

Formación:

Γ⊢P  typeΓ⊢Q  typeΓ⊢P→Q  type\frac{\Gamma \vdash P \;\text{type} \quad \Gamma \vdash Q \;\text{type}}{\Gamma \vdash P \to Q \;\text{type}}

Introducción: Si Γ,x:P⊢q:Q\Gamma, x : P \vdash q : Q, entonces Γ⊢λx. q:P→Q\Gamma \vdash \lambda x.\, q : P \to Q.

Eliminación: Si Γ⊢p:P\Gamma \vdash p : P y Γ⊢f:P→Q\Gamma \vdash f : P \to Q, entonces Γ⊢f p:Q\Gamma \vdash f\, p : Q.

Computación (β\beta): Γ⊢(λx. q) p≐q[p/x]:Q\Gamma \vdash (\lambda x.\, q)\, p \doteq q[p/x] : Q (sustitución).

Unicidad (η\eta): Γ⊢λx. f x≐f:P→Q\Gamma \vdash \lambda x.\, f\, x \doteq f : P \to Q.

Si pensamos en los tipos como conjuntos y los términos como elementos, P∧QP \land Q se comporta como el producto P×QP \times Q de conjuntos.

Teorema 3 — Lambek (1985)

Existe una interpretación del STLC en Set\mathbf{Set}, la categoría de conjuntos. De hecho, hay una equivalencia entre el STLC y las categorías cartesianas cerradas (CCC).

Interpretaciones del tipo función

Bajo la interpretación de Howard (lógica), →\to corresponde a la implicación. Bajo la interpretación de Lambek (conjuntos), →\to corresponde a funciones. También podemos interpretar los tipos como especificaciones de programas: un tipo P→PP \to P especifica un programa que toma una entrada de tipo PP y retorna una salida de tipo PP.

Teorema 4 — Howard (1969) — Correspondencia de Curry-Howard

Los árboles de prueba de la deducción natural están en correspondencia biyectiva con los términos del STLC.

Teoría de tipos dependientes

Definición 6 — Tipos dependientes

En la deducción natural no hay términos. En el STLC, los términos pueden depender de otros términos (ej. a:P∧Q⊢pr1 a:Pa : P \land Q \vdash \text{pr}_1\, a : P). En la teoría de tipos dependientes, no solo los términos, sino también los tipos pueden depender de términos.

Por ejemplo:

  • n:N⊢Vect(n)  typen : \mathbb{N} \vdash \text{Vect}(n) \;\text{type} (vectores de longitud nn)
  • n:N⊢isEven(n)  typen : \mathbb{N} \vdash \text{isEven}(n) \;\text{type} (testigo de que nn es par)

Si interpretamos los tipos dependientes como:

  • Proposiciones: los tipos dependientes son predicados.
  • Conjuntos: los tipos dependientes son familias indexadas de conjuntos.
  • Programas: los tipos dependientes son especificaciones parametrizadas.

Funciones dependientes y Π\Pi-tipos

Definición 7 — Funciones dependientes

Una función dependiente O:∏n:NVect(n)O : \prod_{n:\mathbb{N}} \text{Vect}(n) asigna a cada n:Nn : \mathbb{N} un vector de longitud nn. A veces se escribe O:(n:N)→Vect(n)O : (n : \mathbb{N}) \to \text{Vect}(n).

La regla de eliminación nos da O(n):Vect(n)O(n) : \text{Vect}(n) para cualquier n:Nn : \mathbb{N}.

Definición 8 — Reglas para Π\Pi-tipos

Formación: Si Γ,x:P⊢Q  type\Gamma, x : P \vdash Q \;\text{type}, entonces Γ⊢∏x:PQ  type\Gamma \vdash \prod_{x:P} Q \;\text{type}.

Introducción: Si Γ,x:P⊢q:Q\Gamma, x : P \vdash q : Q, entonces Γ⊢λx. q:∏x:PQ\Gamma \vdash \lambda x.\, q : \prod_{x:P} Q.

Eliminación: Si Γ⊢f:∏x:PQ\Gamma \vdash f : \prod_{x:P} Q y Γ⊢p:P\Gamma \vdash p : P, entonces Γ⊢f p:Q[p/x]\Gamma \vdash f\, p : Q[p/x].

Computación (β\beta): Γ⊢(λx. q) p≐q[p/x]:Q[p/x]\Gamma \vdash (\lambda x.\, q)\, p \doteq q[p/x] : Q[p/x].

Unicidad (η\eta): Γ⊢λx. f x≐f:∏x:PQ\Gamma \vdash \lambda x.\, f\, x \doteq f : \prod_{x:P} Q.

Observaciones sobre los Π\Pi-tipos:

  • →\to es un caso especial de Π\Pi: cuando QQ no depende de xx, ∏x:PQ\prod_{x:P} Q es simplemente P→QP \to Q.
  • ∧\land es un caso especial de Π\Pi: si tenemos B\mathbb{B} (el tipo con 2 elementos), entonces ∏b:BVectb\prod_{b:\mathbb{B}} \text{Vect}_b es lo mismo que Vect0∧Vect1\text{Vect}_0 \land \text{Vect}_1.
  • En la interpretación lógica, Π\Pi corresponde al cuantificador universal ∀\forall.