如何在z3中为结果的索引添加偏移量

如何在z3中为结果的索引添加偏移量,z3,z3py,Z3,Z3py,如何向从IndexOf表达式获得的值添加偏移量?就是我怎么做? > import z3 > s = 'hello' > t = 'e' > z3.simplify(z3.IndexOf(s, t, 0) + z3.IntVal(1)) z3.z3types.Z3Exception: Non-sequence passed as a sequence 我想得到e之后的位置 另一方面,切换顺序的效果与预期一样 > z3.simplify(z3.IntVal(1) +

如何向从
IndexOf
表达式获得的值添加偏移量?就是我怎么做?

> import z3
> s = 'hello'
> t = 'e'
> z3.simplify(z3.IndexOf(s, t, 0) + z3.IntVal(1))
z3.z3types.Z3Exception: Non-sequence passed as a sequence
我想得到
e
之后的位置

另一方面,切换顺序的效果与预期一样

> z3.simplify(z3.IntVal(1) + z3.IndexOf(s, t, 0))
2

你在z3py中发现了一个bug

错误出现在这一行:

内容如下:

返回SeqRef(Z3_mk_seq_index(s.ctx_ref(),s.as_ast(),substr.as_ast(),offset.as_ast()),s.ctx)
相反,它应该说:

返回ArithRef(Z3_mk_seq_index(s.ctx_ref(),s.as_ast(),substr.as_ast(),offset.as_ast()),s.ctx)
我在他们的bug追踪器上报告过:


一旦您在z3.py的本地副本中进行了更改,您的程序就应该按原样工作。或者您可以等到他们发布修复程序。

谢谢!非常感谢。顺便问一下,您知道如何在z3的python API上调用doctests吗?我没有看到上面有任何文档。如果可能的话,我想贡献一个补丁和一个测试,以确保这个问题得到快速解决。我相信他们有某种内置机器人,可以在提交时运行所有测试。但是我不知道如何在本地运行它。请看这里: