Z3:将 Z3py 表达式转换为 SMT 您所在的位置:网站首页 为我z3 Z3:将 Z3py 表达式转换为 SMT

Z3:将 Z3py 表达式转换为 SMT

2024-05-26 10:26| 来源: 网络整理| 查看: 265

给定 Z3py 中的表达式,我可以将其转换为 SMT-LIB2 语言吗? (因此我可以将此 SMT-LIB2 表达式提供给支持 SMT-LIB2 的其他 SMT 求解器)

如果可行,请举一个例子。

非常感谢。

最佳答案

我们可以使用 C API Z3_benchmark_to_smtlib_string。 C API 中的每个函数都可以在 Z3Py 中使用。此函数最初用于转储 SMT 1.0 格式的基准,它早于 SMT 2.0。这就是为什么它有一些看似不必要的参数。现在,默认情况下,它将以 SMT 2.0 格式显示基准测试。输出不是人类可读的。 我们可以编写如下Python函数,以方便使用:

def toSMT2Benchmark(f, status="unknown", name="benchmark", logic=""): v = (Ast * 0)() return Z3_benchmark_to_smtlib_string(f.ctx_ref(), name, logic, status, "", 0, v, f.as_ast())

这是一个使用它的小示例(也可以在线获取 here )

a = Int('a') b = Int('b') f = And(Or(a > If(b > 0, -b, b) + 1, a 0) print toSMT2Benchmark(f, logic="QF_LIA")

关于Z3:将 Z3py 表达式转换为 SMT-LIB2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14628279/



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有