gpt4 book ai didi

python - 如何将 z3py 表达式转换为 smtlib 2 格式

转载 作者:太空宇宙 更新时间:2023-11-03 11:52:25 24 4
gpt4 key购买 nike

我的问题是关于:Z3: convert Z3py expression to SMT-LIB2?

我正在尝试将 z3py 表达式从 转换为 smtlib2 格式。使用以下脚本,但在将结果提供给 z3 或任何其他 SMT 时进行转换后,我得到:

"Syntax error, unexpected let"

有什么方法可以使用 z3py 将其转换为 smtlib2 格式,这样我就不必再写长表达式了。

以下是我用于转换的代码:

def convertor(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())

x = Int('x')
y = Int('y')
s = Solver()
s.add(x > 0)
s.add( x < 100000)
s.add(x==2*y)
print convertor(s, logic="QF_LIA")

这是输出:

(set-info :status unknown)
(set-logic QF_LIA)
(declare-fun y () Int)
(declare-fun x () Int)
(let (($x34 (= x (* 2 y))))
(let (($x31 (< x 100000)))
(let (($x10 (> x 0)))
(let (($x35 (and $x10 $x31 $x34)))
(assert $x35)))))
(check-sat)

最佳答案

这也与另一个问题有关here .

这个问题很可能是因为 Z3 版本过时。有许多错误修复尚未进入主分支并使用不稳定分支(或预编译的每晚二进制文件 here )我得到了不同的输出,Z3 没有错误地接受了它:

(set-info :status unknown)
(set-logic QF_LIA)
(declare-fun y () Int)
(declare-fun x () Int)
(assert
(let (($x34 (= x (* 2 y))))
(let (($x31 (< x 100000)))
(let (($x10 (> x 0)))
(and $x10 $x31 $x34)))))
(check-sat)

关于python - 如何将 z3py 表达式转换为 smtlib 2 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22620566/

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