在z3中,如何获取字符串的上半部?

时间:2019-03-01 18:10:49

标签: z3 z3py

我想断言我的字符串变量的 upper 等于一个字符串值。例如

> v = z3.String('var')
> v.upper() == z3.StringVal('HELLO')

但是,我没有看到从z3的string API取得优势的方法。我该怎么做?

我发现两个类似的问题12似乎很痛苦。这仍然是最先进的吗?

1 个答案:

答案 0 :(得分:2)

是的,这是最新技术。无法使用z3提供的字符串API来完成此操作。

请注意,这对于字符串和序列都是一个问题,问题的症结在于没有API可以访问某个位置的“元素”。 (在Z3中,字符串只是宽度为8的位向量的序列。)

很久以前,z3提出了添加此API的请求:https://github.com/Z3Prover/z3/issues/1302

您可能想在这里表达您的要求,以便他们可能会增加支持!

(请注意,一些更高级的API通过提供一种简单的方法来访问该位置的元素,从而向用户隐藏了这种复杂性。这是在SBV库中进行的操作:https://github.com/LeventErkok/sbv/blob/master/Data/SBV/List.hs#L135-L171。但这是这么简单的事情需要做很多工作,以至于我希望底层的求解器得到支持。)