私は、Microsoft Researchによって開発されたSMTソルバーであるZ3を使って、一次理論のすべての可能なモデルを検索しようとしています。 f->true
とf->false
2つの満足の割り当てがある。この命題場合Z3:すべての満足できるモデルを見つける
(declare-const f Bool)
(assert (or (= f true) (= f false)))
:ここで最小実施例です。 Z3(とSMTソルバーは一般的に)モデルを満たすものを見つけることのみを試みるため、すべての解を見つけることは直接的に不可能です。 Here(next-sat)
という便利なコマンドが見つかりましたが、Z3の最新バージョンはこれをサポートしていないようです。これは私にとって少し不幸なことですが、一般的にはこのコマンドは非常に便利だと思います。これを行う別の方法がありますか?
、この回答を参照してください。http://stackoverflow.com/questions/11867611/z3py-checking-allを-solutions-for-equation – Taylor
Z3は、そのような検索のために中断したところでピックアップするという意味でステートフルですか?終わりを除いて(直感的に)すべての仕事がまったく同じになるたびに、始めるのは無駄でしょう。 – GManNickG
@ GManNickGこのメソッドを使った例では、最初のモデルよりも速い次のいくつかのモデルを見つけることが実際にステートフルなようです。 58モデルの特定のケースの実行時間のミリ秒単位のリストを次に示します。 '8942 801 1663 5 599 320 450 2 2 3 1 5 1377 36 5 738 162 105 1639 3 5 16 2041 27 475 953 562 746 45 151 18 4206 3416 9 850 120 3 4 12 615 593 1219 449 154 987 3 10 1365 16 438 792 1686 743 46 5 8 412 126'。 最初のものが間違いなく最も長いことに注意してください。他のものはランダムです(おそらく問題とソルバーがどれほど幸運なのかによって決まります)。 –