在isabelle的证明中打印/显示证明方法(如simp)的详细步骤

时间:2014-11-09 06:42:53

标签: isabelle isar

假设我在Isabelle中有以下代码:

lemma"[| xs@zs = ys@xs ;[]@xs = []@[] |] => ys=zs" (*never mind the lemma body*)
apply simp
done

在上面的代码中,simp方法证明了引理。我有兴趣看到并打印出简化方法用于证明此引理的详细(重写/简化)步骤(并且可能能够对所有其他证明方法执行相同操作)。这怎么可能?

我正在使用isabelle 2014和JEdit编辑。

非常感谢

2 个答案:

答案 0 :(得分:4)

可以通过指定属性simp_tracesimp_trace_new

来启用简化器跟踪
lemma "⟦xs @ zs = ys @ xs; [] @ xs = [] @ [] ⟧ ⟹ ys = zs"
  using [[simp_trace]]
  apply simp
done

如果光标位于simp步骤之后,则输出窗格会显示内联重写跟踪(列表中添加了哪些规则,应用了什么以及重写了哪些术语)。

simp_trace_new允许在单独的窗口中查看更紧凑的跟踪变体(重写内容)(通过按下消息的突出显示部分激活跟踪窗格参见简化器跟踪< / strong> 在输出窗格中,通过按显示跟踪按钮显示跟踪本身。添加选项mode=full会生成类似于simp_trace的更详细的输出,但结构更为合理:

lemma "⟦xs @ zs = ys @ xs; [] @ xs = [] @ [] ⟧ ⟹ ys = zs"
  using [[simp_trace_new mode=full]]
  apply simp
done

您可以在The Isabelle/Isar Reference Manual中找到Isabelle2014安装中包含的更多详细信息。

答案 1 :(得分:2)

如果您愿意下载一两个文件,l4.verified项目将包含由Daniel Matichuk编写的名为Apply Trace的工具。它为您提供了一个新命令apply_trace,可以在通常使用apply的任何地方使用,但会向您显示该步骤中使用的定理。

例如,写作:

lemma "⟦xs @ zs = ys @ xs; [] @ xs = [] @ [] ⟧ ⟹ ys = zs"
  apply_trace simp

产生

used theorems:
  simp_thms(6): (?x = ?x) = True
  append_Nil: [] @ ?ys = ?ys
  append_Nil2: ?xs @ [] = ?xs

simp_trace不同,它不会告诉您应用定理的顺序。但是,它能够使用每个方法(simp,{{ 1}},clarsimpfastforce等),而auto仅适用于基于简化器的方法。

要使用它,您需要同时抓取文件Apply_Trace_Cmd.thyApply_Trace.thy并导入simp_trace