多くの場合sledgehammer、証明を見つけるという問題が発生しますが、それを挿入しても終了しません。sledgehammerIsabelle の最も重要な部分の 1 つだと思いますが、証明が失敗すると面倒になります。
Sledgehammerのチュートリアルには、「なぜ Metis は証明の再構築に失敗するのか?」という小さな章があります。
それはリストします:
isar_proofs各ステップが によって正当化される段階的な Isar 証明を取得するオプションを試してくださいmetis。ステップはかなり小さいので、metis再生できる可能性が高くなります。smtの代わりに証明方法を試してくださいmetis。通常はより強力ですが、証明を再生するために Z3 を使用できるようにするか、SMT ソルバーを信頼するか、証明書を使用する必要があります。- 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、、、、 、を介して、必要な事実を渡しながら、
blastまたは証明メソッドを試してください。autounfoldingusingintro: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も証明は見つかりますが、この見つかった証明は失敗します (終了しません)。