Isabelle / HOL通过规则倒置证明

时间:2015-07-04 09:31:50

标签: isabelle

我开始使用Isabelle / HOL并完成分发中包含的prog-prove.pdf教程。我在第4.4.5节“规则倒置”中难以接受。本教程(基本上)给出了以下示例:

theory Structured
imports Main
begin

inductive ev :: "nat ⇒ bool" where
ev0:  "ev 0" |
evSS: "ev n ⟹ ev (Suc (Suc n))"

notepad
begin
  assume "ev n"
  from this have "ev (n - 2)"
  proof cases
    case ev0 thus "ev (n - 2)" by (simp add: ev.ev0)
  next
    case (evSS k) thus "ev (n - 2)" by (simp add: ev.evSS)
  qed
end

虽然我不得不将notepad放在证据上,因为Isabelle不喜欢assume在顶层。但是现在我想通过引用与引理相同的事实来使用相同的证明技术,这不起作用:

lemma "ev n ⟹ ev (n - 2)"
proof cases
  case ev0 thus "ev (n - 2)" by (simp add: ev.ev0)
  (* ... *)

Isabelle在ev0停留,抱怨Undefined case: "ev0",然后Illegal application of proof command in "state" mode by。{/ p>

说明这一目标的两种方式之间有什么区别?如何将上述证明技术与引理语句一起使用? (我知道我可以使用sledgehammer证明引理,但我试图理解Isar证明。)

1 个答案:

答案 0 :(得分:3)

cases方法尝试根据“给定事实”选择正确的案例分析规则。鉴于您使用thenfromusing提供的事实。

如果您将光标放在have "ev (n - 2)"上,您会看到此目标状态

proof (prove): depth 1

using this:
  ev n

goal (1 subgoal):
 1. ev (n - 2)

lemma "ev n ⟹ ev (n - 2)"上你得到

proof (prove): depth 0

goal (1 subgoal):
 1. ev n ⟹ ev (n - 2)

当您可以使用适当的Isar命令分别指定引理的假设并使用==>将其提供给证明时,解决方案是避免元隐含(using):

lemma 
  assumes "ev n"
  shows "ev (n - 2)"
using assms