質問は説明が少し難しいので、私は私の質問を説明するために小さな例を使用します。 ブール変数a、b、cである命題数式集合があるとします。 z3を使用してこの数式セットの真理値代入を取得する場合、変数の優先順位を設定する方法はありますか?つまり、優先順位が> b> cの場合、検索プロセス中にz3が最初にaが真であると仮定し、aが真であることが不可能な場合はbが真であると仮定します。言い換えれば、z3が真の割当てを与えるならば、前述の優先順位の下でa、b、cではないということは、aがbと比較して優先度が高いため真実であることが不可能であることを意味する。私は質問をはっきりと記述したいと思っています。z3でブール変数の優先順位を設定できますか?
5
A
答えて
4
現在のリリース(v4.3.1)では簡単に実行できません。私が見ることができる唯一の方法は、Z3ソースコード(http://z3.codeplex.com)をハック/修正することです。優先順位の設定は、一部のアプリケーションでは便利な機能ですが、いくつかの問題があります。
まず、Z3は問題を解決する前にいくつかの変換(前処理ステップとも呼ばれます)を適用します。変数は作成され、削除されます。したがって、元の問題のケース分割優先度は、Z3によって解決される実際の問題(すべての変換を適用した後に生成される問題)では無意味である可能性があります。
劇的な例の1つは、ビットベクトルのみを含む式です。デフォルトでは、Z3はこの式を命題論理に縮小し、命題SATソルバーを呼び出します。この削減では、すべてビットベクトル変数は削除されます。
Z3は、ソルバーとプリプロセッサの集合です。デフォルトでは、Z3は自動的にソルバを選択します。これらのソルバの中には、全く異なるアルゴリズムを使用するものがあります。したがって、提供される優先順位は、使用されているソルバにとっては役に立たない可能性があります。
GManNickGとして指摘されているように、特定のソルバーの位相選択戦略を設定することができます。詳細については、彼のコメントに掲載されている記事を参照してください。
関連する問題
- 1. ブール演算子の優先順位
- 2. 通常の優先順位プロセスで、単一スレッドの優先度を15以上に設定できますか?
- 3. 複数のブール条件 - 演算子の優先順位
- 4. プロセスの優先順位とスレッドの優先順位
- 5. MySQLの優先順位順
- 6. 優先順位キューマルチスレッド
- 7. mysqlプロセス間の優先順位を設定する
- 8. 優先順位キューの優先順位を変更して、要素の順序を維持する
- 9. MouseHover、MouseEnter関数の優先順位
- 10. ANTLRルールの優先順位
- 11. C#エクステンションメソッドの優先順位
- 12. JOINの優先順位は?
- 13. Rails3ルーティングの優先順位
- 14. express.jsのルータ優先順位
- 15. MVCルーティングパラメータの優先順位
- 16. JPAカスケードタイプの優先順位?
- 17. システム全体でのインストールの優先順位はローカルインストールの優先順位ですか?
- 18. 暗黙的なパラメータの解決 - 優先順位の設定
- 19. SpringデータJPAでは、どのようにプロパティ式の優先順位を設定できますか?
- 20. UIViewでジェスチャー認識とタッチの優先順位を設定する方法
- 21. インスタントvs LocalDateTime - 他の優先順位を優先する場合
- 22. 優先順位を設定するためのSQLデータベースクエリの設計
- 23. リアルタイムスレッドの優先順位から
- 24. Xcodeの異なるバージョン間の優先順位を設定します
- 25. 可変個引数テンプレートコンストラクタの優先順位
- 26. Javascriptでメッセージの優先順位付けはありますか?
- 27. Menhir/Ocamlyaccの演算子の動的優先順位と優先順位の指定
- 28. 優先順位関数/アルファベット順の極値を見つける
- 29. Bloomberg APIと価格設定ソースの優先順位を指定する
- 30. SQL:特定の属性に優先順位を設定する方法は?
おそらく関連:http://stackoverflow.com/q/13921545/87234 – GManNickG