意外的错误消息,复制显然非常脆弱 - 错误?
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。
运行 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。