在 Haskell 中使用 Z3.Monad 时求解 x=2 失败
Solving for x=2 fails when using Z3.Monad in Haskell
我正在尝试使用 Haskell 中的 Z3.Monad 界面做一个非常基本的示例。不幸的是,这个包没有列出一个简单的、有效的例子,所以我从头开始。我也检查过,软件包中列出的示例对我有用,所以我的 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 online checker
(declare-const x Int)
(assert (= x 2))
(check-sat)
(get-model)
生成答案:
sat
(model
(define-fun x () Int
2)
)
修复者:
1) 正在更新 XCode
使用 App Store。
2) 重新安装 z3
brew uninstall z3
brew install z3
echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
echo 'export LDFLAGS="-L/usr/local/opt/openssl/lib"' >> ~/.bash_profile
echo 'export CPPFLAGS="-I/usr/local/opt/openssl/include"' >> ~/.bash_profile
最后三个是 brew install
流程的具体说明。
感谢大家的帮助。
我正在尝试使用 Haskell 中的 Z3.Monad 界面做一个非常基本的示例。不幸的是,这个包没有列出一个简单的、有效的例子,所以我从头开始。我也检查过,软件包中列出的示例对我有用,所以我的 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 online checker
(declare-const x Int)
(assert (= x 2))
(check-sat)
(get-model)
生成答案:
sat
(model
(define-fun x () Int
2)
)
修复者:
1) 正在更新 XCode
使用 App Store。
2) 重新安装 z3
brew uninstall z3
brew install z3
echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
echo 'export LDFLAGS="-L/usr/local/opt/openssl/lib"' >> ~/.bash_profile
echo 'export CPPFLAGS="-I/usr/local/opt/openssl/include"' >> ~/.bash_profile
最后三个是 brew install
流程的具体说明。
感谢大家的帮助。