В Z3, очевидно, будет оценено следующее: максимум с 2, с моделью x = true и y = true.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)
Как я мог реализовать это с использованием API C/C++? Я пытался просто разбор с помощью этого:
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
».
ADDENDUM: В свете недавних ответов и обсуждений кажется ясным, что то, что я запрашиваю, не является нормальной функциональностью на данный момент. Итак, я изменяю вопрос, чтобы задать конкретные детали способа сделать эту работу так, как сейчас.
Альтернатива: Предоставляет ли MS исходный код для Z3? Если это так, вы можете отлаживать первый подход, который правильно разбирается и оценивается. – Samuel
Я не уверен, что они это делают. Однако я знаю, что мой пример работает на их веб-сайте. –
http://z3.codeplex.com/SourceControl/latest#README – Samuel