Пожалуйста, обратите внимание на следующие утверждения.Получение символических значений с использованием Z3
у: = 10
г: = х + у
После того, как эти два утверждения выполняются "г" имеет значение "Х + 10", где "х" представляет символическое стоимость; такие символические значения важны при проверке программы - например, для вычисления характеристик пути с использованием самого слабого метода предсказания Дейкстра.
Теперь рассмотрим следующий код для Z3.
(declare-const x Int)
(declare-const y Int)
(declare-const z Int)
(assert (= y 10))
(assert (= z (+ x y)))
(check-sat)
(get-value (z))
Он производит следующий вывод, поскольку он рассмотрит интерпретацию, где «у» имеет 10 и «х» имеет значение 0.
sat
((z 10))
Есть ли какой-нибудь способ, которым я могу сделать Z3 производить выход «x + 10»? то есть, я заинтересован в получении символических значений в терминах переменных, которые не были созданы с какими-либо конкретными значениями.
«в терминах переменных, которые не были экземпляры с какими-либо конкретными значениями»: Вы имеете в виду без ограничений переменных или переменных, которые являются постоянными? Если вы просто хотите обрабатывать константу, это можно сделать простой заменой. – Tushar
Поскольку вычисление слабого предварительного условия связано в основном с заменой - я думаю, что замена должна выполнять эту работу. Но, как сказал Хуан Оспина, нет ли альтернативы в Z3-SMT-LIB, соответствующей его коду в Z3Py? – LKB
Я не уверен в этом. Однако я считаю, что C++ API имеет более гибкие возможности, чем Z3-SMT-LIB. – Tushar