如何在z3py中获取组合列表?

时间:2019-05-23 11:53:57

标签: python z3 smt z3py

我在python中有一个像这样的整数列表:

myList = [97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57]

我想让Z3输出所有都是myList成员的数字集或列表...本质上,我想使用Z3获得所有存在于myList中但以各种不同顺序排列的数字列表。换句话说,我想从Z3获取各种输出,这些输出包含上面的myList集合中的数字。

我在使用Z3py进行操作时遇到了麻烦,因为在调用s.model()并假设s = Solver()的情况下,我不知道z3如何返回列表或集合作为模型。

1 个答案:

答案 0 :(得分:1)

testWidgets('me testing', (WidgetTester tester) async {
  await tester.pumpWidget(
    Builder(
      builder: (BuildContext context) {
        var actual = sut.myMethodName(context, ...);
        expect(actual, something);

        // The builder function must return a widget.
        return Placeholder();
      },
    ),
  );
});

请注意,这将打印from z3 import * myList = [97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57] s = Solver () pick = [] for (i, v) in enumerate(myList): b = Bool ('pick_%d' % i) s.add(b == b) pick += [(b, v)] while (s.check() == sat): m = s.model() chosen = [] block = [] for (p, v) in pick: if m.eval(p, model_completion=True): chosen += [v] block.append(Not(p)) else: block.append(p) print chosen s.add(Or(block)) 个解决方案,其中2^n是列表中元素的数量;因此,如果n大,则需要一段时间才能完成!