stringtranslate.com

Доказательство теоремы Z3

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]

Смотрите также

Ссылки

  1. ^ "Выпуск 4.13.3". 11 октября 2024 г. Получено 27 октября 2024 г.
  2. ^ "Использование решателя SMT Z3" (PDF) . Архивировано из оригинала (PDF) 2020-11-17 . Получено 2019-12-01 .
  3. ^ «Временная шкала Visual Studio от Microsoft и средство доказательства теорем Z3, Google Cloud Launcher, Fresco от Facebook — дайджест новостей SD Times: 27 марта 2015 г.». 27 марта 2015 г.
  4. ^ "GitHub - Z3Prover/z3: The Z3 Theorem Prover". 1 декабря 2019 г. – через GitHub.
  5. ^ Бьёрнер, Николай; де Моура, Леонардо; Нахмансон, Лев; Винтерштайгер, Кристоф (2019). "Программирование Z3". Программирование Z3 . Архивировано из оригинала 9 февраля 2023 г. . Получено 21 мая 2023 г. .
  6. ^ «Премия за лучшее программное обеспечение для языков программирования». www.sigplan.org .
  7. ^ Доказатель теорем Microsoft Z3 выигрывает награду
  8. ^ Премия ETAPS 2018 «Испытание временем»
  9. ^ Внутренняя магия, стоящая за доказательством теоремы Z3 - Microsoft Research
  10. ^ Премия Эрбрана

Дальнейшее чтение

Внешние ссылки