簡體   English   中英

Isabelle / HOL通過規則倒置證明

[英]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" modeby

說明這一目標的兩種方式之間有什么區別? 如何將上述證明技術與引理語句一起使用? (我知道我可以用sledgehammer證明這個引理,但我試圖理解Isar的證明。)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM