Я установил Z3 версии 4.1 и пытаюсь программно использовать его в java-приложении. Мое приложение взаимодействует с Z3 через ProcessBuilder. Версия Z3 проверяется как 4.1 с помощью аргумента командной строки /version.
Однако Z3 не принимает отрицательные константы как часть выражений. Когда я пытаюсь указать отрицательные целые числа, я получаю следующее сообщение:
(error "line 4 column 31: unknown constant -1")
Это ввод, который я предоставляю Z3:
(push)
(declare-fun y () Int )
(define-fun x () Int y )
(assert (and (<= y 1000) (>= y -1) ) )
(assert (= x 42) )
(check-sat)
(pop)
Я использую следующие аргументы для создания экземпляра Z3:
Z3 /smt2 /in /t:2
Любая помощь приветствуется. Заранее спасибо.
Попробуйте (- 1)
. См. нижнюю часть страницы 38 в http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2017-07-18.pdf.
Ну версия 4.8.1 новее 4.1; похоже, что в какой-то момент z3 начал поддерживать синтаксис -1
; но это расширение стандарта SMTLib. Если у вас нет другой причины, я бы рекомендовал использовать синтаксис (- 1)
, который гарантируется стандартом SMTLib и переносим между решателями. (Например, я почти уверен, что CVC4 не примет -1
.)
Итак, вы говорите, что семантика изменилась с версии 4.8.1, верно? В версии 4.8.4 отрицательные целые числа принимаются в формате, который я указал в своем вопросе.