我正在尝试 Z3 str.to.int 来评估其效果。 我遇到了以下示例,它看起来像一个错误(也报告给GitHub/Z3Prover/z3/issues):
(declare-const si String)
(declare-const sj String)
(declare-const sk String)
(declare-const i Int)
(declare-const j Int)
(declare-const k Int)
(assert (= (str.to.int si) i))
(assert (= (str.to.int sj) j))
(assert (= (str.to.int sk) (* k k)))
(assert (= (- j i) k))
(assert (> i 7422885))
(assert (< j 74228850))
(assert (< i j))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
; When I remove this comment everything works fine ;
; ;
;(assert (< 135 k)) ;
; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(check-sat)
(get-value (si sj sk i j k))
输出:(这是一个错误,对吧?)sj 不 j的字符串表示
sat
((si "74228847")
(sj "!0!")
(sk "1")
(i 74228847)
(j 74228848)
(k 1))
当我删除评论时,我得到正确的输出:
sat
((si "74228713")
(sj "74228849")
(sk "18496")
(i 74228713)
(j 74228849)
(k 136))
非常感谢任何帮助,谢谢!