„Z3“ kongruencijos uždarymo variklis yra pagrindinis sprendimo komponentas, atsakingas už lygiavertiškumo klasių, pagrįstų lygybe, išlaikymą. Tai užtikrina, kad jei nustatyta, kad du terminai yra lygūs, jie yra traktuojami kaip lygiaverčiai per visą sprendimo procesą. Štai kaip tai veikia:
1. Inicijavimas ir duomenų struktūra: Variklis naudoja duomenų struktūrą, vadinamą e mazgais, kad vaizduotų formulės terminus. Kiekviename e-mazge yra laukai, kurie padeda įgyvendinti „Union-Find“ operacijas, kurios yra labai svarbios norint valdyti ekvivalentiškumo klases. Variklis naudoja maišos lentelę, žinomą kaip etable, norėdamas susieti funkcijų programas jų suderinamumo uždarymo šaknims [1] [3].
2. „Union-Find“ operacijos: „Conference Closure Engine“ efektyviai atlieka „Union-Find“ operacijas, naudodama kelio glaudinimą ir „Union“ pagal rangą. Tai užtikrina, kad patekti į lygiavertiškumo klasės šaknį yra greita ir kad mažesnių klasių sujungti į didesnes yra veiksminga [1].
3. Lygiavertiškumo aptikimas: Kai sprendėjas susiduria su lygybe tarp sąlygų, kongruencijos uždarymo variklis patikrina, ar šie terminai priklauso tai pačiai lygiavertiškumo klasei. Jei ne, tai sujungia jų klases, užtikrinant, kad visos sujungtos klasės terminai būtų traktuojami kaip vienodi [3] [4].
4. Integracija į loginius samprotavimus: „Conference Closure“ variklis yra glaudžiai integruotas į Z3 loginio patenkinimo branduolį. Tai padeda skleisti lygybę ir nustatyti nepatenkinamumą užtikrinant, kad vienodi terminai būtų nuolat gydomi visoje formulėje [5].
5. Konfliktų sprendimas: CDCL (T) kontekste (Konfliktų pagrįsta išlygos mokymasis su teorijomis), kongruencijos uždarymo variklis vaidina svarbų vaidmenį sprendžiant konfliktus, užtikrinant, kad lygybė būtų nuolat taikoma ieškant patenkinamos užduoties ar įrodymo nepatenkinamumo [1].
Apskritai, Z3 kongruencijos uždarymo variklis yra būtinas norint efektyviai tvarkyti lygybę ir užtikrinti, kad sprendimas nuosekliai gydytų lygiaverčius terminus, o tai yra labai svarbu sprendžiant sudėtingas formules, apimančias daugybę teorijų.
Citatos:[1] https://z3prover.github.io/papers/z3internals.html
[2] https://www.researchgate.net/publication/266654073_z3-Str_a_z3 pagrįsti_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