Z3 の実数を使用してエンコードされた問題を考えるとZ3 /smt2 /st
、実数エンジンに「問題がある/多くの作業を行う」かどうかを判断するために、生成される統計のどれが役立つでしょうか?
私の場合、問題の 2 つのほぼ同等のエンコーディングがあり、どちらも実数を使用しています。ただし、エンコーディングの「小さな」違いは、実行時間に大きな違いをもたらします。つまり、エンコーディング A は 2:30 分、エンコーディング B は 13 分かかります。Z3 の統計によるとconflicts
、 とquant-instantiations
はほぼ同等ですが、 と など、他のものはそうではありませgrobner
ん。pivots
nonlinear-horner
2 つの異なる統計がgistとして利用可能です。
編集(レオのコメントに対処するため):
両方のバージョンで生成される SMT2 エンコーディングは約 3 万行で、実数が使用されるアサーションがコード全体に散りばめられています。主な違いは、エンコーディング B では、不等式によって境界付けられた範囲0.0
からの範囲の指定されていない実数型の定数が多数使用されることです。 、または。両方のエンコーディングは、非線形実数演算を使用します。1.0
0.0 < r1 < 1.0
0.0 < r3 < 0.75 - r1 - r2
0.1
0.75 - 0.01
r1 * (1.0 - r2)
2 つのエンコーディングからのいくつかのランダムな例がgistとして利用可能です。上で説明したように、発生するすべての変数は指定されていない実数です。
PS: 固定実数値のエイリアスを導入します。たとえば、
(define-sort $Perms () Real)
(declare-const $Perms.$Full $Perms)
(declare-const $Perms.$None $Perms)
(assert (= $Perms.Zero 0.0))
(assert (= $Perms.Write 1.0))
パフォーマンスに重大なペナルティを課しますか?