"unknown" 中的微小变化结果 - 与量词预处理有关?

Minor change results in "unknown" - related to quantifier preprocessing?

下面的 "minimal" 程序是从一个更大的程序中提炼出来的, 预计会产生 unsat(确实如此)。但是,取消注释量词 AX-1 中的附加连词会将结果更改为 unknown(在 Windows 10 上的 Z3 4.5.0 x64 中)。

(set-option :auto_config false)
(set-option :smt.mbqi false)

(declare-fun foo (Int) Bool)
(declare-const k Real)

(assert (forall ((i Int)) (!
  (and
    (< 0.0 k)
    ; (implies (<= 0 i) (< 0.0 k)) ;;; ---- uncomment this line ----
  )
  :pattern ((foo i))
  :qid |AX-1|)))

(assert (forall ((i Int)) (!
  (foo i)
  :pattern ((foo i))
  :qid |AX-2|)))

(declare-const j Int)
(assert (< j 0))

; (push) ;;; doesn't make a difference
(assert (not
  (ite
    (foo j)
    (< 0.0 k)
    false)))

; (set-option :smt.qi.profile true)
(check-sat)
; (get-info :all-statistics)
; (pop)

量词实例化统计显示,AX-2在两种情况下都被实例化,但AX-1仅在未包含时才被实例化。我的假设是,在后一种情况下,Z3 消除了量词,因为量化变量不会出现在正文中。

然而,令我惊讶的是 版本带有 附加连词 - 其中 Z3 可能 没有 消除量词 -产生 unknown,因为量词 ((foo j)) 的触发器应该可用。

问题:这种行为是否符合预期 - 如果是,为什么?

已确认为错误,请参阅 Github issue 935