在 Isabelle 中,人们经常可以达到证明目标,其中中间类型的术语对证明的正确性至关重要。例如,考虑以下引理将nat
42 转换为'a word
then 再返回:
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
,但我希望有更好的方法。
有没有一种在证明目标中显示中间项类型的好方法?