如果我在(get-model)之后标记它?

问题描述 投票:0回答:1

如果仅执行(检查星期六),则标记为不坐。但是,如果您尝试(get-model),它不会标记,并且错误会立即出现。有什么办法可以标记我而不会出错?

z3 smt
1个回答
0
投票

正如帕特里克(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

希望这可以解决您的问题,尽管从您的问题中很难确定这是否是您正在得到的。

© www.soinside.com 2019 - 2024. All rights reserved.