【发布时间】:2017-09-24 13:19:30
【问题描述】:
假设我们有一个归纳数据结构和一些谓词:
Inductive A : EClass :=
X | Y .
Definition P (a: A) : bool :=
match a with
X => true
| Y => false
end.
然后,我制定一个定理,说存在一个元素 a 使得 P a 返回 true:
Theorem test :
exists a: A, P a.
可能有多种方法,我正在考虑如何使用案例分析来证明它,在我看来,它的工作原理是这样的:
- 请记住,
A有两种构造方式 - 一种一种方式尝试,如果我们发现有
P a持有的证人就停止。
我的 Coq 代码如下所示:
evar (a: A). (* introduce a candidate to manipulate *)
destruct a eqn: case_A. (* case analysis *)
- (* case where a = X *)
exists a.
rewrite case_A.
done.
- (* case where a = Y *)
(* stuck *)
我的问题是,
- 我的证明策略是否存在逻辑缺陷?
- 如果不是,我的 Coq 就是问题所在,我如何向 Coq 传达我的工作已经完成,我找到了一位见证人?也许我不应该
destruct?
谢谢!
【问题讨论】:
标签: coq