2016-05-25 6 views
0

論理が指定されずにZ3が実行され、(check-sat)が発行されると、default_tactic.cppのロジックが条件付きで「最良」のソルバーを起動します。私はSMT-LIB 2インターフェースからこのデフォルトの戦術にアクセスしたいと思います。 (デフォルトのチェックを使用)など

私はSMT-LIBにdefault_tactic.cppからロジックを翻訳してみました、と私はこの思い付いた:

(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)))))))))) 

この「ほとんど」の作品は、その中で、あなたは、liranraで行を削除した場合、qffpaとすると、Z3はこれを問題なく実行します。これら3つの戦術は、Z3 4.4.1のSMT-LIB 2インターフェースでは公開されていないようです。しかし、この問題のもう一つの問題は、Z3の将来のリビジョンでデフォルトの戦術が更新された場合、上記のようなハードコードされた戦略は更新されないということです。

は、私が本当にやりたいことは(check-sat-using default)、または類似した何かのようにコマンドを発行し、(check-sat)で得られたとして、同じ結果を得ることです。これは可能ですか?

答えて

2

あなたが参照しているファイルは非常に古いです。その後、Z3はGitHubに移動し、default_tactic.cppの最新バージョンはhereになりました。 QF_FPのデフォルトの戦術は今qffp呼ばれる

lira戦術は、以来、同様エクスポートされたと私はちょうど(this commitのような)だけでなくnraを輸出しました。


編集:this commitのようdefault戦術にも輸出されているので、要求されたとして、それは(check-sat-using default)を書きできるようになりました。

+0

ありがとうございました。私がクローンしてz3マスターを構築し、上記のように 'default_tactic.cpp'の最新バージョンと一致するものを修正すれば、' check-sat'の動作に合った 'check-sat-using'を使って戦略を得ます。 –

+0

'default_tactic.cpp'が更新されている場合、カスタム'(check-sat-using ... 'コマンドは更新の恩恵を受けることはありません)代わりに、行を追加することでデフォルトの方法をエクスポートしようとしました'default_tactic.h'を' nra_tactic.h'に追加したのと似ていますが、これはうまくいきました!私がコミットしてGitHubをプルリクエストすると、それをマスターにマージすることを検討しますか? –

+0

(check-sat)が(デフォルトを適用する)と同じように少し冗長になるかもしれませんが、デフォルトの戦術を他のものと組み合わせたユースケースがあると思いますか? –

関連する問題