【发布时间】:2015-05-18 01:17:16
【问题描述】:
我有一个可以转化为差异逻辑的问题要解决,我想使用 z3 来实现此目的,而不是执行决策过程。 尽管如此,我运行了一些示例并且我有类似指数的运行时(即使它有一个多时间决策过程)。我是 z3 的新手,我不知道我是否做错了什么。这是我正在使用的代码(c++ api),改变这个“max”变量。
int main(int argc, char **argv) {
context c;
solver s(c, "QF_IDL");
int max = 10000;
int prev = 0;
for(int i = 1; i < max; ++i){
expr x = s.ctx().int_const(std::to_string(i).c_str());
expr y = s.ctx().int_const(std::to_string(++i).c_str());
expr pr = s.ctx().int_const(std::to_string(prev).c_str());
s.add(pr < x);
s.add(x < y);
prev = i;
}
s.add(s.ctx().int_const(std::to_string(max-1).c_str()) < s.ctx().int_const(std::to_string(0).c_str()));
clock_t begin = clock();
switch (s.check()) {
case unsat: std::cout << "UNSAT"; break;
case sat: std::cout << "SAT"; break;
case unknown: std::cout << "unknown\n"; break;
}
clock_t end = clock();
double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
std::cout << "elapsed time: " << elapsed_secs;
}
非常感谢,
佩德罗
【问题讨论】:
标签: logic z3 difference