请考虑以下归纳谓词:
inductive terminating where
"(⋀ s'. s → s' ⟹ terminating s') ⟹ terminating s"
我想证明,如果节点s没有终止,那么将存在形式为s0→s1→s2→...的无限链。
lemma "¬ terminating (c,s) ⟹
∃ cfs. (cfs 0 = (c,s) ∧ (∀ n. (cfs n) → (cfs (n+1))))"
如何在伊莎贝尔(Isabelle)中证明这一点?
修改
最终目标是证明以下目标:
lemma "(∀s t. (c, s) ⇒ t = (c', s) ⇒ t) ⟹
terminating (c, s) = terminating (c', s) "
其中⇒是GCL的重要步骤。也许需要另一种方法来证明该定理。
答案 0 :(得分:1)
如果您愿意使用选择运算符,则可以使用SOME
轻松构造见证人,例如:
primrec infinite_trace :: ‹'s ⇒ nat ⇒ 's› where
‹infinite_trace c0 0 = c0›
| ‹infinite_trace c0 (Suc n) =
(SOME c. infinite_trace c0 n → c ∧ ¬ terminating c)›
(我不确定您的s
和(c,s)
值的类型,因此我只是使用's
。)
很明显,如果在SOME
某个时刻不能选择满足约束的值,则见证构造将失败。因此,仍然必须证明非终止确实在传播(从定义中很明显):
lemma terminating_suc:
assumes ‹¬ terminating c›
obtains c' where ‹c → c'› ‹¬ terminating c'›
using assms terminating.intros by blast
lemma nontermination_implies_infinite_trace:
assumes ‹¬ terminating c0›
shows ‹¬ terminating (infinite_trace c0 n)
∧ infinite_trace c0 n → infinite_trace c0 (Suc n)›
by (induct n,
(simp, metis (mono_tags, lifting) terminating_suc assms exE_some)+)
使用infinite_trace (c,s)
作为见证人来证明您的存在量化很简单。