Z3の合同閉鎖エンジンは、ソルバーの重要なコンポーネントであり、等価に基づいた用語の同等のクラスを維持する責任があります。 2つの用語が等しいことが判明した場合、解決プロセス全体で同等のものとして扱われることが保証されます。これがどのように機能しますか:
1。初期化とデータ構造:エンジンは、eノードと呼ばれるデータ構造を使用して、式の用語を表します。各eノードには、同等のクラスの管理に不可欠な組合ファインドオペレーションの実装に役立つフィールドが含まれています。エンジンは、Etableとして知られるハッシュテーブルを使用して、機能アプリケーションを合同閉鎖ルーツにマッピングします[1] [3]。
2。ユニオンファインド操作:合同閉鎖エンジンは、パス圧縮とランクごとのユニオンを使用して、組合ファインド操作を効率的に実行します。これにより、等価クラスのルートにアクセスすることが高速であり、より小さなクラスをより大きなクラスに統合することが効率的であることが保証されます[1]。
3.等価検出:ソルバーが用語間で均等に遭遇する場合、一致閉鎖エンジンは、これらの用語が同じ等価クラスに属するかどうかをチェックします。そうでない場合は、クラスをマージし、合併クラスのすべての用語が等しい[3] [4]として扱われるようにします。
4。ブールの推論との統合:合同閉鎖エンジンは、Z3のブール満足度コアと密接に統合されています。平等な用語が式全体で一貫して扱われることを保証することにより、平等を繁殖させ、不満性を検出するのに役立ちます[5]。
5。紛争解決:CDCL(T)(理論を使用した競合駆動条項学習)のコンテキストでは、合同閉鎖エンジンは、満足のいく割り当てまたは証明の検索中に平等が一貫して適用されることを保証することにより、紛争解決に役割を果たします。不満の[1]。
全体として、Z3の一致閉鎖エンジンは、平等を効率的に処理し、ソルバーが同等の用語を一貫して扱うことを保証するために不可欠です。これは、複数の理論を含む複雑な式を解くために重要です。
引用:[1] https://z3prover.github.io/papers/z3internals.html
[2] https://www.researchgate.net/publication/266654073_z3-str_a_z3 beding_string_solver_for_web_application_analysis
[3] https://www.cs.purdue.edu/homes/xyzhang/comp/fse13.pdf
[4] https://www.csl.sri.com/~tiwari/papers/thesis.pdf
[5] https://ceur-ws.org/vol-418/paper10.pdf
[6] https://theory.stanford.edu/~nikolaj/programmingz3.html
[7] https://arxiv.org/pdf/2209.03398.pdf
[8] http://algos.inesc.pt/projects/nanotime/ref12.pdf