[英]Isabelle/HOL proof by rule inversion
我將從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)
(* ... *)
伊莎貝爾停止在ev0
,抱怨Undefined case: "ev0"
,然后Illegal application of proof command in "state" mode
在by
。
說明這一目標的兩種方式之間有什么區別? 如何將上述證明技術與引理語句一起使用? (我知道我可以用sledgehammer
證明這個引理,但我試圖理解Isar的證明。)
cases
方法試圖根據“給定事實”選擇正確的案例分析規則。 鑒於事實是您使用then
或from
或using
事實。
如果你把光標放在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.