Dafny,数组中没有重复项
Dafny, no duplicates in an array
在我的程序中我有一个 sorted
谓词。
forall i,j :: 0<=i<j<a.Length ==> a[i]<a[j]
我认为只检查 <
而不是 <=
可以避免数组中的重复,但无论如何我想要一个避免重复的谓词。
我使用了排序谓词但检查不相等
forall i,j :: 0<=i<j<a.Length ==> a[i]!=a[j]
有没有更好的方法,通过其他关键字 in
或 exist
或 match
如果它没有被弃用的话?
Dafny 中没有 "does not contain duplicates" 的内置概念。
我觉得你的表达方式非常好。另一种(更长,等效,但可能更清晰)的方式是
forall i, j | 0 <= i < a.Length && 0 <= j < a.Length && i != j :: a[i] != a[j]
Dafny 很容易证明这两种写法是等价的。
在我的程序中我有一个 sorted
谓词。
forall i,j :: 0<=i<j<a.Length ==> a[i]<a[j]
我认为只检查 <
而不是 <=
可以避免数组中的重复,但无论如何我想要一个避免重复的谓词。
我使用了排序谓词但检查不相等
forall i,j :: 0<=i<j<a.Length ==> a[i]!=a[j]
有没有更好的方法,通过其他关键字 in
或 exist
或 match
如果它没有被弃用的话?
Dafny 中没有 "does not contain duplicates" 的内置概念。
我觉得你的表达方式非常好。另一种(更长,等效,但可能更清晰)的方式是
forall i, j | 0 <= i < a.Length && 0 <= j < a.Length && i != j :: a[i] != a[j]
Dafny 很容易证明这两种写法是等价的。