【发布时间】:2018-05-08 00:15:45
【问题描述】:
我正在尝试解决“Isabelle/HOL 中的编程和证明”中的练习 4.6。它要求定义一个函数elems :: "'a list ⇒ 'a set",将列表转换为集合,并证明引理"x ∈ elems xs ⟹ ∃ ys zs . xs = ys @ x # zs ∧ x ∉ elems ys"。到目前为止,我已经走了这么远:
fun elems :: "'a list ⇒ 'a set" where
"elems [] = {}" |
"elems (x # xs) = {x} ∪ elems xs"
lemma first_occ: "x ∈ elems xs ⟹ ∃ ys zs . xs = ys @ x # zs ∧ x ∉ elems ys"
proof (induction xs)
case Nil
thus ?case by simp
next
case (Cons u us)
show ?case
proof cases
assume "x = u"
thus ?case
proof
⟨…⟩
此时,我收到错误消息“无法应用初始证明方法”。这很奇怪,因为目标?case 是命题∃ ys zs . u # us = ys @ x # zs ∧ x ∉ elems ys,并且应该可以通过在∃ 下为特定证人显示命题来证明存在命题。
【问题讨论】:
标签: isabelle quantifiers isar