Я пытаюсь сделать действительно простой пример с использованием интерфейса Z3.Monad в Haskell. К сожалению, в пакете нет простого рабочего примера, поэтому я начинаю с нуля. Я также проверил, и примеры, перечисленные в пакете, работают для меня, поэтому не должно быть никаких проблем с моей установкой Z3.
Что я делаю
Эта функция не работает при запуске:
import Z3.Monad
computeTwo = evalZ3 $ do
x <- mkFreshIntVar "x"
_2 <- mkInteger 2
assert =<< mkEq x _2
fmap snd $ withModel $ \m -> fromJust <$> evalInt m x
Я получаю следующую ошибку:
uncaught exception: ErrorCall
Z3.Base.toBool: illegal `Z3_bool' value
CallStack (from HasCallStack):
error, called at src/Z3/Base.hs:3197:23 in z3-4.3.1-
JxhFvE2Tmnm1VKrfgyob6s:Z3.Base
Какой ответ ожидался
Модель должна проверить с x = 2.
Что еще я пробовал
Эквивалентный пример работает в онлайн-контролере Z3
(declare-const x Int)
(assert (= x 2))
(check-sat)
(get-model)
Предоставление ответа:
sat
(model
(define-fun x () Int
2)
)