繁体   English   中英

如何在 Python api 中使用 Z3 上下文?

[英]How to use Z3 Context in Python api?

在 C++ 中, z3::context context生成一个新的上下文。通过这个具有新上下文的 Z3 表达式可以创建为context.bv_const(variable_name, 16)

如何使用 z3 python api 完成相同的行为?

在 z3py 中,一般使用 model 是通过一个Solver object,它由一个全局上下文支持。 这简化了编程,因为最终用户不必担心上下文创建的细节。 从文件:

  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 虽然这不是 model 的一般用途。

API 的设计使得大多数(如果不是全部)方法都将可选的上下文参数作为其最后一个参数。 关于您提到的bv_const ,z3py 版本是:

def z3py.BitVecSort(sz, ctx = None)

(见https://z3prover.github.io/api/html/namespacez3py.html#afbff817f0f2dbfb6b9bebd9d50598683

如您所见,最后一个参数是可选的ctx参数。 如果您不提供一个(这是通用的 z3py 编程模型),则将使用一个全局的。 但是,您可以自己传递,只要您注意我上面引用的警告。 (也就是说,始终将来自不同上下文的对象分开。)

You can read the Context class details here: https://z3prover.github.io/api/html/classz3py_1_1_context.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM