【问题标题】:Dafny, no duplicates in an arrayDafny,数组中没有重复项
【发布时间】:2018-11-03 14:15:40
【问题描述】:

在我的程序中,我有一个 sorted 谓词。

forall i,j :: 0<=i<j<a.Length ==> a[i]<a[j]

我认为只检查&lt; 而不是&lt;= 可以避免数组中的重复,但无论如何我想要一个避免重复的谓词。 我使用了排序谓词但检查不相等

forall i,j :: 0<=i<j<a.Length ==> a[i]!=a[j]

有没有更好的方法来做到这一点,通过其他关键字inexistmatch 如果它没有被弃用?

【问题讨论】:

  • 在什么意义上更好?
  • @Theodore 更短,如果有任何保留关键字或专门用于此的技术

标签: z3 verification dafny


【解决方案1】:

Dafny 中没有“不包含重复项”的内置概念。

我认为你的表达方式非常好。另一种(更长,等效,但可能更清晰)的方式是

forall i, j | 0 <= i < a.Length && 0 <= j < a.Length && i != j :: a[i] != a[j]

Dafny 很容易证明这两种写法是等价的。

【讨论】:

猜你喜欢
  • 2021-06-08
  • 2019-03-21
  • 1970-01-01
  • 2018-12-28
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
  • 2021-07-03
相关资源
最近更新 更多