Z3 中的标签约束 Python API
Labeling constraints in Z3 Python API
问题 1:如何使用 Z3 Python API 来添加具有唯一标签的约束?我在尝试类似的东西:
...
self.solver.add(self.vm[i] >= 0, 'labelIdx'+str(self.idx))
...
其中 self.idx 是一个整数,每个 i 递增,但我得到:
z3.z3types.Z3Exception:需要 True、False 或 Z3 布尔表达式。收到 labelIdx0
也就是说add的参数不能是字符串
问题 2:函数 unsat_core() 仅适用于 Solver() 对象或 Optimize() 对象。我应该在添加约束之前设置一些选项吗?显然,这里[1]就是这个过程。
谢谢!
要跟踪非卫星核心,您需要使用 assert_and_track
,请参阅此处:https://z3prover.github.io/api/html/classz3py_1_1_solver.html#ad1255f8f9ba8926bb04e1e2ab38c8c15
不幸的是,优化和 unsat-cores 不能 一起工作。这是最近提出的一个问题,请参阅此处:https://github.com/Z3Prover/z3/issues/1577。据我了解,这不是因为它不能被支持,而是他们还没有实现它。对该票发表评论可以激励他们增加支持!
问题 1:如何使用 Z3 Python API 来添加具有唯一标签的约束?我在尝试类似的东西:
... self.solver.add(self.vm[i] >= 0, 'labelIdx'+str(self.idx)) ...
其中 self.idx 是一个整数,每个 i 递增,但我得到:
z3.z3types.Z3Exception:需要 True、False 或 Z3 布尔表达式。收到 labelIdx0
也就是说add的参数不能是字符串
问题 2:函数 unsat_core() 仅适用于 Solver() 对象或 Optimize() 对象。我应该在添加约束之前设置一些选项吗?显然,这里[1]就是这个过程。
谢谢!
要跟踪非卫星核心,您需要使用 assert_and_track
,请参阅此处:https://z3prover.github.io/api/html/classz3py_1_1_solver.html#ad1255f8f9ba8926bb04e1e2ab38c8c15
优化和 unsat-cores 不能 一起工作。这是最近提出的一个问题,请参阅此处:https://github.com/Z3Prover/z3/issues/1577。据我了解,这不是因为它不能被支持,而是他们还没有实现它。对该票发表评论可以激励他们增加支持!