我希望得到固定点phi中元素的约束,如d> = 0.0,如何在Z3中实现它?
(set-option :produce-models true)
(set-option :dl_engine 1)
(set-option :dl_pdr_use_farkas true)
(declare-var c Real)
(declare-var d Real)
(declare-var lambda Real)
(declare-rel phi(Real))
(rule
(=>
(and
(>= lambda 0.0)
(phi c)
)
(phi (+ c lambda))
)
)
(rule
(=>
(= c 0.0)
(phi c)
)
)
(rule
(=>
(phi c)
(phi d)
)
)
(query (phi d))
答案 0 :(得分:2)
从中获取信息有两个主要选项 定点引擎。 :print-answer true将导致引擎显示一个或多个实例 满足查询(取决于引擎)。 :print-certificate true将导致引擎 打印一条线索来解释答案。如果查询不能满足,那就是PDR引擎 将打印一个查询为空的证书(如果它收敛,当然)。
目前,dl引擎打印答案(当查询满足时) 作为满足查询的跟踪的谓词的组合。 所以:
(query (phi d)
:print-answer true)
将返回:
sat
(and (query!0 0.0) (phi 0.0))
意味着可以导出值0.0。 我计划在将来的版本中更改此格式 由于格式不是很一致, 但我希望在这一点上这对你有用。
你也可以用:
来调用它(query (phi d)
:print-certificate true)
并返回一个类似的连接(但是使用一个省略十进制表示法的漂亮打印机)。