有没有办法读取 dafny 中 class 对象数组的字段

Is there a way to read fields of an array of class objects in dafny

假设我有一个 Player class 在 dafny 中有一个名为 score 的字段,我想对其进行排序。在 dafny 中有没有一种方法可以让我访问 class 之外的 class 的字段。这是一个片段:

predicate PlayersSorted(a: array<Player>)
reads a
{
  forall j, k :: 0 <= j < k < a.Length ==> a[j].score <= a[k].score
}

这在尝试访问分数字段时出现错误 insufficient reads clause to read field,但我似乎无法在手册中找到允许我执行此操作的读取子句。如果那不可能,任何人都可以就如何验证 class 类对象的排序提出建议。

您需要为数组元素添加一个reads子句,例如reads set x | x in a[..].

展望未来,在使用 modifies/reads 子句时,您可能还想查看 http://leino.science/papers/krml221.pdf 的第 9 章(动态框架)以了解一些习语。