Z3s kongruenslukkingsmotor er en nøkkelkomponent i løseren, som er ansvarlig for å opprettholde ekvivalensklasser av vilkår basert på likheter. Det sikrer at hvis to begreper blir funnet å være like, blir de behandlet som likeverdige gjennom løsningsprosessen. Slik fungerer det:
1. Initialisering og datastruktur: Motoren bruker en datastruktur som kalles e-noder for å representere termer i formelen. Hver e-node inneholder felt som hjelper til med å implementere unionsfinningsoperasjoner, som er avgjørende for å håndtere ekvivalensklasser. Motoren bruker et hasjbord, kjent som en etable, for å kartlegge funksjonsapplikasjoner til deres kongruenslukking av røtter [1] [3].
2. Union-Find-operasjoner: Kongruensavslutningsmotoren utfører unions-Finn-operasjoner effektivt ved å bruke banekomprimering og union etter rang. Dette sikrer at tilgang til roten til en ekvivalensklasse er rask og at å slå sammen mindre klasser til større er effektiv [1].
3. Ekvivalensdeteksjon: Når løseren møter likheter mellom begrepene, sjekker kongruenslukkingsmotoren om disse begrepene tilhører samme ekvivalensklasse. Hvis ikke, fusjonerer det klassene deres, og sikrer at alle vilkår i den sammenslåtte klassen blir behandlet som like [3] [4].
4. Integrering med boolsk resonnement: Kongruenslukkingsmotoren er tett integrert med den boolske tilfredsstillende kjernen til Z3. Det hjelper med å forplante likheter og oppdage utilfredshet ved å sikre at like vilkår konsekvent blir behandlet over formelen [5].
5. Konfliktløsning: I sammenheng med CDCL (t) (konfliktdrevet klausullæring med teorier) spiller kongruenslukkingsmotoren en rolle i konfliktløsning ved å sikre at likheter konsekvent blir brukt under søket etter et tilfredsstillende oppdrag eller et bevis av utilfredshet [1].
Totalt sett er Z3s kongruenslukkingsmotor avgjørende for effektivt å håndtere likheter og sikre at løseren behandler tilsvarende termer konsekvent, noe som er avgjørende for å løse komplekse formler som involverer flere teorier.
Sitasjoner:[1] https://z3prover.github.io/papers/z3internals.html
[2] https://www.researchgate.net/publication/266654073_z3-str_a_z3-based_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