运行以下代码时:
answer = do
-- elts is a list of the values we're trying to satisfy for
x <- doSomething
{- ... constraints and other stuff ... -}
query $ do cs <- checkSat
case cs of
Sat -> getValue x
Unsat -> error "Solver couldn't find a satisfiable solution"
DSat{} -> error "Unexpected dsat result!"
Unk -> error "Solver returned unknown!"
runSMT answer
-- output: one single satisfying solution
SBV/Z3 返回一个独特的令人满意的解决方案。如何获得所有(可能多达 n 个)令人满意的解决方案的列表?我知道sat
与allSat
运行 hello-world 示例时的对比,但我不确定如何将其插入到上面更复杂的上下文中。我也读过关于extractModels
(注意复数)但文档并不完全丰富。
或者,有没有办法为同一问题获得“随机”令人满意的解决方案,而不是总是相同的解决方案?