Klíčovou součástí řešiče je z3 zodpovědná za udržování tříd pojmů založených na rovnicích z3. Zajišťuje, že pokud jsou shledány dva termíny, které jsou stejné, jsou v průběhu procesu řešení považovány za ekvivalentní. Takto to funguje:
1. Inicializace a struktura dat: Motor používá datovou strukturu zvanou e-uzly k reprezentaci termínů ve vzorci. Každý e-uzel obsahuje pole, která pomáhají při implementaci operací s názvem Unie, které jsou zásadní pro správu tříd ekvivalence. Motor používá hashovací tabulku, známou jako eTable, k mapování funkcí aplikací na jejich kořeny uzavření kongruence [1] [3].
2. Operace a zjišťování odborů: Motor uzavření kongruence provádí efektivně operace s názvem Union-Find pomocí komprese cesty a spojení podle hodnosti. Tím je zajištěno, že přístup ke kořenu třídy ekvivalence je rychlý a že sloučení menších tříd do větších je efektivní [1].
3. detekce ekvivalence: Když řešitel narazí na rovnosti mezi termíny, zavírací motor Kongruence zkontroluje, zda tyto podmínky patří do stejné třídy ekvivalence. Pokud ne, spojuje jejich třídy a zajišťuje, že se všemi termíny ve sloučené třídě jsou považovány za rovnocenné [3] [4].
4. Integrace s booleovským uvažováním: Engine Congruence je pevně integrován s jádrem Boolean Consuptiability of Z3. Pomáhá při šíření rovností a detekováním neuspokojivosti zajištěním toho, že se stejné pojmy budou trvale léčit napříč vzorem [5].
5. Usnesení konfliktů: V souvislosti s CDCL (T) (učení klauzule s teoriemi) hraje motor Kongruence roli v řešení konfliktů tím neuspokojivosti [1].
Celkově je motor uzavření kongruence Z3 nezbytný pro efektivní manipulaci s rovností a zajištění toho, aby řešitel důsledně zacházel s ekvivalentními pojmy, což je rozhodující pro řešení složitých vzorců zahrnujících více teorií.
Citace:[1] https://z3prover.github.io/papers/Z3Internals.html
[2] https://www.researchgate.net/publication/266654073_Z3-STR_A_Z3 založeno na_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