私はz3シェルとjava apiの両方で同じ仮定を試みました。次のように:z3シェルとjava apiの異なる解決
(declare-const x (_ BitVec 32))
(assert (not (bvsle (bvadd x #xfffffff8) #x00000000)))
(check-sat)
(get-model)
をZ3シェルでは、解決策はあります。x = 9 しかし、Z3 APIでは、解決策はあります。x = 0x80000000の 私のアプリケーションでは、私はシェルの結果を好みます。 APIの使い方でいくつかのオプションが欠けていたら
BTW。私は、ソリューションの値を制御するために使用できる任意のオプションは、私はいくつかのより合理的な値が欲しいです。しかし、しばしばZ3は私にランダムな価値のように見える本当に大きな価値を与えます。
はい、Z3は最適化のいくつかの形式をサポートしています。たとえば、http://rise4fun.com/Z3Opt/tutorial/guide –
を参照してください。私は問題を解決しました。ソルバーのreset()メソッドを呼び出すたびにソルバーの呼び出しが失敗したので、モデルの値は常に大きい数値です。制約を解くたびにreset()を呼び出すことで、期待した値になります。 –
@chenruiは実装に依存するソリューションのように聞こえる –