簡體   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