Z3 的异常 运行 最小化 Data.SBV 的示例
Exception from Z3 running minimize example for Data.SBV
当运行 example for the optimize function in the Data.SBV library for Haskell:
problem :: Goal
problem = optimize Lexicographic $ do [x1, x2] <- mapM sReal ["x1", "x2"]
constrain $ x1 + x2 .<= 10
constrain $ x1 - x2 .>= 3
constrain $ 5*x1 + 4*x2 .<= 35
constrain $ x1 .>= 0
constrain $ x2 .>= 0
maximize "goal" $ 5 * x1 + 6 * x2
main = optimize Lexicographic problem
我收到以下错误:
*** Exception:
*** Data.SBV: Unexpected response from the solver.
*** Context : set-option
*** Sent : (set-option :pp.decimal false)
*** Expected: success
*** Received: unsupported
*** success
CallStack (from HasCallStack):
error, called at ./Data/SBV/Control/Utils.hs:590:9 in sbv-7.3-35rX062AGHeFmuyHxSBaTE:Data.SBV.Control.Utils
类似下面的代码:
test = optimize Lexicographic $ do
x <- sInteger "x"
y <- sInteger "y"
maximize "goal" $ x + 2 * y
产生错误:
*** Exception:
*** Data.SBV: Unexpected response from the solver.
*** Context : getModel
*** Sent : (get-value (s0))
*** Expected: a value binding for kind: SInteger
*** Received: unsupported
*** ((s0 0))
CallStack (from HasCallStack):
error, called at ./Data/SBV/Control/Utils.hs:590:9 in sbv-7.3-35rX062AGHeFmuyHxSBaTE:Data.SBV.Control.Utils
此错误也会发生在 minimize
组合子作为最后一个表达式时。
我正在使用 GHC 版本 8.0.2,堆栈版本 1.5 和 SBV 版本 7.3
我使用 Z3 作为我的求解器,它是 MacOS 上的 4.5.1 64 位版本 运行。
调用 sat
和 prove
按预期工作。有任何想法吗?谢谢!
您很可能使用的是旧版本的 Z3。 SBV 中的优化功能依赖于 Z3 的一些尚未正式发布的功能。你能从这里下载一个吗:
https://github.com/Z3Prover/bin/tree/master/nightly
并试一试?
(Z3 有一张公开票,可以针对此问题发布新版本,但尚不清楚他们何时会解决这个问题:https://github.com/Z3Prover/z3/issues/1231)
当运行 example for the optimize function in the Data.SBV library for Haskell:
problem :: Goal
problem = optimize Lexicographic $ do [x1, x2] <- mapM sReal ["x1", "x2"]
constrain $ x1 + x2 .<= 10
constrain $ x1 - x2 .>= 3
constrain $ 5*x1 + 4*x2 .<= 35
constrain $ x1 .>= 0
constrain $ x2 .>= 0
maximize "goal" $ 5 * x1 + 6 * x2
main = optimize Lexicographic problem
我收到以下错误:
*** Exception:
*** Data.SBV: Unexpected response from the solver.
*** Context : set-option
*** Sent : (set-option :pp.decimal false)
*** Expected: success
*** Received: unsupported
*** success
CallStack (from HasCallStack):
error, called at ./Data/SBV/Control/Utils.hs:590:9 in sbv-7.3-35rX062AGHeFmuyHxSBaTE:Data.SBV.Control.Utils
类似下面的代码:
test = optimize Lexicographic $ do
x <- sInteger "x"
y <- sInteger "y"
maximize "goal" $ x + 2 * y
产生错误:
*** Exception:
*** Data.SBV: Unexpected response from the solver.
*** Context : getModel
*** Sent : (get-value (s0))
*** Expected: a value binding for kind: SInteger
*** Received: unsupported
*** ((s0 0))
CallStack (from HasCallStack):
error, called at ./Data/SBV/Control/Utils.hs:590:9 in sbv-7.3-35rX062AGHeFmuyHxSBaTE:Data.SBV.Control.Utils
此错误也会发生在 minimize
组合子作为最后一个表达式时。
我正在使用 GHC 版本 8.0.2,堆栈版本 1.5 和 SBV 版本 7.3 我使用 Z3 作为我的求解器,它是 MacOS 上的 4.5.1 64 位版本 运行。
调用 sat
和 prove
按预期工作。有任何想法吗?谢谢!
您很可能使用的是旧版本的 Z3。 SBV 中的优化功能依赖于 Z3 的一些尚未正式发布的功能。你能从这里下载一个吗:
https://github.com/Z3Prover/bin/tree/master/nightly
并试一试?
(Z3 有一张公开票,可以针对此问题发布新版本,但尚不清楚他们何时会解决这个问题:https://github.com/Z3Prover/z3/issues/1231)