如何在Pythonapi中使用Z3 Context?
How to use Z3 Context in Python api?
在 C++ 中,z3::context context
生成一个新的 context.Through 这个具有新上下文的 Z3 表达式可以创建为 context.bv_const(variable_name, 16)
。
如何使用 z3 python api 完成相同的行为?
在 z3py 中,一般使用模型是通过一个 Solver
对象,该对象由一个全局上下文支持。这简化了编程,因为最终用户无需担心上下文创建的细节。来自文件:
Z3Py uses a default global context. For most applications this is sufficient.
An application may use multiple Z3 contexts. Objects created in one context
cannot be used in another one. However, several objects may be "translated" from
one context to another. It is not safe to access Z3 objects from multiple threads.
The only exception is the method `interrupt()` that can be used to interrupt() a long
computation.
因此,如果您选择这样做,确实可以在 z3py 中创建一个新的 Context
;尽管这不是通用模型。
API 的设计使得大多数(如果不是全部)方法将可选的上下文参数作为它们的最后一个参数。关于你提到的bv_const
,z3py版本是:
def z3py.BitVecSort(sz, ctx = None)
(见https://z3prover.github.io/api/html/namespacez3py.html#afbff817f0f2dbfb6b9bebd9d50598683)
如您所见,最后一个参数是可选的 ctx
参数。如果您不提供一个(这是通用的 z3py 编程模型),将使用一个全局模型。但是,只要您注意我上面引用的警告,您就可以通过自己的。 (也就是说,始终将来自不同上下文的对象分开。)
您可以在此处阅读 Context
class 详细信息:https://z3prover.github.io/api/html/classz3py_1_1_context.html
在 C++ 中,z3::context context
生成一个新的 context.Through 这个具有新上下文的 Z3 表达式可以创建为 context.bv_const(variable_name, 16)
。
如何使用 z3 python api 完成相同的行为?
在 z3py 中,一般使用模型是通过一个 Solver
对象,该对象由一个全局上下文支持。这简化了编程,因为最终用户无需担心上下文创建的细节。来自文件:
Z3Py uses a default global context. For most applications this is sufficient.
An application may use multiple Z3 contexts. Objects created in one context
cannot be used in another one. However, several objects may be "translated" from
one context to another. It is not safe to access Z3 objects from multiple threads.
The only exception is the method `interrupt()` that can be used to interrupt() a long
computation.
因此,如果您选择这样做,确实可以在 z3py 中创建一个新的 Context
;尽管这不是通用模型。
API 的设计使得大多数(如果不是全部)方法将可选的上下文参数作为它们的最后一个参数。关于你提到的bv_const
,z3py版本是:
def z3py.BitVecSort(sz, ctx = None)
(见https://z3prover.github.io/api/html/namespacez3py.html#afbff817f0f2dbfb6b9bebd9d50598683)
如您所见,最后一个参数是可选的 ctx
参数。如果您不提供一个(这是通用的 z3py 编程模型),将使用一个全局模型。但是,只要您注意我上面引用的警告,您就可以通过自己的。 (也就是说,始终将来自不同上下文的对象分开。)
您可以在此处阅读 Context
class 详细信息:https://z3prover.github.io/api/html/classz3py_1_1_context.html