微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解释 z3 API 求解器中 z3.solve() 函数的输出?

如何解决如何解释 z3 API 求解器中 z3.solve() 函数的输出?

我是 z3 smt 求解器的新手。我正在使用 python API z3py。

我有一个关于 z3.solve() 函数输出快速问题。当我在某些约束上调用 z3.solve() 并得到 [] 作为输出时,这意味着什么? 也可以有人给我推荐一个好的文档

解决方法

您确实需要提供导致这种情况的输入,因为这实际上取决于您的约束。但这是说明这种行为的最简单方法:

from z3 import *

z3.solve([])

当我运行这个时,我得到:

[]

我想这就是你所看到的。这实质上意味着您的系统对于所有变量都是可满足的;即,要么您没有约束,要么它们不以任何特定方式约束模型。在上面,没有约束,所以我们有“平凡”模型。如果你做一些更有趣的事情,说:

from z3 import *

a,b = Ints('a b')
z3.solve([a > b,b > 3])

然后你会看到一个更有趣的模型:

[b = 4,a = 5]

总体上有大量关于 z3、z3py 和 SMTLib 的文档(描述了所有 SMT 求解器使用的底层语言):

请注意,z3 也可以从许多其他语言编写脚本,包括 C、C++、Java、Scala 和 Haskell 等等。通常,使用高级语言比直接使用 SMTLib 或基本的 C 绑定要容易得多。 Python 和 Haskell(在我看来)提供了最高级别的抽象来简化 z3 编程,但是您应该选择哪种环境实际上取决于您的总体目标是什么。 (虽然大多数绑定支持通用约束编程,但它们具有不同级别的自动化和对不同 z3 设施的访问。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。