Eu descobri o isomorfismo de Curry-Howard relativamente tarde em minha vida de programação e talvez isso contribua para que eu fique totalmente fascinado por ele. Isso implica que para cada conceito de programação existe um análogo preciso na lógica formal e vice-versa. Aqui está uma lista "básica" dessas analogias, tirada do topo da minha cabeça:
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
Então, à minha pergunta: quais são algumas das implicações mais interessantes / obscuras desse isomorfismo? Não sou um lógico, então tenho certeza de que apenas arranhei a superfície com esta lista.
Por exemplo, aqui estão algumas noções de programação para as quais não tenho conhecimento de nomes expressivos na lógica:
currying | "((a & b) => c) iff (a => (b => c))"
scope | "known theory + hypotheses"
E aqui estão alguns conceitos lógicos que ainda não defini em termos de programação:
primitive type? | axiom
set of valid programs? | theory
Editar:
Aqui estão mais algumas equivalências coletadas das respostas:
function composition | syllogism -- from Apocalisp
continuation-passing | double negation -- from camccann
goto | jumping to conclusions