首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Z3py上下文使用

Z3py上下文使用
EN

Stack Overflow用户
提问于 2022-09-03 23:14:41
回答 1查看 50关注 0票数 0

我不明白如何在Z3/Z3py中使用上下文。下面的示例返回context mismatch,但是如果我将And更改为==Implies,它会工作,如果从x声明中删除上下文,则会得到z3.z3types.Z3Exception: Value cannot be converted into a Z3 Boolean value。为什么?我知道在这个简单的例子中我不需要上下文,但是我需要并行化一个使用Z3py的更复杂的脚本。

代码语言:javascript
复制
from z3 import *

ctx=Context()
solver=Solver(ctx=ctx)
x=Bool('x',ctx=ctx)
solver.add(And(x,x))
print(solver.check())
代码语言:javascript
复制
Traceback (most recent call last):
  File "minimal_test.py", line 6, in <module>
    solver.add(And(x,x))
  File "[...].local/lib/python3.7/site-packages/z3/z3.py", line 1727, in And
    _z3_assert(ctx_args is None or ctx_args == ctx, "context mismatch")
  File "[...].local/lib/python3.7/site-packages/z3/z3.py", line 96, in _z3_assert
    raise Z3Exception(msg)
z3.z3types.Z3Exception: context mismatch
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-04 01:17:05

这个程序,正如你在你的问题中所提出的,对我来说运行的很好,产生了sat。所以,我不知道你为什么要看到你看到的东西,除非你有一个非常老的z3版本,它有一个bug或什么的。(Github主版为4.11.2;我使用的是4.9.2;您有什么版本?)

如果从x的声明中删除上下文,您将得到"z3.z3types.Z3Exception: Value不能转换为Z3布尔值“,因为x是在全局上下文中创建的,但是解决程序是在特定的上下文中创建的。通常,如果您有多个上下文,那么只需使用该上下文声明所有变量。(默认情况下,它们都将使用全局上下文;如果没有显式声明,则可以使用全局上下文。)像And/Or/Implies这样的函数只需使用其参数的上下文来确定要在哪个上下文中创建表达式。

所以,你在问题中给出的程序是正确使用上下文的方法。我不清楚为什么你会失败;也许你有很多版本的这个程序,不知怎么搞不懂哪一个是哪一个?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73595923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档