Двигун для закриття конгруенції Z3 є ключовим компонентом Solver, відповідальним за підтримку класів еквівалентності термінів, заснованих на рівностях. Це гарантує, що якщо два терміни виявляються рівними, вони трактуються як еквівалент протягом усього процесу вирішення. Ось як це працює:
1. Ініціалізація та структура даних: двигун використовує структуру даних, що називається електронними вузлами для представлення термінів у формулі. Кожен електронний вузол містить поля, які допомагають впроваджувати операції з фальшивами профспілок, які мають вирішальне значення для управління класами еквівалентності. Двигун використовує хеш -таблицю, відому як 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 на базі_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