如何使用z3获取固定点中变量的约束?

时间:2012-09-02 14:48:08

标签: z3 fixed-point

我希望得到固定点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))

1 个答案:

答案 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)

并返回一个类似的连接(但是使用一个省略十进制表示法的漂亮打印机)。