如果仅执行(检查星期六),则标记为不坐。但是,如果您尝试(get-model),它不会标记,并且错误会立即出现。有什么办法可以标记我而不会出错?
正如帕特里克(Patrick)所说,很难理解您的要求。请提供一些代码片段,以显示您获得的内容和希望实现的内容。
说了这么多,我会大胆地猜测您处于求解器为unsat
的情况,即(check-sat)
返回unsat
响应。但是,脚本的下一行有(get-model)
,由于没有模型,因此当然会出错。而且您想要一种避免错误消息的方法。
这是SMTLib命令语言的已知限制:不幸的是,您无法以编程方式检查命令的输出。解决此类问题的常用方法是与求解器建立“实时”连接(通常以文本管道的形式),并在发出(check-sat)
之后读取一行,然后根据响应以编程方式继续。这就是大多数基于SMT求解器构建的系统的工作方式。
或者,您可以使用其他语言(C / C ++ / Java / Python / Haskell ..)的高级API并以这种方式编写z3;并使用宿主语言的功能来指导交互。这需要您在SMTLib之上学习另一个接口,但是对于这种技术的认真使用,您可能不想将自己限制为纯SMTLib接口。
另请参见此答案以进行相关讨论:Executing get-model or unsat-core depending on solver's decision
希望这可以解决您的问题,尽管从您的问题中很难确定这是否是您正在得到的。