前の質問に答えてくれたJoshとLeonardoに感謝します。
もう少し質問があります。
<1>別の例を考えてみましょう。
(exists k) i * k > = 4 and k > 1.
これには、i> 0の単純な解があります。(IntとRealの両方の場合)
しかし、フォローしてみると、
(declare-const i Int)
(assert (exists ((k Int)) (and (>= (* i k) 4) (> k 1))))
(apply (using-params qe :qe-nonlinear true))
Z3ここで数量詞を削除できませんでした。
ただし、実際のケースでは排除できます。(iとkが両方とも実数の場合)量化記号消去法は整数の方が難しいですか?
<2>システムでZ3CAPIを使用しています。システム内の数量詞を使用して、整数にいくつかの非線形制約を追加しています。Z3は現在、充足可能性をチェックし、システムが充足可能であるときに正しいモデルを提供します。
量化記号消去法の後、これらの制約は線形制約に還元されることを私は知っています。
z3は、充足可能性をチェックする前に、自動的に量化記号消去法を実行すると思いました。しかし、上記のケース1ではそれができなかったので、今では、通常、量化記号消去法のないモデルが見つかると思います。私は正しいですか?
現在、z3は私のシステムの制約を解決できます。ただし、複雑なシステムでは失敗する可能性があります。このような場合、z3を使用せずに他の方法で量化記号消去法を実行し、後でz3に制約を追加することをお勧めしますか?
<3>システムに整数非線形制約の代わりに実非線形制約を追加することを考えることができます。その場合、C-APIを使用して量化記号消去法を実行するようにz3を強制するにはどうすればよいですか?
<4>最後に、これは量化記号消去法を実行するためにz3を強制するための良い考えですか?または、通常、量化記号消去法を実行せずに、よりインテリジェントにモデルを検索しますか?
ありがとう。