coq - 使用破坏而不是反转
问题描述
inversion
我理解使用该策略的防爆原理:
Theorem ex_falso_quodlibet : forall (P:Prop),
False -> P.
Proof.
intros P contra.
inversion contra. Qed.
但是,我不明白 Coq 为进行相同的证明而采取的步骤,但使用destruct
而不是inversion
:
Theorem ex_falso_quodlibet' : forall (P:Prop),
False -> P.
Proof.
intros P contra.
destruct contra. Qed.
False
归纳法是如何被破坏的?它对目标和完成证明有何影响?
解决方案
False
是一个空的归纳数据类型,即它没有可能的值,请参见此处。True
是具有单个值的归纳数据类型I
当我们使用归纳数据类型destruct
的值X
时,我们将当前目标替换为多个子目标,每个可能的值一个X
。当我们 destruct 时False
,我们最终得到零个要证明的子目标(因为它的值为零),因此证明完成。
基本上,在这里或多或少地做同样的事情destruct
。inversion
推荐阅读
- python - __str__() 实现的正确自动生成也适用于 sqlalchemy 类?
- spring-boot - 如何将参数传递给子查询
- reactjs - 显示“大”组件的链接非常慢
- javascript - 如何使用 css 将三个元素并排放置并居中
- gunicorn - 如何将异常错误记录到 systemd 服务的磁盘?
- xpath - Appium。在定位器中使用 Xpath 轴。在当前元素的上下文中查找兄弟/父/子/等元素
- system-verilog - 默认类型输入和输出信号 SystemVerilog
- postgresql - 如何使用子查询和案例语句加速 PostgreSQL 聚合选择
- java - 是否有在 Selenium 中使用 window().setSize 的替代方法?
- bash - 用 sudo 找不到命令,但不用 sudo 也能工作