我目前正在使用Z3 C++ API来解决位向量上的查询。有些查询可能在顶层包含一个存在量词。
通常情况下,量词消除很简单,并且可以由Z3快速执行。但是,在量词消除返回到枚举数千个可行解决方案的情况下,我想放弃这一策略,并以其他方式处理查询。我试过用“尝试-为”策略包装‘qe’-策略,希望如果量词消除失败(比如100 if ),我会知道我最好以其他方式处理查询。不幸的是,“尝试-fo
我试着用solve(g)找到满足公式g = And(ForAll([i, j, k], Implies(And(k <= 0, A * i + B * j + C * k + D <= 0), k +i - j <= 0)),Not(And(A==0,B==0,C==0)))的A,B,C,D的值。这有许多可能的解决方案,一种是A=1,B=-1,C=D=0,但Z3似乎无法做到这一点(solve(g)不会终止)。
Z3能做这种非线性(但简单)的公式