(これは私の 2 回目のヘルプの試みです。質問/アプローチが意味をなさない、または明確でない場合は、私に知らせてください。 Z3 と私の SBA)
UFBV Z3 ロジックを使用したリレーショナル仕様の境界検証に取り組んでいます。私が調査している現在の問題は、すべての可能なモデルの改ざんを必要とし (到達可能性述語の否定的な使用のため)、高い境界でのソルバーのパフォーマンスを殺します。
可能性のあるモデルの一部だけが実際に興味深い (他と同形ではない) ため、対称性を破る手法 (SAT 分野で知られている) を導入しようとしています。
ただし、私が対称性破りの公理と呼んでいるものを使用すると、場合によっては Z3 のパフォーマンスを向上させることができますが、ソルバーの一般的な動作は不安定になります。
私のアプローチの 1 つ (最も有望なアプローチだと思います) は、ドメイン間の関係の対称性を破ることに基づいています。これは、関係 R の各ドメイン D と各原子 a \in D 公理を導入し、R^{M} と R^{M[a+1/a]} のバイナリ表現に順序を強制します。ここで、M は仕様のモデル。同種の関係の場合、公理は緩和されます。
R \subset AxA を関係とする。R に対する私のリラックスした対称性の破れの公理は次のようになります。
;; SBA(R, A)_upToDiag
(assert
(forall ( (ai A) (aj A) )
(=>
(bvult ai aj)
(=>
(forall ((x A))
(=>
(bvult x aj)
(= (R ai x) (R (bvadd ai (_ bv1 n)) x))
)
)
(=>
(R ai aj)
(R (bvadd ai (_ bv1 n)) aj)
)))))
;; SBA(R, A)_diag
(assert
(forall ( (ai A) )
(=>
(forall ((x A))
(=>
(bvult x ai)
(= (R ai x) (R (bvadd ai (_ bv1 n)) x))
)
)
(=>
(R ai ai)
(R (bvadd ai (_ bv1 n)) (bvadd ai (_ bv1 n)))
))))
私の問題は、この SBA を使用した効果が安定していない/一貫していないことです。バインドとバインド、フォーム仕様とは異なります。また、SBA のすべてまたは 1 つだけを使用すると、パフォーマンスに影響します。
SAT のコンテキストでは、いわゆる対称性破りの述語 (SBP) アプローチの成功は、SAT ソルバーのバックトラッキング機能に基づいています。とりわけ、SBP。
- Z3 のコンテキストでの相違点 (ある場合) は何ですか?
- これらの公理を使用して探索空間を剪定するように解決を強制するにはどうすればよいですか (バックトラックする場合)。
- SBA に (量指定子) パターンを使用すると役立ちますか?
よろしく、
アブバクル アクラフ エル ガジ