解释QF_FPABV逻辑返回的模型

时间:2014-05-23 17:31:53

标签: z3

我使用QF_FPABV逻辑(无量词浮点运算和位向量逻辑??)以SMT2格式编写z3查询。 查询如下所示:

(set-logic QF_FPABV)
(set-option :produce-models true)

(declare-fun f0 () (_ FP 8 24))
(declare-fun f1 () (_ FP 8 24))
(declare-fun f2 () (_ FP 8 24))

(assert (= f2 (* roundNearestTiesToEven f0 f1)))
(assert (>= f2 ((_ asFloat 8 24) roundNearestTiesToEven 3.0 0)))

(check-sat)
; (check-sat-using (then simplify solve-eqs bit-blast smt))
(get-model)

(check-sat), 

我获得了结果和模型:

sat                                                                             
(model                                                                          
  (define-fun f2 () (_ FP 8 24)                                                 
    (as +1.44919359683990478515625p127 (_ FP 8 24)))                            
  (define-fun f1 () (_ FP 8 24)                                                 
    (as +1.476345062255859375p0 (_ FP 8 24)))                                   
  (define-fun f0 () (_ FP 8 24)                                                 
    (as +1.9632179737091064453125p126 (_ FP 8 24)))                             
)

这就是我的期望。 但是,如果我使用

(check-sat-using (then simplify solve-eqs bit-blast smt)) 
相反,我获得了:

sat
(model
  ;; universe for RoundingMode:
  ;;   RoundingMode!val!0
  ;; -----------
  ;; definitions for universe elements:
  (declare-fun RoundingMode!val!0 () RoundingMode)
  ;; cardinality constraint:
  (forall ((x RoundingMode)) (= x RoundingMode!val!0))
  ;; -----------
  ;; universe for (_ FP 8 24):
  ;;   FP!val!0 FP!val!1 FP!val!2 FP!val!3
  ;; -----------
  ;; definitions for universe elements:
  (declare-fun FP!val!0 () (_ FP 8 24))
  (declare-fun FP!val!1 () (_ FP 8 24))
  (declare-fun FP!val!2 () (_ FP 8 24))
  (declare-fun FP!val!3 () (_ FP 8 24))
  ;; cardinality constraint:
  (forall ((x (_ FP 8 24)))
          (or (= x FP!val!0) (= x FP!val!1) (= x FP!val!2) (= x FP!val!3)))
  ;; -----------
  (define-fun f1 () (_ FP 8 24)
    FP!val!2)
  (define-fun f0 () (_ FP 8 24)
    FP!val!1)
  (define-fun f2 () (_ FP 8 24)
    (* roundNearestTiesToEven FP!val!1 FP!val!2))
)

这个模型解释起来并不容易......

对于这个简单的例子,我可以使用(check-sat)获取人类可读的结果。 对于包含非线性操作的一些复杂示例, 我需要使用(check-sat-using(然后简化solve-eqs bit-blast smt)) 避免从z3获得“未知”......

是否有任何文件可以教我解释这种非人类可读的模型?

2 个答案:

答案 0 :(得分:4)

这里的问题是浮点理论还没有与Z3的SMT内核完全集成(我正在一个单独的分支中研究它)。因此,内核将所有浮点排序视为未解释,因此模型包含这些排序(Universe)的定义。目前,解决这个问题的最佳方法是直接调用fpa2bv策略,例如,更改

(check-sat-using (then simplify solve-eqs bit-blast smt)) 

(check-sat-using (then simplify fpa2bv simplify solve-eqs bit-blast smt)) 

在调用fpa2bv之前必须调用简化策略,并且还需要在bit-blast策略之前调用简化器,因为这些策略依赖于简化器来消除某些特定的表达式。

答案 1 :(得分:1)

我认为这是Z3中模型完成代码的问题。很久以前就有类似的错误:Z3 FP logic: produces unexpected model

我认为问题已经得到解决,并且该票证中的代码示例现在可以正常使用z3 4.3.2,但显然您在此处提供的代码片段会触发类似的问题,但尚未解决。