簡體   English   中英

如何在 Z3 中獲取_unsat_core?

[英]How to get_unsat_core in Z3?

我有以下 python 程序。

from z3 import *
x = Bool("X")
y = Bool("Y")
s = Solver()
s.add(x==y)
s.add(x!=False)
s.add(y!=True)
s.check()

最后一行給出了輸出unsat 但是如何打印這個未飽和的核心呢?

您可以按如下方式要求未飽和核心:

from z3 import *

#  https://z3prover.github.io/api/html/classz3py_1_1_solver.html#ad1255f8f9ba8926bb04e1e2ab38c8c15

x = Bool('X')
y = Bool('Y')
s = Solver()
s.set(unsat_core=True)

s.assert_and_track(x == y, 'a1')
s.assert_and_track(x != False, 'a2')
s.assert_and_track(y != True, 'a3')

result = s.check()
print(result)
if result == unsat : 
    c = s.unsat_core()
    print(len(c))
    print('a1 ', Bool('a1') in c)
    print('a2 ', Bool('a2') in c)
    print('a3 ', Bool('a3') in c)
    print(c)

結果輸出:

unsat
3
a1  True
a2  True
a3  True
[a1, a2, a3]

這是一個微不足道的 unsat 核心,因為它包含所有斷言。 看一個相關的討論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM