論理が指定されずにZ3が実行され、(check-sat)
が発行されると、default_tactic.cppのロジックが条件付きで「最良」のソルバーを起動します。私はSMT-LIB 2インターフェースからこのデフォルトの戦術にアクセスしたいと思います。 (デフォルトのチェックを使用)など
(check-sat-using (and-then simplify
(cond is-qfbv qfbv
(cond is-qflia qflia
(cond is-qflra qflra
(cond is-qfnra qfnra
(cond is-qfnia qfnia
(cond is-nra nra
(cond is-lira lira
(cond is-qffpabv qffpa
smt))))))))))
この「ほとんど」の作品は、その中で、あなたは、lira
nra
で行を削除した場合、qffpa
とすると、Z3はこれを問題なく実行します。これら3つの戦術は、Z3 4.4.1のSMT-LIB 2インターフェースでは公開されていないようです。しかし、この問題のもう一つの問題は、Z3の将来のリビジョンでデフォルトの戦術が更新された場合、上記のようなハードコードされた戦略は更新されないということです。
は、私が本当にやりたいことは(check-sat-using default)
、または類似した何かのようにコマンドを発行し、(check-sat)
で得られたとして、同じ結果を得ることです。これは可能ですか?
ありがとうございました。私がクローンしてz3マスターを構築し、上記のように 'default_tactic.cpp'の最新バージョンと一致するものを修正すれば、' check-sat'の動作に合った 'check-sat-using'を使って戦略を得ます。 –
'default_tactic.cpp'が更新されている場合、カスタム'(check-sat-using ... 'コマンドは更新の恩恵を受けることはありません)代わりに、行を追加することでデフォルトの方法をエクスポートしようとしました'default_tactic.h'を' nra_tactic.h'に追加したのと似ていますが、これはうまくいきました!私がコミットしてGitHubをプルリクエストすると、それをマスターにマージすることを検討しますか? –
(check-sat)が(デフォルトを適用する)と同じように少し冗長になるかもしれませんが、デフォルトの戦術を他のものと組み合わせたユースケースがあると思いますか? –