get-value
调用返回表达式而不是具体值#b01
:
sat
(((trans_local true true (_ bv2 2)) (ite #b10 #b01 (ite #b00 (ite #b10 #b11 #b01) (ite #b01 (ite #b10 #b10 #b00) #b01)))))
simplify
以相同的方式产生(并且它可能应该)。我应该如何使用get-value
来获得正确的结果?
以下是查询:
(set-logic UFBV)
(set-option :produce-models true)
(define-fun trans_local ((x!1 (_ BitVec 2)) (x!2 Bool) (x!3 Bool)) (_ BitVec 2)
(ite (= x!1 #b10)
(ite x!2 #b01 #b00)
(ite (= x!1 #b00)
(ite (and x!2 x!3)
#b11
(ite (and (not x!2) x!3)
#b10
(ite (and (not x!2) (not x!3)) #b00 #b01)))
(ite (= x!1 #b01) (ite (and x!2 x!3) #b10 (ite (and (not x!2) x!3) #b10 #b00)) #b01)))
)
(check-sat)
(get-value ((trans_local true true (_ bv2 2))))
答案 0 :(得分:2)
你的表情没有很好的分类。在Z3中,define-fun
本质上是一个宏。 Z3 3.2不检查宏应用程序是否排序良好。所以,你没有得到任何错误信息。这已得到修复,修复程序将在下一版本中提供:Z3 4.0。
话虽如此,您可以通过修复get-value
语句中的排序错误来获得预期结果。我想,你打算写:
(get-value ((trans_local (_ bv1 2) true true)))