Z3给出的序列错误模型

Z3给出的序列错误模型,z3,Z3,我将以下代码放入 结果是 sat (model (define-fun s () (Seq Int) (seq.++ (seq.unit 14) (seq.++ (seq.unit 16) (seq.unit 18)))) (define-fun t2 () (Seq Int) (seq.++ (seq.unit 16) (seq.unit 18))) (define-fun n () Int 3) (define-fun t1 () (Seq Int)

我将以下代码放入

结果是

sat
(model 
  (define-fun s () (Seq Int)
    (seq.++ (seq.unit 14) (seq.++ (seq.unit 16) (seq.unit 18))))
  (define-fun t2 () (Seq Int)
    (seq.++ (seq.unit 16) (seq.unit 18)))
  (define-fun n () Int
    3)
  (define-fun t1 () (Seq Int)
    (seq.++ (seq.unit 16) (seq.unit 18)))
)
这种模式是错误的<代码>(seq.extract s0(-n1))应该是
[14;16]
而不是
[16;18]


我是否误解了Z3的任何内容,或者这是Z3的错误?

自Z3的rise4fun版本发布以来,Sequence logic在Z3中看到了很多变化,修复了很多错误。通过最近的构建,我得到:

sat
(model
  (define-fun s () (Seq Int)
    (seq.++ (seq.unit 4) (seq.unit 4) (seq.unit 4)))
  (define-fun t2 () (Seq Int)
    (seq.++ (seq.unit 4) (seq.unit 4)))
  (define-fun t1 () (Seq Int)
    (seq.++ (seq.unit 4) (seq.unit 4)))
  (define-fun n () Int
    3)
)
在我看来这是正确的

长话短说:rise4fun的z3版本对于这个问题来说太旧了,而且有bug。看看是否可以从下载更新的版本(甚至是夜间版本)

sat
(model
  (define-fun s () (Seq Int)
    (seq.++ (seq.unit 4) (seq.unit 4) (seq.unit 4)))
  (define-fun t2 () (Seq Int)
    (seq.++ (seq.unit 4) (seq.unit 4)))
  (define-fun t1 () (Seq Int)
    (seq.++ (seq.unit 4) (seq.unit 4)))
  (define-fun n () Int
    3)
)