Z3, moderniausias patenkinimo modulio teorijų (SMT) sprendimas, sukurtas „Microsoft Research“, palaiko daugybę teorijų, kurios yra labai svarbios programinės įrangos patikrinimui ir analizei. Štai keletas teorijų pavyzdžių Z3 palaiko:
- Aritmetika: tai apima ir sveikąjį, ir tikrąją aritmetiką, leidžiantį Z3 išspręsti lygtis, apimančias skaičius.
-Fiksuoto dydžio bitų vektoriai: naudinga modeliuojant skaitmenines grandines ir dvejetainius duomenis, tai yra fiksuoto ilgio bitų vektoriai.
- Išplėtimo masyvai: masyvai traktuojamos kaip funkcijos nuo indeksų iki reikšmių, leidžiančios Z3 pagrįsti duomenų struktūras.
- Duomenų tipai: Z3 palaiko samprotavimus dėl sudėtingų duomenų struktūrų, tokių kaip sąrašai, medžiai ir įrašai.
- Nepažeidžiamos funkcijos: Tai funkcijos, kurių elgesys nėra apibrėžtas, naudinga išsamiąja diegimo detalėmis.
- Kiekybiniai rodikliai: Z3 gali valdyti egzistencinius ir universalius kiekybinius rodiklius, leisdamas jam pagrįsti savybes, kurios taikomos visiems ar kai kuriems domeno elementams.
Be to, Z3 gali būti pratęstas arba naudojamas kartu su kitomis teorijomis, tokiomis kaip kardinalumas ir pseudo-Boolean nelygybė, kurios yra naudingos kombinatorinėse problemose. Tai taip pat palaiko kodavimą ir aksiomatizavimą pritaikytą teorijas, todėl ji yra universali įvairioms programinės įrangos tikrinimui ir formaliems metodams [3] [4] [9] [10].
Citatos:[1] https://theory.stanford.edu/~nikolaj/programmingz3.html
[2] https://specs.openstack.org/openstack/congress-specs/specs/rocky/alternative-engine-z3.html
[3] https://en.wikipedia.org/wiki/z3_theorem_prover
[4] https://ceur-ws.org/vol-418/paper10.pdf
[5] https://jfmc.github.io/z3-play/
[6] https://www21.in.tum.de/~boehmes/ProofRec.pdf
[7] https://microsoft.github.io/z3guide/docs/logic/intro/
[8] https://stackoverflow.com/questions/73789804/theory-of-arrays-in-z3-1-model-is-difficit-o-mandstand-do-not-know-ho
[9] https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/nbjorner-aplas11.pdf
[10] http://theory.stanford.edu/~nikolaj/z3navigate.html