4
我的問題是關於:Z3: convert Z3py expression to SMT-LIB2?如何z3py表達式轉換爲smtlib 2格式
我想z3py從表達到smtlib2格式轉換。使用下面的腳本,但是轉換後,當我喂結果Z3或任何其他SMT,我得到:
「語法錯誤,意外讓」
有什麼辦法,我可以帶它使用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)
但問題是我把它傳遞給其他SMT,它說:語法錯誤讓我們沒有定義。 – user3196876
我不小心複製了錯誤的輸出,我更新了我的帖子。 –