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

In z3 How do I get the upper of a string in?

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

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

但是,我没有看到从 z3 的 string API 获得上层的方法。我该如何实现?

我发现两个类似的问题 and ,看起来很痛苦。这仍然是最先进的吗?

是的,这就是最先进的技术。没有其他方法可以使用 z3.

提供的字符串 API

请注意,这对字符串和序列都是一个问题,问题的症结在于没有API访问某个位置的"element"。 (在 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。但对于如此简单的事情来说,它需要做很多工作,我希望底层求解器得到支持。)