私の coq 開発では、Adam Chlipala 教授のように、自分の問題領域に合わせた新しい戦術を作成する方法を学んでいます。そのページでは、たとえば と組み合わせrepeat
て強力なカスタム戦術を作成する方法について説明していますmatch
。
今、私はすでに強力なワンショット戦術を使用していますauto
. ヒント データベースから見つかったステップのチェーンをつなぎ合わせます。ヒントデータベースのキュレーションにも力を入れているので、これからも使い続けたいと思います。
ただし、これには問題があります。 の機能をカスタマイズされた戦術に組み込む「正しい」方法が何であるかは明確ではありません。auto
たとえば、(ページごとに)auto
常にゴールを解決するか、何もしないため、ループ内に配置しても、ループの後に一度呼び出すよりも強力ではありません。
これが理想的でない理由を理解するために、 の 1 つの「ステップ」を直接呼び出す仮想的な方法を考えてみましょう。この方法はauto
、変更を加えることができれば (目標を解決した場合のみではなく) 成功し、それ以外の場合は失敗します。このような単一ステップは、一致の繰り返しループでカスタム動作とインターリーブすることができ、検索ツリー内の中間点try contradiction
などを可能にします。try congruence
auto
の機能をカスタム戦術に組み込むための優れた設計パターンはありますか?
の行動は、使用できるauto
「シングル ステップ」戦術に分解できますか?