Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Z3确定BV查询中量词消除的难度 我现在使用Z3C++解决API的查询。有些查询可能在顶层包含存在量词_Z3_Smt_Quantifiers - Fatal编程技术网

使用Z3确定BV查询中量词消除的难度 我现在使用Z3C++解决API的查询。有些查询可能在顶层包含存在量词

使用Z3确定BV查询中量词消除的难度 我现在使用Z3C++解决API的查询。有些查询可能在顶层包含存在量词,z3,smt,quantifiers,Z3,Smt,Quantifiers,通常情况下,量词消除很简单,可以由Z3快速执行。然而,在这种情况下,量词的消去会退回到列举数千个可行的解决方案,我想放弃这种策略,自己用其他方式处理查询 我尝试过用“尝试”策略来包装“qe”策略,希望如果量词消除失败(比如100毫秒),我会知道我最好用其他方式处理查询。不幸的是,“尝试”策略无法取消量词消除(在任何时间范围内) 在一次类似的讨论中,“smt”策略被指责没有响应。同样的理由是否也适用于“量化宽松”策略?同一篇文章指出,“未来”版本应该更具响应性是否有任何方法或启发式方法来确定量词消

通常情况下,量词消除很简单,可以由Z3快速执行。然而,在这种情况下,量词的消去会退回到列举数千个可行的解决方案,我想放弃这种策略,自己用其他方式处理查询

我尝试过用“尝试”策略来包装“qe”策略,希望如果量词消除失败(比如100毫秒),我会知道我最好用其他方式处理查询。不幸的是,“尝试”策略无法取消量词消除(在任何时间范围内)

在一次类似的讨论中,“smt”策略被指责没有响应。同样的理由是否也适用于“量化宽松”策略?同一篇文章指出,“未来”版本应该更具响应性是否有任何方法或启发式方法来确定量词消除是否需要很长时间(除了在单独的线程中运行解算器并在超时时终止它之外)

我附上了一个简单的示例,您可以自己尝试:

z3::context ctx;

z3::expr bv1 = ctx.bv_const("bv1", 10);
z3::expr bv2 = ctx.bv_const("bv2", 10);
z3::goal goal(ctx);
goal.add(z3::exists(bv1, bv1 != bv2));

z3::tactic t = z3::try_for(z3::tactic(ctx,"qe"), 100);    
auto res = t.apply(goal);
std::cout << res << std::endl;
z3::context-ctx;
z3::expr bv1=ctx.bv_const(“bv1”,10);
z3::expr bv2=ctx.bv_const(“bv2”,10);
z3:目标(ctx);
add(z3::exists(bv1,bv1!=bv2));
战术t=z3::尝试(z3::战术(ctx,“qe”),100);
自动恢复=t.apply(目标);

std::cout必须通过正在运行的策略定期检查超时取消。 我们基本上必须确保代码检查取消,并且在没有检查的情况下不会进入长时间运行的循环。您可能可以通过在调试器中运行代码来识别无法检查取消的代码段,中断代码,然后确定它所在的过程。然后在GitHub上提交一个bug,以便在有帮助的地方检查取消标志。 总的来说,当涉及到位向量时,量词消除策略目前是相当简单的,因此除了简单的情况外,最好避免qe