Z3 , también conocido como demostrador de teoremas Z3 , es un solucionador de teorías de módulo de satisfacibilidad (SMT) desarrollado por Microsoft . [2]
Z3 fue desarrollado en el grupo de Investigación en Ingeniería de Software (RiSE) en Microsoft Research Redmond y está orientado a resolver problemas que surgen en la verificación de software y el análisis de programas . Z3 admite aritmética, vectores de bits de tamaño fijo, matrices extensivas, tipos de datos, funciones no interpretadas y cuantificadores . Sus principales aplicaciones son la comprobación estática extendida , la generación de casos de prueba y la abstracción de predicados . [ cita requerida ]
Z3 se convirtió en código abierto a principios de 2015. [3] El código fuente tiene licencia MIT y está alojado en GitHub . [4] El solucionador se puede crear utilizando Visual Studio , un makefile o utilizando CMake y se ejecuta en Windows , FreeBSD , Linux y macOS .
El formato de entrada predeterminado para Z3 es SMTLIB2 . También tiene enlaces admitidos oficialmente para varios lenguajes de programación , incluidos C , C++ , Python , .NET , Java y OCaml . [5]
En este ejemplo, se comprueban las afirmaciones de lógica proposicional mediante funciones para representar las proposiciones a y b. El siguiente script Z3 comprueba si :
(declarar-fun a() Bool)(declarar-fun b() Bool)(afirmar (no (= (no (y ab)) (o (no a)(no b)))))(cheque-sat)
Resultado:
insatisfecho
Nótese que el guión afirma la negación de la proposición de interés. El resultado no satisfactorio significa que la proposición negada no es satisfacible, lo que demuestra el resultado deseado ( ley de De Morgan ).
El siguiente script resuelve las dos ecuaciones dadas, encontrando valores adecuados para las variables a y b:
(declarar-const un Int)(declarar-const b Int)(afirmar (= (+ ab) 20))(afirmar (= (+ a (* 2 b)) 10))(cheque-sat)(obtener modelo)
Resultado:
se sentó(modelo (define-fun b() Int -10) (define-fun a() Int 30))
En 2015, Z3 recibió el premio Programming Languages Software Award de ACM SIGPLAN . [6] [7] En 2018, Z3 recibió el premio Test of Time Award de las European Joint Conferences on Theory and Practice of Software (ETAPS). [8] Los investigadores de Microsoft Nikolaj Bjørner y Leonardo de Moura recibieron el premio Herbrand 2019 por contribuciones destacadas al razonamiento automatizado en reconocimiento a su trabajo en el avance de la demostración de teoremas con Z3. [9] [10]