La correspondencia de Curry-Howard ( isomorfismo de Curry-Howard , interpretación inglesa de fórmulas como tipos ) es una equivalencia estructural observable entre pruebas y programas matemáticos que se puede formalizar como un isomorfismo entre sistemas lógicos y cálculos tipificados.
Haskell Curry [1] y William Howard2] que la construcción de prueba constructiva es similar a la descripción de los cálculos, y las declaraciones de lógica constructiva son similares en su estructura a los tipos de expresiones calculadas: programas para una computadora . Las primeras manifestaciones de esta conexión son la interpretación Brouwer-Heiting-Kolmogorov (1925), que define la semántica de la lógica intuicionista mediante el cálculo de pruebas, y la teoría de la realizabilidad Kleene (1945).
La correspondencia de Curry-Howard en la visión moderna no se limita a ninguna lógica o sistema de tipos. Por ejemplo, la lógica proposicional corresponde a un cálculo λ con tipo simple , la lógica de segundo orden corresponde a un cálculo λ y el cálculo predicados corresponde a un cálculo λ con tipos dependientes .
En el marco del isomorfismo de Curry-Howard, los siguientes elementos estructurales se consideran equivalentes:
Sistemas lógicos | Lenguajes de programación |
---|---|
declaración | Tipo de |
Prueba de la declaración | Tipo de término (expresión) |
La afirmación es demostrable | Tipo habitado |
implicación | tipo funcional |
Conjunción | Tipo de obra de arte (pares) |
Disyunción | Tipo de suma (unión discriminada) |
fórmula verdadera | tipo único |
fórmula falsa | Tipo vacío ( ) |
cuantificador universal | Tipo de producto dependiente ( -type) |
Cuantificador de existencia | Tipo de suma dependiente ( -type) |
El ejemplo más simple de la correspondencia de Curry-Howard es un isomorfismo entre un cálculo λ tipado simple y una pieza de lógica proposicional intuicionista que incluye solo implicación . Por ejemplo, un tipo en un cálculo lambda tipado simple corresponde a una proposición de lógica proposicional. Para probar esta afirmación, es necesario construir un término del tipo especificado (si esto se puede hacer, entonces dicen sobre el tipo que está habitado o habitado ), en este caso, puede presentar el término deseado: , y esto significa que la tautología ha sido probada.
El uso del isomorfismo de Curry-Howard ha hecho posible crear toda una clase de lenguajes de programación funcionales cuyo entorno de ejecución es también un sistema de prueba automática , como Coq , Agda y Epigram .