如何从 z3 中给定的一组可能整数中获取整数列表?
How to get a list of integers from a given set of possible integers in z3?
最小示例如下:给定一组可能的整数 [1, 2, 3]
使用 z3py 创建大小为 5 的任意列表。允许重复。
预期结果类似于 [1, 1, 1, 1, 1]
或 [3, 1, 2, 2, 3]
等
如何解决这个问题以及如何实施'choosing'?最后,我想找到所有可以通过添加额外约束来完成的解决方案,如 link 中所述。任何帮助将不胜感激。
以下应该有效:
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])
最小示例如下:给定一组可能的整数 [1, 2, 3]
使用 z3py 创建大小为 5 的任意列表。允许重复。
预期结果类似于 [1, 1, 1, 1, 1]
或 [3, 1, 2, 2, 3]
等
如何解决这个问题以及如何实施'choosing'?最后,我想找到所有可以通过添加额外约束来完成的解决方案,如 link 中所述。任何帮助将不胜感激。
以下应该有效:
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])