Die Kongruenz -Engine von Z3 ist eine Schlüsselkomponente des Lösers und verantwortlich für die Aufrechterhaltung von Äquivalenzklassen von Begriffen auf der Grundlage Gleichungen. Es stellt sicher, dass wenn sich zwei Begriffe als gleichwertig befinden, sie während des gesamten Lösungsverfahrens als gleichwertig behandelt werden. So funktioniert es:
1. Initialisierung und Datenstruktur: Die Engine verwendet eine Datenstruktur, die als E-Nodes bezeichnet wird, um Begriffe in der Formel darzustellen. Jeder E-Knoten enthält Felder, die bei der Implementierung von Gewerkschafts-Find-Operationen helfen, die für die Verwaltung von Äquivalenzklassen von entscheidender Bedeutung sind. Die Engine verwendet eine Hash -Tabelle, die als Etable bekannt ist, um Funktionsanwendungen auf ihre Kongruenzwurzeln zu kartieren [1] [3].
2. Operationen für Gewerkschaftsfind: Die Kongruenzverschließung Engine führt den Operationen mit Gewerkschaftsfindungen effizient durch, indem die Pfadkomprimierung und die Gewerkschaft nach Rang verwendet werden. Dies stellt sicher, dass der Zugriff auf die Wurzel einer Äquivalenzklasse schnell ist und dass das Zusammenführen kleinerer Klassen in größere effizientes Zusammenführen [1].
3.. Äquivalenzerkennung: Wenn der Solver zwischen den Begriffen auf Gleichungen trifft, prüft die Kongruenzschließung, wenn diese Begriffe zur gleichen Äquivalenzklasse gehören. Wenn nicht, verschmelzen es ihre Klassen und stellt sicher, dass alle Begriffe in der zusammengeführten Klasse als gleich behandelt werden [3] [4].
4. Integration in Boolean Argumenting: Die Kongruenz -Clospeure -Engine ist eng in den Booleschen Erfriedigungskern von Z3 integriert. Es hilft bei der Ausbreitung von Gleichheiten und zur Erkennung von Unzufriedenheit, indem sichergestellt wird, dass gleiche Begriffe in der Formel konsequent behandelt werden [5].
5. Konfliktlösung: Im Kontext von CDCL (T) (Konfliktsteuerungsklausel mit Theorien) spielt die Kongruenzschließung eine Rolle bei der Konfliktlösung, indem sie sicherstellen der Unzufriedenheit [1].
Insgesamt ist der Kongruenz -Engine von Z3 für die effiziente Umstellung von Gleichheiten und der Sicherstellung, dass der Solver äquivalente Begriffe konsequent behandelt, was für die Lösung komplexer Formeln mit mehreren Theorien von entscheidender Bedeutung ist.
Zitate:[1] https://z3prover.github.io/papers/z3internals.html
[2] https://www.researchgate.net/publication/266654073_z3-str_a_z3-basiert_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