Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何显示特定的unsat约束,而不是整个核心(Z3,Python)_Z3_Smt_Z3py - Fatal编程技术网

如何显示特定的unsat约束,而不是整个核心(Z3,Python)

如何显示特定的unsat约束,而不是整个核心(Z3,Python),z3,smt,z3py,Z3,Smt,Z3py,如何仅列出来自unsat核心的特定约束结果?我有很多条件,打印整个核心并不能打印全部。我读到可以通过assert\u和\u track以及unsat\u核心命令来完成。我找到了一些例子,但它们不起作用。有这方面的经验吗 s.assert_and_track(A > B, 'p1') s.assert_and_track(B > C, 'p2') if s.check() == sat: print('ok') else: c = s.unsat_core print(c)

如何仅列出来自unsat核心的特定约束结果?我有很多条件,打印整个核心并不能打印全部。我读到可以通过assert\u和\u track以及unsat\u核心命令来完成。我找到了一些例子,但它们不起作用。有这方面的经验吗

s.assert_and_track(A > B, 'p1')
s.assert_and_track(B > C, 'p2')
if s.check() == sat:
  print('ok')
else:
  c = s.unsat_core
  print(c) <- this print all core
s.assert_和_轨道(A>B,'p1')
s、 断言_和_轨迹(B>C,'p2')
如果s.check()==sat:
打印('确定')
其他:
c=s.unsat_堆芯

print(c)实现这一点的最简单方法是简单地将标签映射保存到约束,对于本例,我们可以这样做

M = {}
M['p1'] = (A > B)
M['p2'] = (B > C)
M['p3'] = (C > A)
因此,稍后我们可以根据这些约束打印核心,例如如下所示

core = s.unsat_core()
for e in core:
    print(M[str(e)])

当然,如果您只想打印一些条目而不是全部条目,这也会起作用

它不起作用。首先,我必须将语法错误更正为
print M[str(e)]
print(M[str(e)]
,然后我得到
TypeError:“method”对象对于核心中的e是不合适的。也可以尝试直接用
print(M['p1'])
显示,但此显示
A>B
。因此,我尝试将其转换为boolean
print(bool(M['p1'])
,但无论我设置了什么条件(<>==),此打印始终为真;我必须更新该示例,使其能够与3.x一起使用。我已经更新了该示例,并且修复了Python3.x的另一个问题Z3的API。该示例在Windows上使用my Python 3.4.3运行良好。您使用的是旧版本的Z3还是Python?Python v3.5、Z3 v4.4.1-都是x64。我的测试中有一个小的打字错误
unsat\u core
应该是
unsat\u core()
现在没有错误,但仍然没有输出。如果我使用直接打印对象
print(M['p1'])
我将进入输出
A>B