如何从z3中给定的一组可能的整数中获取整数列表?

时间:2017-08-10 06:40:13

标签: z3 constraint-programming z3py

最小示例如下:给定一组可能的整数[1, 2, 3]使用z3py创建大小为5的任意列表。允许重复。

预期结果类似[1, 1, 1, 1, 1][3, 1, 2, 2, 3]等。

如何解决这个问题以及如何实施“选择”?最后,我想找到所有可以通过添加link中解释的附加约束来完成的解决方案。任何帮助将非常感激。

1 个答案:

答案 0 :(得分:0)

以下内容应该有效:

from z3 import *

def choose(elts, acceptable):
    s = Solver()
    s.add(And([Or([x == v for v in acceptable]) for x in Ints(elts)]))

    models = []
    while s.check() == sat:
        m = s.model ()
        if not m:
            break
        models.append(m)
        block = Not(And([v() == m[v] for v in m]))
        s.add(block)

    return models

print choose('a b c d e', [1, 2, 3])