Z3, un risolutore di modulo di soddisfazione all'avanguardia (SMT) sviluppato da Microsoft Research, supporta una vasta gamma di teorie cruciali per la verifica e l'analisi del software. Ecco alcuni esempi delle teorie che Z3 supporta:
- Aritmetica: questo include sia interi che aritmetica reale, consentendo a Z3 di risolvere equazioni che coinvolgono numeri.
-Vettori di bit di dimensioni fisse: utili per modellare i circuiti digitali e i dati binari, si tratta di vettori di bit con una lunghezza fissa.
- array estensivi: gli array sono trattati come funzioni dagli indici ai valori, consentendo a Z3 di ragionare sulle strutture di dati.
- Datipi: Z3 supporta il ragionamento su strutture di dati complesse come elenchi, alberi e record.
- Funzioni non interpretate: queste sono funzioni il cui comportamento non è definito, utile per astrarre i dettagli di implementazione.
- Quantifiers: Z3 è in grado di gestire i quantificatori sia esistenziali che universali, consentendogli di ragionare sulle proprietà che si applicano a tutti o ad alcuni elementi di un dominio.
Inoltre, Z3 può essere esteso o utilizzato insieme ad altre teorie, come la cardinalità e le disuguaglianze pseudo booleane, che sono utili nei problemi combinatori. Supporta anche la codifica e le teorie personalizzate assiomatizzanti, rendendolo versatile per varie applicazioni nella verifica del software e nei metodi formali [3] [4] [9] [10].
Citazioni:[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-difficult-to-understand-2-do-not-now-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