Z3, найсучасніший вирішувач модульних теорій з задоволенням (SMT), розроблений Microsoft Research, підтримує широкий спектр теорій, які мають вирішальне значення для перевірки та аналізу програмного забезпечення. Ось кілька прикладів підтримує теорії Z3:
- Арифметика: Сюди входить як ціле, так і справжнє арифметика, що дозволяє Z3 вирішити рівняння, що включають числа.
-Біт-вектори фіксованого розміру: корисно для моделювання цифрових схем та бінарних даних, це вектори бітів з фіксованою довжиною.
- Розширені масиви: масиви розглядаються як функції від індексів до значень, що дозволяє Z3 міркувати про структури даних.
- DataTypes: Z3 підтримує міркування про складні структури даних, такі як списки, дерева та записи.
- Неінтерпретировані функції: Це функції, поведінка яких не визначається, корисні для абстрагування деталей реалізації.
- Квантизатори: Z3 може обробляти як екзистенційні, так і універсальні кількісні показники, що дозволяє йому міркувати про властивості, що застосовуються до всіх або деяких елементів домену.
Крім того, Z3 можна розширювати або використовувати спільно з іншими теоріями, такими як кардинальність та псевдо-кулянські нерівності, які корисні для комбінаторних проблем. Він також підтримує кодування та аксіоматизуючі спеціальні теорії, що робить його універсальним для різних програм у перевірці програмного забезпечення та формальних методах [3] [4] [9] [10].
Цитати:[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-undrast-2-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