【发布时间】:2015-12-24 07:32:48
【问题描述】:
我读到了implications are functions。但是我很难理解上述页面中给出的示例:
蕴涵 P → Q 的证明项是一个函数 P 的证据作为输入,Q 的证据作为其输出。
引理 silly_implication : (1 + 1) = 2 → 0 × 3 = 0。证明。介绍 H。 反身性。 Qed。
我们可以看到,上述引理的证明项确实是 功能:
打印 silly_implication。 (* ===> silly_implication = 有趣 _ : 1 + 1 = 2 => eq_refl : 1 + 1 = 2 -> 0 * 3 = 0 *)
确实,它是一个函数。但它的类型对我来说不合适。根据我的阅读,P -> Q 的证明项应该是一个以Q 的证据作为输出的函数。那么(1+1) = 2 -> 0*3 = 0 的输出应该是0*3 = 0 的证据,对吧?
但是上面的 Coq 打印显示函数图像是 eq_refl : 1 + 1 = 2 -> 0 * 3 = 0,而不是 eq_refl: 0 * 3 = 0。我不明白为什么假设1 + 1 = 2 应该出现在输出中。谁能帮忙解释一下这里发生了什么?
谢谢。
【问题讨论】:
标签: logic coq curry-howard