Z3, một bộ giải Modulo (SMT) hiện đại (SMT) được phát triển bởi Microsoft Research, hỗ trợ một loạt các lý thuyết rất quan trọng để xác minh và phân tích phần mềm. Dưới đây là một số ví dụ về các lý thuyết hỗ trợ Z3:
- Số học: Điều này bao gồm cả số nguyên và số học thực, cho phép Z3 giải các phương trình liên quan đến số.
-Các vectơ bit có kích thước cố định: Hữu ích cho việc mô hình hóa các mạch kỹ thuật số và dữ liệu nhị phân, đây là các vectơ của các bit có độ dài cố định.
- Mảng mở rộng: Mảng được coi là hàm từ các chỉ số đến giá trị, cho phép Z3 lý luận về cấu trúc dữ liệu.
- Kiểu dữ liệu: Z3 hỗ trợ lý luận về các cấu trúc dữ liệu phức tạp như danh sách, cây và hồ sơ.
- Các chức năng không được giải thích: Đây là các chức năng mà hành vi không được xác định, hữu ích để trừu tượng hóa các chi tiết thực hiện.
- Định lượng: Z3 có thể xử lý cả định lượng hiện sinh và phổ quát, cho phép nó lý luận về các thuộc tính áp dụng cho tất cả hoặc một số yếu tố của một miền.
Ngoài ra, Z3 có thể được mở rộng hoặc sử dụng kết hợp với các lý thuyết khác, chẳng hạn như Cardinality và Pseudo-Boolean bất bình đẳng, rất hữu ích trong các vấn đề kết hợp. Nó cũng hỗ trợ mã hóa và tiên đề các lý thuyết tùy chỉnh, làm cho nó linh hoạt cho các ứng dụng khác nhau trong xác minh phần mềm và phương pháp chính thức [3] [4] [9] [10].
Trích dẫn:[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/ ~
[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-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