【发布时间】:2013-03-19 00:33:56
【问题描述】:
在 Isabelle 中,人们通常可以达到证明目标,即中间类型的术语对证明的正确性至关重要。例如,考虑以下引理将 nat 42 转换为 'a word 然后再返回:
theory Test
imports "~~/src/HOL/Word/Word"
begin
lemma "unat (of_nat 42) = 42"
...
现在这个陈述的真假取决于of_nat 42的类型:如果是32 word,那么这个陈述是真的,如果是一个2 word,那么这个陈述就是假的。
很遗憾,我似乎无法让 Isabelle 向我展示这种中间类型。
我尝试了以下方法:
declare [[show_types]]declare [[show_sorts]]local_setup {* Config.put show_all_types true *}
所有这些都只是显示:
unat (of_nat (42::nat)) = (42::nat)
在紧要关头,可以做到:
apply (tactic {* (fn t => (tracing (PolyML.makestring (prems_of t)); all_tac t)) *})
获取term 的原始转储,但我希望有更好的方法。
有没有在证明目标中显示中间项类型的好方法?
【问题讨论】:
-
只是为了澄清:你指的是
~/src/HOL/Word/Word中的unat,对吧? (并不是说这与答案相关,但它可能会帮助以后的访问者重现您的问题。) -
顺便说一句:在“所有这些都只是显示”下面的行中,我猜你的意思是
42而不是3? -
@chris:谢谢。我都更新了。
标签: isabelle