繁体   English   中英

Z3Py:使用z3.prove时生成更多反例

[英]Z3Py: Generate more counterexamples when using z3.prove

Z3Py是否有可能在合理的时间内生成更多反例?

我可以使用z3.prove生成一个反例,如下所示:

import z3

x = z3.Real("x")

rule = x > 0
goal = x < 0
z3.prove(z3.Implies(rule, goal))

它给出以下输出,

counterexample
[x = 1]

但是,如果我想产生更多的反例呢?

通过基于反例逐步添加规则来做到这一点的唯一方法吗?

对于上述情况,我可以通过执行以下操作获得另一个反例,

z3.prove(z3.Implies(z3.And(rule, x!=1), goal))

但是我认为,当涉及到许多规则时,这很慢,因此我希望有一个更快的方法。

谢谢!

您建议的是获得多个反例的“常规”建议。 Z3没有产生多个反例的方法,因为这很容易从外部进行。 但是,它确实支持优化,因此,如果您的目标是找到一个“最佳”或“至少一样好”的解决方案,那么这可能是一个解决方案。

对平凡的反例添加进行简单的优化是检查反例中的所有分配是否实际上是必需的。 例如,反例可能是(x = 5,y = 0),但没有任何关系取决于y = 0,因此我们可以将其删除,这会使反例变小(因此,少一些)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM