【发布时间】:2012-04-30 01:22:54
【问题描述】:
我在互联网上进行了搜索,但我找不到任何关于 CHI 的解释,这些解释不会迅速退化为逻辑理论的讲座,这让我大吃一惊。 (这些人说的好像“直觉命题演算”是一个对普通人实际上有意义的短语!)
粗略地说,CHI 说类型是定理,程序是这些定理的证明。但这到底是什么意思 ??
到目前为止,我已经弄清楚了:
考虑
id :: x -> x。它的类型是“假设 X 为真,我们可以得出结论 X 为真”。对我来说似乎是一个合理的定理。现在考虑
foo :: x -> y。正如任何 Haskell 程序员都会告诉你的那样,这是不可能的。你不能写这个函数。 (好吧,无论如何都不要作弊。)作为一个定理阅读,它说“鉴于任何 X 为真,我们可以得出任何 Y 为真的结论”。这显然是无稽之谈。而且,果然,你不能写这个函数。更一般地,函数的参数可以被认为是“假设为真的事情”,而结果类型可以被认为是“假设所有其他事情都是真的事情”。如果有一个函数参数,比如
x -> y,我们可以将其视为 X 为真意味着 Y 必须为真的假设。例如,
(.) :: (y -> z) -> (x -> y) -> x -> z可以理解为“假设 Y 隐含 Z,X 隐含 Y,并且 X 为真,我们可以得出结论 Z 为真”。这对我来说似乎合乎逻辑。
现在,Int -> Int 到底是什么意思? o_O
我能想出的唯一明智的答案是:如果你有一个函数 X -> Y -> Z,那么类型签名会说“假设可以构造一个 X 类型的值,另一个类型Y,那么就可以构造一个 Z 类型的值”。函数体准确地描述了你将如何做到这一点。
这似乎有道理,但不是很有趣。很明显,它肯定比这更多......
【问题讨论】:
-
在我发布这篇文章之前阅读一下 - 很快就迷路了...... :-S
-
公平地说,大多数“正常人”不会查找 Curry-Howard 同构...
-
@amindfv 好吧,我想这很公平。 :-)
标签: haskell types logic curry-howard