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
が、もっと良い方法があることを望んでいました。
証明の目標で中間項の型を表示する良い方法はありますか?