意外的错误消息,复制显然非常脆弱 - 错误?

Unexpected error message, reproduction apparently very fragile - bug?

运行 Windows Z3 4.3.2(官方下载)和 Z3 4.4 0ab54b9e0c33 在 this program 上的 x64 构建(不幸的是相当长)产生 invalid rational value passed as an integer .

这个问题似乎不是类型检查器问题,因为明显有问题的公式(程序中的最后一个 check-sat)在类型方面看起来很好:

(declare-const i@99 Int)
(declare-const k@38 Int)
...
(assert (not (and (<= 0 i@99) (< i@99 (+ k@38 1)))))
(check-sat) ; ERROR

我的猜测是问题出现在证明搜索期间,因为稍微更改程序会使错误消失。我尝试更改 Z3 的配置选项,观察到如果 smt.arith.nl 设置为 false,错误消失,如果 smt.qi.eager_threshold 设置为低于 10 的值。此外,基本上删除最后一个 check-sat 之前的任何 push-pop 范围也会使错误消失(不过我实际上并没有尝试删除每个范围)。这两个观察结果让我相信错误是在证据搜索期间和搜索 space 的 "area" 中出现的,只有在特定情况下才会出现。

违规行以及我试验过的行都用 [XXX] 标记。

这是一个错误还是这里发生了什么?

可以在 Z3 的 GitHub 页面关注此问题:https://github.com/Z3Prover/z3/issues/32