以可读格式输出 z3 模型输出

Outputting z3 model output in a readable format

我问了 关于将变量分配给集合的问题,但我很难理解如何以可读格式输出 s.model() 结果。

虽然我可以解释以下内容

[A = Lambda(k!0, Or(k!0 == 1, k!0 == 4)),
 b = 5,
 a = 1,
 d = 4,
 sizeB = 2,
 c = 3,
 sizeA = 2,
 B = Lambda(k!0, Or(k!0 == 3, k!0 == 5)),
 Ext = [else -> 5]]

用户这样解释是不合理的。我想以易于 read/work 与(例如 {A: [a, d], B: [b, c]})的格式获得输出。我该怎么做?

当然..您可以以编程方式提取模型并以您喜欢的任何方式显示它。对于您提到的程序,只需在末尾添加以下内容,在 r = s.check() 行之后:

if r != sat:
    print("Solver said: %s" % r)
else:
    m = s.model()
    print("A = %s" % [e for e in allElems if m.evaluate(m[A][e])])
    print("B = %s" % [e for e in allElems if m.evaluate(m[B][e])])

加上这个,当我运行那个程序时,它打印:

A = [a, d]
B = [b, c]

我相信这就是您要找的东西。

显然,您可以提取这些值,对其进行操作,甚至可以根据您找到的模型声明新的约束,并查询更多信息。 API 非常灵活,如果您想用它进一步编程,我建议阅读 https://ericpony.github.io/z3py-tutorial/guide-examples.htm