如何通过明确的恰当的案例来假设Isabelle / Isar证明的第二个案例?

时间:2013-05-18 22:02:54

标签: proof isabelle isar

我有一个Isabelle证据结构如下:

proof (cases "n = 0")
  case True
  (* lots of stuff here *)
  show ?thesis sorry
next
  case False
  (* lots of stuff here too *)
  show ?thesis sorry
qed

第一种情况实际上是几页长,所以在阅读第二种情况时,对于一个随意的读者,甚至对我自己来说,False所指的是不再清楚的。 (嗯,它实际上,但不是来自阅读,只是在交互式环境中:例如,如果在Isabelle / jEdit中,您将光标放在case False之后,您将看到{ {1}}在“输出”面板中的“this”下面。)

所以有一种语法允许假设“假”情况明确,这样读者既不必与IDE交互,也不必向上滚动到n ≠ 0关键字,但可以看到假设是否合适?

3 个答案:

答案 0 :(得分:5)

在这种情况下,通过明确说明每个案例的假设,证明变得更具可读性:

proof cases
  assume "n = 0"
  show ?thesis sorry
next
  assume "n ≠ 0"
  show ?thesis sorry
qed

答案 1 :(得分:4)

如果False案例较短,请将其放在第一位。 Isar块中的证明顺序无关紧要:

proof (cases "n = 0")
  case False
  show ?thesis sorry
next
  case True
  show ?thesis sorry
qed

答案 2 :(得分:2)

Isar允许在同一主题上进行多种变化。保持原始大纲,你可以像这样明确中间事实:

proof (cases "n = 0")
  case True
  (* lots of stuff here *)
  from `n = 0` show ?thesis sorry
next
  case False
  (* lots of stuff here too *)
  from `n ≠ 0` show ?thesis sorry
qed

这是原始证明大纲的保守扩展,即它不会对检查,统一,搜索等政策进行任何改变。

一般来说,表格

note `prop`

相当于

have "prop" by fact