(获取unsat核心)Z3:unsat核心不可用

(获取unsat核心)Z3:unsat核心不可用,z3,proof,z3py,sat,sat-solvers,Z3,Proof,Z3py,Sat,Sat Solvers,这是我的程序,当图形中存在循环时返回SAT,当没有循环时返回UNSAT: (set-option :fixedpoint.engine datalog) (define-sort s () Int) (declare-rel edge (s s)) (declare-rel path (s s)) (declare-var a s) (declare-var b s) (declare-var c s) (rule (=> (edge a b) (path a b))

这是我的程序,当图形中存在循环时返回SAT,当没有循环时返回UNSAT:

(set-option :fixedpoint.engine datalog) 

(define-sort s () Int) 

(declare-rel edge (s s)) 
(declare-rel path (s s)) 

(declare-var a s) 
(declare-var b s) 
(declare-var c s) 

(rule (=> (edge a b) (path a b)))
(rule (=> (and (path a b) (path b c)) (path a c)))

(rule (edge 1 2))
(rule (edge 2 3))


(declare-rel cycle (s))
(rule (=> (path a a) (cycle a)))
(query cycle :print-answer true)
我想在没有循环(UNSAT)时得到模型。我意识到我应该使用命令(get unsat core)并将选项设置为(set option:product unsat cores true):

我得到这个错误:

unsat
(error "line 24 column 15: unsat core is not available")

unsat
案例中获取模型没有意义。不可满足的字面意思是没有满足您的约束的模型。请提出一个更明确的问题,明确你想要达到的目标


unsat核心是冲突断言的子集。根据定义,此集合是不可满足的,并且不构成您所寻求的模型。此外,我非常怀疑定点引擎是否支持unsat内核,因此您得到的错误消息仅仅意味着它们没有被计算。

unsat
情况下获取模型没有意义。不可满足的字面意思是没有满足您的约束的模型。请提出一个更明确的问题,明确你想要达到的目标

unsat核心是冲突断言的子集。根据定义,此集合是不可满足的,并且不构成您所寻求的模型。此外,我非常怀疑定点引擎是否支持unsat核心,因此您收到的错误消息仅仅意味着它们没有被计算。

如果我可能入侵,那么当您想要检索
unsat核心时,可能需要命名约束

该网站提供了以下示例:

; Getting unsatisfiable cores
(set-option :produce-unsat-cores true)
(set-logic QF_UF)
(declare-const p Bool) (declare-const q Bool) (declare-const r Bool)
(declare-const s Bool) (declare-const t Bool)
(assert (! (=> p q) :named PQ))
(assert (! (=> q r) :named QR))
(assert (! (=> r s) :named RS))
(assert (! (=> s t) :named ST))
(assert (! (not (=> q s)) :named NQS))
(check-sat)
; unsat
(get-unsat-core)
; (QR RS NQS)
(exit)
正如所指出的,只有当公式是
sat
时,模型才可用,
unsat-core
只有当公式是
unsat
时才可用。如果我可能会闯入,那么当想要检索
unsat-core
时,需要命名约束

该网站提供了以下示例:

; Getting unsatisfiable cores
(set-option :produce-unsat-cores true)
(set-logic QF_UF)
(declare-const p Bool) (declare-const q Bool) (declare-const r Bool)
(declare-const s Bool) (declare-const t Bool)
(assert (! (=> p q) :named PQ))
(assert (! (=> q r) :named QR))
(assert (! (=> r s) :named RS))
(assert (! (=> s t) :named ST))
(assert (! (not (=> q s)) :named NQS))
(check-sat)
; unsat
(get-unsat-core)
; (QR RS NQS)
(exit)

如前所述,模型仅在公式为
sat
时可用,而
unsat core
仅在公式为
unsat
时可用。请尝试将set option命令移动到文件顶部。Z3需要马上知道这一点;否则,它将无法设置跟踪unsat核心所需的所有数据结构,这可能会很昂贵。我根据您的建议修改了问题,但仍然收到一个错误:unsat(错误“第24行第15列:unsat核心不可用”),请尝试将set option命令移到文件顶部。Z3需要马上知道这一点;否则,它将无法设置跟踪unsat核心所需的所有数据结构,这可能会很昂贵。我用您的建议修改了问题,但仍然得到一个错误:unsat(错误“第24行第15列:unsat核心不可用”)