Z3 模型中的排序不匹配

Z3 模型中的排序不匹配,z3,Z3,我用z3分析了QF_AUFLIA中的一个公式。结果是sat。(get model)返回的模型包含以下行: (define-fun PCsc5_ () Int (ite (= 2 false) 23 33) 根据我对SMTLIBv2语言的理解,此语句的格式不正确=应仅应用于相同类型的参数。但是,2具有sortInt和false具有sortBool 当我将这两行反馈给z3时,它同意我的说法: invalid function application, sort mismatch on

我用z3分析了QF_AUFLIA中的一个公式。结果是
sat
(get model)
返回的模型包含以下行:

  (define-fun PCsc5_ () Int
    (ite (= 2 false) 23 33)
根据我对SMTLIBv2语言的理解,此语句的格式不正确<代码>=应仅应用于相同类型的参数。但是,
2
具有sort
Int
false
具有sort
Bool

当我将这两行反馈给z3时,它同意我的说法:

invalid function application, sort mismatch on argument at position 2
这是虫子吗


如果不是,我应该如何解释
(=2 false)

问题是由于输入中的类型错误。Z3.2忽略了宏应用程序中的一些类型错误。这个问题已经解决了。下一版本将正确报告类型错误(也称为排序不匹配)。下面是一个暴露问题的最小示例:

(set-option :produce-models true)
(declare-fun q (Int) Bool)
;; p1 is a macro
(define-fun p1 ((z Int) (y Int)) Bool
  (ite (q y) (= z 0) (= z 1)))
(declare-const a Int)
(declare-const b Bool)
(assert (p1 a b)) ;; << TYPE ERROR: b must be an Int
(check-sat)
(get-model) 
(设置选项:生成模型为真)
(声明乐趣q(Int)Bool)
;; p1是一个宏
(定义乐趣p1((z Int)(y Int))Bool
(ite(qy)(=z0)(=z1)))
(声明常量为Int)
(宣布常数b布尔)

(断言(p1 a b));;是的,这似乎是模型构造中的一个bug。你能给我们发送生成这个假的模型的公式吗?谢谢