这可能不超出z3的范围,我知道在Z3中我们可以简化表达式,但我想知道z3是否可以解决方程而不是给出模型。
例如,我希望以下等式对于a的任何值始终为true。在这种情况下使用ForAll量词将返回不饱和度。
a == b - c + 2
我期望的解决方案是一个指定变量的公式,而简化不处理这个,比如
b == a + c - 2 or c == b - a + 2
这有什么API吗?提前谢谢。
答案 0 :(得分:0)
不确定这里究竟是什么问题,但听起来你想获得所有令人满意的解决方案,而不是一个令人满意的解决方案。可以对其进行编码(使用量词),但不一定容易解决;取决于量词中使用的逻辑片段,Z3可能很慢,或者它可能只是相对较早地放弃(返回未知)。没有用于此目的的专用API,但现有API具有解决难题所需的所有部分(例如,使用未解释的函数f
以符号方式对解决方案进行编码,然后获取f
的func_interp从模型中。)
有关获取多个解决方案的详细信息,另请参阅Z3: finding all satisfying models和Z3 Enumerating all satisfying assignments。