(获取unsat核心)Z3:unsat核心不可用
这是我的程序,当图形中存在循环时返回SAT,当没有循环时返回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))
(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核心不可用”)