在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