Je suis tombé sur le Curry-Howard Isomorphisme relativement tard dans ma vie de programmation, et peut-être ce qui contribue à mon être totalement fasciné par elle. Elle implique que, pour chaque concept de programmation, il existe une précision analogue à la logique formelle, et vice versa. Voici une "base", la liste de ces analogies, sur le dessus de ma tête:
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
Donc, ma question: quels sont certains des plus intéressant/obscur implications de cet isomorphisme? Je ne suis pas un logicien, donc je suis sûr que j'ai seulement gratté la surface avec cette liste.
Pour exemple, voici quelques notions de programmation, pour lequel je suis pas au courant de lapidaire noms de logique:
currying | "((a & b) => c) iff (a => (b => c))"
scope | "known theory + hypotheses"
Et voici quelques notions logiques qui je n'ai pas très bien placés en termes de programmation:
primitive type? | axiom
set of valid programs? | theory
Edit:
Voici quelques équivalences recueillies à partir des réponses:
function composition | syllogism -- from Apocalisp
continuation-passing | double negation -- from camccann