gpt4 book ai didi

Z3:将 Z3py 表达式从 Solver 对象转换为 SMT-LIB2

转载 作者:行者123 更新时间:2023-12-04 13:35:12 26 4
gpt4 key购买 nike

这个问题非常类似于:Z3: convert Z3py expression to SMT-LIB2?

是否可以从 Solver 对象生成 SMT-LIB2 输出?

最佳答案

Solver 类具有名为 assertions() 的方法。它将断言的所有公式返回到给定的求解器中。提取断言后,我们可以使用与上一个问题相同的方法。这是对

的快速修改
def toSMT2Benchmark(f, status="unknown", name="benchmark", logic=""):
v = (Ast * 0)()
if isinstance(f, Solver):
a = f.assertions()
if len(a) == 0:
f = BoolVal(True)
else:
f = And(*a)
return Z3_benchmark_to_smtlib_string(f.ctx_ref(), name, logic, status, "", 0, v, f.as_ast())

这是一个例子(also available online at here)

s = Solver()
print toSMT2Benchmark(s, logic="QF_LIA")
a, b = Ints('a b')
s.add(a > 1)
s.add(Or(a < 1, b < 2))
print toSMT2Benchmark(s, logic="QF_LIA")

编辑 我们可以使用以下脚本以 SMTLIB 1.x 格式显示输出(也可在线获得 here)。请注意,SMTLIB 1.x 非常有限,有几个功能不受支持。我们还强烈建议所有用户迁移到 SMTLIB 2.x。

def toSMTBenchmark(f, status="unknown", name="benchmark", logic=""):
v = (Ast * 0)()
if isinstance(f, Solver):
a = f.assertions()
if len(a) == 0:
f = BoolVal(True)
else:
f = And(*a)
Z3_set_ast_print_mode(f.ctx_ref(), Z3_PRINT_SMTLIB_COMPLIANT) # Set SMTLIB 1.x pretty print mode
r = Z3_benchmark_to_smtlib_string(f.ctx_ref(), name, logic, status, "", 0, v, f.as_ast())
Z3_set_ast_print_mode(f.ctx_ref(), Z3_PRINT_SMTLIB2_COMPLIANT) # Restore SMTLIB 2.x pretty print mode
return r

s = Solver()
print toSMTBenchmark(s, logic="QF_LIA")
a, b = Ints('a b')
s.add(a > 1)
s.add(Or(a < 1, b < 2))
print toSMTBenchmark(s, logic="QF_LIA")

结束编辑

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com