Motorul de închidere a congruenței Z3 este o componentă cheie a soluționării, responsabilă de menținerea claselor de echivalență de termeni bazate pe egalități. Se asigură că, dacă se constată că doi termeni sunt egali, aceștia sunt tratați ca echivalenți pe parcursul procesului de rezolvare. Iată cum funcționează:
1. Inițializare și structură de date: Motorul folosește o structură de date numită E-NODE pentru a reprezenta termenii în formulă. Fiecare nod electronic conține câmpuri care ajută la implementarea operațiunilor de găsire a uniunii, care sunt cruciale pentru gestionarea claselor de echivalență. Motorul folosește un tabel de hash, cunoscut sub numele de etable, pentru a cartografia aplicațiile funcționale la rădăcinile lor de închidere a congruenței [1] [3].
2. Operațiuni de găsire a Uniunii: Motorul de închidere a congruenței efectuează eficient operațiunile de găsire a uniunii prin utilizarea compresiei căilor și a unirii după rang. Acest lucru asigură că accesarea rădăcinii unei clase de echivalență este rapidă și că îmbinarea claselor mai mici în cele mai mari este eficientă [1].
3. Detectarea echivalenței: Când solverul întâlnește egalități între termeni, motorul de închidere a congruenței verifică dacă acești termeni aparțin aceleiași clase de echivalență. Dacă nu, îmbină clasele lor, asigurându -se că toți termenii din clasa fuzionată sunt tratați ca fiind egali [3] [4].
4. Integrarea cu raționamentul boolean: motorul de închidere a congruenței este strâns integrat cu nucleul de satisfacție booleană al Z3. Ajută la propagarea egalităților și la detectarea nemulțumirii, asigurându -se că termenii egale sunt tratați în mod constant în formula [5].
5. Rezoluția conflictelor: În contextul CDCL (T) (învățarea clauzei bazate pe conflicte cu teorii), motorul de închidere a congruenței joacă un rol în soluționarea conflictelor, asigurându-se că egalitățile sunt aplicate în mod constant în timpul căutării unei atribuții satisfăcătoare sau a unei dovezi de nemulțumire [1].
În general, motorul de închidere a congruenței Z3 este esențial pentru gestionarea eficientă a egalităților și pentru a se asigura că solverul tratează în mod constant termeni echivalenți, ceea ce este esențial pentru rezolvarea formulelor complexe care implică teorii multiple.
Citări:[1] https://z3prover.github.io/papers/z3internals.html
[2] https://www.researchgate.net/publication/266654073_Z3-R_A_Z3-bazate pe_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