Поддерживает ли Z3 v4.3+ устранение квантификатора для НЕлинейной арифметики?

Я не смог выяснить, какой тип исключения квантификатора полностью поддерживает Z3. То, что у меня есть, — это универсальная количественная формула для нелинейных терминов, вообще говоря. Я хотел бы получить эквивалентную формулу без кванторов. Возможно ли это с Z3?

Спасибо, Фридрих


person Friedrich Gretz    schedule 17.04.2013    source источник


Ответы (1)


Z3 имеет очень ограниченную поддержку исключения квантификаторов нелинейной арифметики. Более того, он не включен по умолчанию. Вот пример того, как его включить, и демонстрирующий ограничения. Он также доступен онлайн здесь.

(set-option :pp-max-depth 20) ;; set option for Z3 pretty printer
(declare-const a Real)
(assert (exists ((x Real)) (= (* x x) a )))
(apply qe)
(echo "enabling nonlinear support...")
(apply (! qe :qe-nonlinear true))
;; It is very limited, it will fail in the following example
(echo "trying a cubic polynomial...")
(assert (exists ((x Real)) (= (* x x x) a)))
(apply (! qe :qe-nonlinear true))
person Leonardo de Moura    schedule 17.04.2013
comment
Привет Лео, будет ли расширена поддержка нелинейной арифметики в ближайшем будущем? - person pad; 23.04.2013
comment
Не в ближайшем будущем. Если только кто-то не хочет работать над этим. Кстати, у нас есть все оборудование для реализации процедуры исключения квантификатора на основе САПР. - person Leonardo de Moura; 24.04.2013
comment
Спасибо, это звучит как очень интересный проект для работы. - person pad; 26.04.2013