多くの場合sledgehammer
、証明を見つけるという問題が発生しますが、それを挿入しても終了しません。sledgehammer
Isabelle の最も重要な部分の 1 つだと思いますが、証明が失敗すると面倒になります。
Sledgehammerのチュートリアルには、「なぜ Metis は証明の再構築に失敗するのか?」という小さな章があります。
それはリストします:
isar_proofs
各ステップが によって正当化される段階的な Isar 証明を取得するオプションを試してくださいmetis
。ステップはかなり小さいので、metis
再生できる可能性が高くなります。smt
の代わりに証明方法を試してくださいmetis
。通常はより強力ですが、証明を再生するために Z3 を使用できるようにするか、SMT ソルバーを信頼するか、証明書を使用する必要があります。- 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、、、、 、を介して、必要な事実を渡しながら、
blast
または証明メソッドを試してください。auto
unfolding
using
intro:
elim:
dest:
simp:
問題は、最初のオプションでは証明がより冗長になり、手動の介入が必要になることです。2 番目のオプションはほとんど機能しません。
では、3 番目のオプションはどうでしょうか。適用できる簡単なヒューリスティックはありますか?
unfolding
とはどう違いusing
ますか?また、失敗した証明からintro:
、elim:
、およびを使用する方法に関するベスト プラクティスはありますか?dest:
metis
部分的な例
proof-
have "(det (?lm)) = (det (transpose ?lm))" by (smt det_transpose)
then have "(det (?lm)) = [...][not shown]"
unfolding det_transpose transpose_mat_factor_col by auto
then show ?thesis [...][not shown]
qed
証明の最初の行は取るに足らないように見えるので、削除したいと思います。最初の行を削除してsledgehammer
も証明は見つかりますが、この見つかった証明は失敗します (終了しません)。