Показать количественную формулу - PullRequest
3 голосов
/ 15 ноября 2011

как мне отобразить результат исключения квантификатора?
z3, кажется, доволен следующим вводом

(set-option :elim-quantifiers true)
(declare-fun y () Real)
(simplify (exists ((x Real)) (>= x y)))

но возвращает его так же, как вывод.

Спасибо

1 Ответ

2 голосов
/ 15 ноября 2011

Z3 3.x имеет новый интерфейс для формата ввода SMT-LIB 2.0.В новом интерфейсе команда simplify не является «зонтиком» для всех упрощений и этапов предварительной обработки, доступных в Z3.Подход «все», используемый в Z3 2.x, имел несколько проблем.Итак, в Z3 3.x мы начали использовать детальный подход, где пользователь может указать тактику / стратегию для решения и / или упрощения формул.Например, можно написать:

(declare-const x Int)
(assert (not (or (<= x 0) (<= x 2))))
(apply (and-then simplify propagate-bounds))

Эта новая инфраструктура работает.Например, в Z3 3.2 нет команд / тактик для устранения квантификаторов в новом интерфейсе.Команды / тактика устранения квантификаторов будут доступны в Z3 3.3.В то же время вы можете использовать старый интерфейс SMT-LIB для устранения квантификаторов.Необходимо указать параметр командной строки -smtc, чтобы заставить Z3 использовать старый интерфейс.Более того, старый интерфейс не полностью совместим с SMT-LIB 2.0.Итак, вы должны написать:

(set-option ELIM_QUANTIFIERS true)
(declare-fun y () Real)
(simplify (exists ((x Real)) (>= x y)))
...