我有以下定义:计算传递闭
definition someRel :: "nat rel"
where
"someRel = {(1, 2), (2, 3), (3, 4), (4, 5)}"
我要证明以下引理:
lemma "someRel^*``{1}={1, 2, 3, 4, 5}"
我设计了以下证明:
proof
show "someRel^*``{1} ⊆ {1, 2, 3, 4, 5}"
proof
fix x
assume "x ∈ someRel⇧* `` {1}"
then show "x ∈ {1, 2, 3, 4, 5}"
using assms someRel_def by (auto elim: rtranclE)
qed
next
show "{1, 2, 3, 4, 5} ⊆ someRel^*``{1}"
proof
fix x
assume "x ∈ {1::nat, 2, 3, 4, 5}"
then show "x ∈ someRel⇧* `` {1}"
using assms someRel_def Image_singleton by (induction) blast+
qed
qed
这个证明有以下问题:
- 使用规则
rtranclE
证明了第一部分(show "someRel^*``{1} ⊆ {1, 2, 3, 4, 5}"
)。如果我向someRel
关系中添加一对(如对(6, 7)
) - 第二部分的证明(
show "{1, 2, 3, 4, 5} ⊆ someRel^*``{1}"
)不会终止。
任何人都可以提出更好的证据吗? (a)允许someRel
关系中的更多对和(b)终止。
小意见:只要涉及非终止方法/策略,我不会谈论“证明”。 – chris 2014-09-03 08:08:09
在你的证明尝试的第二部分中,“使用assms”并不是真正有意义的('assms'指的是你的引理的全部假设,根本没有)。而不是'使用someRel_def',你可能想通过'展开someRel_def'展开'someRel'的定义。 – chris 2014-09-03 08:18:44