Z3: n kongruenssin sulkemismoottori on avainkomponentti ratkaisijalle, joka on vastuussa vastaavuuksien perusteella vastaavien termien luokkien ylläpitämisestä. Se varmistaa, että jos kahden termin todetaan olevan yhtä suurta, niitä pidetään vastaavina koko ratkaisuprosessin ajan. Näin se toimii:
1. Alustus- ja tietorakenne: moottori käyttää E-Nodes-nimistä tietorakennetta edustamaan kaavan termejä. Jokainen e-solmu sisältää kenttiä, jotka auttavat toteuttamaan ammattiliittojen löytämistä, jotka ovat tärkeitä vastaavuusluokkien hallinnassa. Moottori käyttää hash -taulukkoa, joka tunnetaan ETable -nimellä, kartoittaakseen toimintosovelluksia niiden kongruenssin sulkemisjuuriin [1] [3].
2 Tämä varmistaa, että ekvivalenssiluokan juuren käyttäminen on nopeaa ja että pienempien luokkien yhdistäminen suurempiin luokkiin on tehokasta [1].
3. Vekvivalenteen havaitseminen: Kun ratkaisija kohtaa ehtojen väliset tasa -arvot, kongruenssin sulkemismoottori tarkistaa, kuuluvatko nämä termit samaan vastaavuusluokkaan. Jos ei, se yhdistää heidän luokansa varmistaen, että kaikkia sulautuneen luokan termejä pidetään tasa -arvoisina [3] [4].
4. Integraatio Boolenin päättelyyn: Yhteenveto -sulkemismoottori on tiiviisti integroitu Z3: n Boolen tyydytysydinyn kanssa. Se auttaa lisäämään tasa -arvoisuuksia ja havaitsemaan tyydyttämättömyyden varmistamalla, että yhtäläiset termit käsitellään jatkuvasti kaavan välillä [5].
5. Konfliktin ratkaisu: CDCL (t) (konfliktivetoinen lauseke teorioiden oppiminen) kongruenssin sulkemismoottorilla on rooli konfliktien ratkaisussa varmistamalla, että tasa-arvoisuuksia sovelletaan johdonmukaisesti tyydyttävän tehtävän tai todistuksen etsinnän aikana tai todisteita epätyydyttämättömyydestä [1].
Kaiken kaikkiaan Z3: n kongruenssin sulkemismoottori on välttämätöntä tasapainotusten tehokkaaseen käsittelyyn ja sen varmistamiseen, että ratkaisija käsittelee vastaavia termejä johdonmukaisesti, mikä on kriittistä monimutkaisten kaavojen ratkaisemiseksi, joihin liittyy useita teorioita.
Viittaukset:[1] https://z3prover.github.io/papers/z3internals.html
.
[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/programming3.html
[7] https://arxiv.org/pdf/2209.03398.pdf
[8] http://algos.inesc.pt/projects/nanotime/ref12.pdf