从“价值”到“引理”

时间:2014-04-03 12:18:51

标签: isabelle

我有一个相当大的术语foo。当我输入

value "foo"

然后Isabelle将foo评估为一个值,比如说foo_value。我现在想证明以下引理。

lemma "foo = foo_value"

我应该使用哪种证明方法?我试过了try,但那时已经过了。我想我可以通过展开foo中出现的各种定义来手动进行,但我当然应该能够使用value命令正在使用的任何机制,对吗?

2 个答案:

答案 0 :(得分:4)

有三种证明方法与value的不同评估机制相对应:

  • eval使用代码生成器;它对应value [code]。如果生成的ML代码评估为True,则证明成功。
  • normalization将语句编译为ML中的符号规范化引擎。它模仿value [nbe]
  • code_simp使用Isabelle的简化程序作为评估程序。它对应value [simp]

tutorial on code generation更详细地描述了这些证明方法。 evalnormalization就像oracles一样,即他们绕过了Isabelle的内核,而code_simp的每个评估步骤都通过内核。通常,evalnormalization快,normalizationcode_simp快。

答案 1 :(得分:1)

我不确定它是否适用于所有情况,但您可以尝试:

lemma "foo = foo_value"
  by eval

在许多情况下,by simp也应该有效,我猜eval是一种神谕(在某种意义上它没有被内核完全验证;如果我错了,请有人纠正我)。