拥有一组公式并使用z3py创建两个模型old_model = solver.model()
和new_model
。如何获得在两个模型中具有不同赋值的变量名列表?
需要一个考虑公式集中所有自由变量的通用解决方案。如果可能,存在由var = Int('varname')
m定义变量且仅在公式ForAll(var, ...)
中使用的情况,当开始比较模型时,不需要考虑变量var
。
这个想法是在调试期间使用比较,并查看是否存在定义模型之间差异的任何意外变量,或者变量不应出现在模型中。
发布于 2019-01-09 16:09:57
不清楚您在问什么;但是当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
正如您所看到的,y
和x
在那里,而z
不在那里;我认为正如您所希望的那样。如果您有多个模型,您可以简单地分别查询它们,并查找差异并执行您想要的任何编程。这就是你要找的吗?
https://stackoverflow.com/questions/54110662
复制相似问题