在 viper 中乘以通配符有什么意义吗?

Does multiplying a wildcard in viper mean anything?

VerCors 中的一个错误生成了一些看起来像这样的银:

field f: Int

method test(n: Int, x: Ref)
requires n == 100
requires acc(x.f, wildcard * n)    
{}

Viper 似乎接受了这一点,但我不明白这意味着什么。

直觉上,这意味着被调用者获得了一个很小的(但 non-zero)许可量——乘以 n。实际上,这应该与仅获得少量(即 acc(x.f, wildcard))没有什么不同,尽管可以设计人为的情况,可能涉及 perm,其中它有所不同。

底线:这个例子确实有点令人困惑,语义也不是很明显,但一切都很明确。