在Z3中,通過模型x = true和y = true,可以清楚地評估以下最大值爲2。Z3在C++中最大化
(declare-const x Bool)
(declare-const y Bool)
(declare-const z Bool)
(assert(= z false))
(maximize(
+
(ite (= x true) 1 0)
(ite (= y true) 1 0)
(ite (= z true) 1 0)
)
)
(check-sat)
(get-model)
我該如何使用C/C++ API實現這個功能?我試過用這個簡單解析:
Z3_ast parsed = Z3_parse_smtlib2_string(c,<The above Z3>,0,0,0,0,0,0);
z3::expr simpleExample(c, parsed);
s.add(simpleExample);
但它打印「unsupported \n ;maximize
」。
我不介意手動構建表達式 - 而不是使用構造文件。我根本不知道哪些expr函數或運算符用於「maximize
」。
附錄: 鑑於最近的一些答案和討論,似乎很清楚,我所要求的並不是正常的功能。因此,我改變了這個問題,要求提供一個方法的具體細節,以便目前的工作成爲現實。
替代方法:MS是否提供Z3的源代碼?如果是這樣,你可以調試正確解析和評估的第一種方法。 – Samuel
我不確定他們這麼做。不過,我知道我的例子在他們的網站上運行。 –
http://z3.codeplex.com/SourceControl/latest#README – Samuel