如何使用z3获得定点变量的约束?

如何使用z3获得定点变量的约束?,z3,z3-fixedpoint,Z3,Z3 Fixedpoint,我希望得到固定点φ中元素的约束,在下面的例子中,约束应该是c2=5.0,它应该是如何在Z3中实现的?或者有没有办法不使用Z3中的fixedpoint (set-option :produce-models true) (set-option :dl_engine 1) (set-option :dl_pdr_use_farkas true) (declare-var c1 Real) (declare-var c2 Real) (declare-var lambda Real) (declare

我希望得到固定点φ中元素的约束,在下面的例子中,约束应该是c2=5.0,它应该是如何在Z3中实现的?或者有没有办法不使用Z3中的fixedpoint

(set-option :produce-models true)
(set-option :dl_engine 1)
(set-option :dl_pdr_use_farkas true)
(declare-var c1 Real)
(declare-var c2 Real)
(declare-var lambda Real)
(declare-rel phi(Real Real))
(rule 
   (=>
      (and
        (>= lambda 0.0)
        (phi c1 c2)
      )
      (phi (+ c1 lambda) (+ c2 lambda))
   )
)
(rule 
    (=>
       (>= c1 5.0)
       (<= c2 10.0)
       (phi c1 c2)
    )
)

(query (phi c1 c2))
(设置选项:生成模型为真)
(设置选项:dl_发动机1)
(设置选项:dl_pdr_use_farkas true)
(申报真实)
(宣布var c2真实)
(声明var lambda Real)
(申报相关phi(真实))
(规则
(=>
(及
(>=λ0.0)
(φc1-c2)
)
(φ(+c1λ)(+c2λ))
)
)
(规则
(=>
(>=c1 5.0)

(Z3不尝试计算最小不动点。 它试图建立可达性(可派生性)或建立一个后固定点 意味着查询不可访问(可派生)。 因此,它不提供从一组规则中获得最小不动点的方法

通过指定

 (query (phi c1 c2) :print-certificate true)
Z3将打印满足查询的最小不动点的成员对应的内容