gpt4 book ai didi

c++ - 如何使用 Z3 C++ API 来证明基于输入参数的理论?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:01 25 4
gpt4 key购买 nike

我正在尝试使用 Z3 C++ API 来实现以下目标:

(set-option :produce-proofs true)

(declare-const Weight Int)
(declare-const WeightLimit Int)
(declare-const P1 Bool)

(assert (= WeightLimit 10))

(assert (= P1 (>= Weight WeightLimit)))
(assert (= P1 true))

;Facts - Input
(assert (= Weight 100))

(check-sat)

我最终得到了以下函数:

void test() {
try {
context ctx;
Z3_string str = "(declare-const Weight Int) (declare-const WeightLimit Int) (declare-const P1 Bool) (assert (= WeightLimit 10)) (assert (= P1 (>= Weight WeightLimit))) (assert (= P1 true)) (assert (= Weight 100)) (check-sat)"; //Generated by some other function
expr fs(ctx, Z3_parse_smtlib2_string(Z3_context(ctx), str, 0, 0, 0, 0, 0, 0));

solver s(ctx);
s.add(fs);

switch (s.check()) {
case unsat: std::cout << "not satisfied\n"; break;
case sat: std::cout << "satisfied\n"; break;
case unknown: std::cout << "unknown\n"; break;
}

model m = s.get_model();
std::cout << m << "\n";

}
catch (z3::exception e) {
std::cout << e.msg() << std::endl;
}
}

有没有什么方法可以将权重值作为输入参数传递给函数而不是对其进行硬编码?

此外,如何使用 Z3 C++ API 设置选项?如果我不设置选项会有什么影响?

最佳答案

好吧,这需要由生成该字符串作为其输出的函数来处理,即您注释为 “//由其他函数生成”的函数

您只需将 Weight 作为参数传递给该函数,该函数在生成字符串时应使用正确的值。

如果由于某种原因该函数对您可用,您将不得不进行一些字符串处理;但当然这会非常脆弱且容易出错。

另一种选择是传递一个字符串,而是使用 API 一次实际断言一个事实;但从您的描述来看,这似乎也不是您的选择。

关于c++ - 如何使用 Z3 C++ API 来证明基于输入参数的理论?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42930514/

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