Z3 , также известный как средство доказательства теорем Z3 , представляет собой решатель выполнимости по модулю теорий (SMT), разработанный корпорацией Microsoft . [2]
Z3 был разработан в группе Research in Software Engineering (RiSE) в Microsoft Research Redmond и нацелен на решение проблем, возникающих при проверке программного обеспечения и анализе программ . Z3 поддерживает арифметику, битовые векторы фиксированного размера, экстенсиональные массивы, типы данных, неинтерпретируемые функции и квантификаторы . Его основными приложениями являются расширенная статическая проверка , генерация тестовых случаев и абстракция предикатов . [ требуется ссылка ]
Z3 был открыт в начале 2015 года. [3] Исходный код лицензирован по лицензии MIT и размещен на GitHub . [4] Решатель может быть создан с помощью Visual Studio , make-файла или CMake и работает на Windows , FreeBSD , Linux и macOS .
Формат ввода по умолчанию для Z3 — SMTLIB2 . Он также официально поддерживает привязки для нескольких языков программирования , включая C , C++ , Python , .NET , Java и OCaml . [5]
В этом примере утверждения пропозициональной логики проверяются с использованием функций для представления предложений a и b. Следующий скрипт Z3 проверяет, что :
(declare-fun a () Bool)(declare-fun b () Логический)(утверждать (не (= (не (и ab)) (или (не а)(не b)))))(проверка-сб)
Результат:
неудовлетворенный
Обратите внимание, что скрипт утверждает отрицание интересующего нас предложения. Неудовлетворенный результат означает, что отрицаемое предложение невыполнимо, тем самым доказывая желаемый результат ( закон Де Моргана ).
Следующий скрипт решает два заданных уравнения, находя подходящие значения для переменных a и b:
(объявить-константу Int)(объявить-константу b Int)(утверждаем (= (+ ab) 20))(утверждаем (= (+ а (* 2 б)) 10))(проверка-сб)(получить-модель)
Результат:
сидел(модель (define-fun b () Целое -10) (define-fun a () Целое 30))
В 2015 году Z3 получил премию Programming Languages Software Award от ACM SIGPLAN . [6] [7] В 2018 году Z3 получил премию Test of Time Award от Европейской совместной конференции по теории и практике программного обеспечения (ETAPS). [8] Исследователи Microsoft Николай Бьёрнер и Леонардо де Моура получили премию Herbrand Award 2019 за выдающийся вклад в автоматизированное рассуждение в знак признания их работы по продвижению доказательства теорем с помощью Z3. [9] [10]