首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >伊莎贝尔/HOL规则反演证明

伊莎贝尔/HOL规则反演证明
EN

Stack Overflow用户
提问于 2015-07-04 09:31:49
回答 1查看 864关注 0票数 3

我从Isabelle/HOL开始,学习发行版中包含的prog-prove.pdf教程。我在4.4.5节“规则倒置”中遇到了困难。本教程(本质上)给出了以下示例:

代码语言:javascript
复制
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放在证据的周围,因为伊莎贝尔不喜欢顶级的assume。但是现在我想用同样的证明方法,把同样的事实和引理说出来,这是行不通的:

代码语言:javascript
复制
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证明。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-04 11:46:43

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

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

代码语言:javascript
复制
proof (prove): depth 1

using this:
  ev n

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

当你在lemma "ev n ⟹ ev (n - 2)"上的时候

代码语言:javascript
复制
proof (prove): depth 0

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

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

代码语言:javascript
复制
lemma 
  assumes "ev n"
  shows "ev (n - 2)"
using assms
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31219101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档