Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Как работает двигатель закрытия Z3.


Как работает двигатель закрытия Z3.


Двигатель закрытия Z3 - ключевой компонент решателя, ответственный за поддержание классов эквивалентности терминов, основанных на равенстве. Это гарантирует, что если два термина будут равны, они рассматриваются как эквивалентные на протяжении всего процесса решения. Вот как это работает:

1. Инициализация и структура данных: двигатель использует структуру данных, называемую E-Nodes для представления терминов в формуле. Каждый электронный узел содержит поля, которые помогают в реализации операций с подъемом-и-подопечными, которые имеют решающее значение для управления классами эквивалентности. Двигатель использует хэш -таблицу, известную как 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