假设我在Isabelle中有以下代码:
lemma"[| xs@zs = ys@xs ;[]@xs = []@[] |] => ys=zs" (*never mind the lemma body*)
apply simp
done
在上面的代码中,simp方法证明了引理。我有兴趣看到并打印出简化方法用于证明此引理的详细(重写/简化)步骤(并且可能能够对所有其他证明方法执行相同操作)。这怎么可能?
我正在使用isabelle 2014和JEdit编辑。
非常感谢
答案 0 :(得分:4)
可以通过指定属性simp_trace
或simp_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}},clarsimp
,fastforce
等),而auto
仅适用于基于简化器的方法。
要使用它,您需要同时抓取文件Apply_Trace_Cmd.thy
和Apply_Trace.thy
并导入simp_trace
。