在伊莎贝尔,经常可以击中目标,证明在中间类型的术语是一个证明的正确性至关重要。例如,请考虑以下引理转换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
,然而,该声明是假的。
不幸的是,我似乎无法得到伊莎贝尔显示此中间类型的给我。
我已经试过如下:所有这些
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',对吧? (不是说这与答案有关,但它可能有助于后来的访问者重现您的问题。) – chris 2013-03-19 02:10:32
Btw:在下面的“所有这些只是显示”我想你的意思是'42'而不是'3'? – chris 2013-03-19 02:31:54
@chris:谢谢。我已经更新了两个。 – davidg 2013-03-19 02:47:09