Z3python机型比较

Z3 python model compareson

拥有一组公式并使用 z3py 创建两个模型 old_model = solver.model()new_model。如何获得在两个模型中具有不同分配的变量名称列表?

需要一个考虑公式集中所有自由变量的通用解决方案。如果可能,在某些情况下,变量由 var = Int('varname')m 定义并且仅在公式 ForAll(var, ...) 中使用,在开始比较模型时不需要考虑该变量 var

想法是在调试期间使用比较,看看是否存在定义模型之间差异的意外变量,或者变量不应出现在模型中。

不清楚你在问什么;但是当 z3 给你一个模型时,它只是一个将变量映射到它们的值的字典。您可以在 Python:

中轻松保留它们
from z3 import *

s = Solver()

x, y, z = Ints('x y z')

s.add(x + y > 5)

s.add(ForAll([z], z > z-1))

s.check()
m = s.model()

print m

# get the variables:
for v in m:
  print v

这会打印:

[y = 0, x = 6]
y
x

如您所见,yx 存在,而 z 不存在;如你所愿,我想。如果您有多个模型,您可以简单地分别查询它们并寻找差异并进行您希望的任何编程。这是您要找的吗?