我有以下定義:計算傳遞閉
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