coq - 证明 Prop 中的两个居民不相等?
问题描述
是否有可能有一些A, B : Prop
这样我们可以提供证明:
Section QUESTION.
A: Prop := <whatever you want> .
B : Prop := <whatever you want> .
Theorem ANeqB: A <> B.
Proof.
<a proof of this fact>
Qed.
直觉上,我认为不会,因为这可以让我们“区分”证明,但是如果不计算A
or ,就不能做到这一点B
。然而,Coq 明确禁止我们检查证明,因为它们必须在运行时被擦除。所以,只Prop
应该能够检查Prop
(由于擦除),但检查总是计算的,因此Prop
不能检查Prop
。因此,没有任何东西可以检验Prop
,上述定理ANeqB
也不能被证明。
- 如果我的上述解释不正确,您能否向我解释为什么会这样?
- 如果这个定理
ANeqB
不能被证明,你能给我一个证明这个事实的证据吗? ANeqB
如果可以证明这个定理,你能告诉我我的直觉在哪里失败吗?
编辑:
令我震惊的是,由于我们可以将证明无关性作为一个额外的公理 ( Axiom proof_irrelevance : forall (P:Prop) (p1 p2:P), p1 = p2.
),因此无法在 Coq 中证明该定理ANeqB
—— 如果可以的话,将其proof_irrelevance
作为一个额外的公理是不合理的。
这改变了我的问题,然后:
ANeqB
是否有可能证明一些居民A
和B
?(proof_irrelevance
更强:它表明我们无法证明[实际上,我们可以证明A <> B
的更强有力的陈述] 对所有人)A = B
A, B
- 如果没有,有人可以提供在 Coq 的基于公理系统中
ANeqB
无法证明的证明吗?
解决方案
我想你可能在想别的东西。Prop
本身并不是不相关的证明。它肯定有可区分的元素。例如,True <> False
。
Section QUESTION.
Definition A: Prop := True.
Definition B : Prop := False.
Theorem ANeqB: A <> B.
Proof.
unfold A, B.
intro p.
destruct p.
exact I.
Qed.
End QUESTION.
相反,它的元素可能Prop
是无关紧要的。在公理中
Axiom proof_irrelevance: forall (P: Prop) (p q: P), p = q.
p
并且q
它们本身不是 的元素Prop
,而是 的某个元素的元素Prop
。
推荐阅读
- css - 绝对位置在 flex 的子级中不起作用
- python-3.x - Python列表在复制时相互同步
- reactjs - 'TypeError: 为购物车创建函数时无法读取未定义的属性'长度'。这是代码片段。可能是什么问题?
- javascript - 如何用wordpress中的特定类替换p标签中的内容?
- reactjs - 在使用 MovieDB 进行 fetch 时,我的 CPU 100% React
- python - 使用熊猫将日期时间列格式化为单一格式的数据框
- python - 正则表达式获取单词,如果它在中间有字符但在开头或结尾没有
- swift - 如何为 xib 文件设置标识符
- download - 从 URL 下载 TXT 文件并保存到 Flutter Web 上的 PC
- ruby-on-rails - 设计 + 管理:ActionController::RoutingError - 未初始化的常量 Admin::SessionsController: