Curry-Howard-Lambek correspondence
From HaskellWiki
Curry-Howard Isomorphism is an isomorphism between types (in programming languages) and propositions (in logic). Interestingly, the isomorphism maps programs (functions in Haskell) to (constructive) proofs (and vice versa).
Contents |
1 The Answer
As is well established by now,
theAnswer :: Integer theAnswer = 42
Integer
42
Integer
2 Inference
A (non-trivial) Haskell function takes maps a value (of typea
b
a
a
b
b
b
a
a -> b
toInteger :: Boolean -> Integer toInteger False = 0 toInteger True = 1
Boolean
Integer
3 Theorems for free!
Things get interesting when polymorphism comes in. The composition operator in Haskell proves a very simple theorem.
(.) :: (a -> b) -> (b -> c) -> (a -> c) (.) f g x = f (g x)
forall a b c. (a -> b) -> (b -> c) -> (a -> c)
a, b
c
a
b
b
c
a
c
