Me encontré con el isomorfismo de Curry-Howard relativamente tarde en mi vida como programador, y tal vez esto contribuya a que me fascine por completo. Implica que para cada concepto de programación existe un análogo preciso en la lógica formal, y viceversa. Aquí hay una lista "básica" de tales analogías, que se me viene a la cabeza:
program/definition | proof
type/declaration | proposition
inhabited type | theorem/lemma
function | implication
function argument | hypothesis/antecedent
function result | conclusion/consequent
function application | modus ponens
recursion | induction
identity function | tautology
non-terminating function | absurdity/contradiction
tuple | conjunction (and)
disjoint union | disjunction (or) -- corrected by Antal S-Z
parametric polymorphism | universal quantification
Entonces, a mi pregunta: ¿cuáles son algunas de las implicaciones más interesantes / oscuras de este isomorfismo? No soy un lógico, así que estoy seguro de que solo he arañado la superficie con esta lista.
Por ejemplo, aquí hay algunas nociones de programación para las que no conozco nombres concisos en lógica:
currying | "((a & b) => c) iff (a => (b => c))"
scope | "known theory + hypotheses"
Y aquí hay algunos conceptos lógicos que no he definido del todo en términos de programación:
primitive type? | axiom
set of valid programs? | theory
Editar:
Aquí hay algunas equivalencias más recopiladas de las respuestas:
function composition | syllogism -- from Apocalisp
continuation-passing | double negation -- from camccann
goto | jumping to conclusions