我希望得到固定点phi中元素的约束,在下面的例子中,约束应该是c2< = c1 + 5.0,c1> = 5.0它应该如何在Z3中实现它?或者有没有办法在Z3中使用不使用固定点
(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))
答案 0 :(得分:2)
Z3不会尝试计算最小的定点。 它试图建立可达性(可推导性)或建立一个后固定点 需要查询无法访问(可派生)。 因此,它没有提供从一组规则中获得最小定点的方法。
指定
(query (phi c1 c2) :print-certificate true)
Z3将打印与满足查询的最小定点成员对应的内容。