dafny相关内容

Dafny 无法证明函数方法等价,高阶多态递归与线性迭代

这个消息会有点长,但那是因为我想尽可能地解释它. 在 Dafny 中,我遇到了下一个问题:给定一个数组,计算发生这种情况的长度为 k 的段的数量;片段左半部分的正数大于或等于右半部分. 作为一个例子(想象段只能是偶数,所以没有讨论半是什么): k=2 --->计数(数组[-4,-2,2,1],k)--->2,因为 [-4,-2] 满足并且 [2,1]k=4 --->计数(数组[-4, ..

如何将 Dafny 代码与 C# 程序集链接

我正在尝试构建和运行一个 James Wilcox 结合 Dafny 代码和 C# 代码的示例程序.我在 Mac 上使用 mono.该答案中的构建命令对我不起作用: $ dafny fileiotest.dfy fileionative.cs达夫尼 3.0.0.20820Dafny 程序验证器完成 4 个验证,0 个错误编译后的程序写入 fileiotest.cs将程序编译为 fileiotes ..
发布时间:2021-11-24 12:02:27 C#/.NET

为什么 Dafny 不能验证某些简单的集合基数和关系命题?

这是一个简单的 Dafny 程序:两行代码和三个断言. 方法 Main(){var S := set s: int |0 S 的基数是 50,但 Dafny 无法验证此声明,如书面所述.同样,T显然是S的子集,Dafny可以验证这个说法;但 T 也是 S 的真子集,Dafny 无法验证这一说法. 导致这些困难的“幕后"是什么,正在学习和使用 Dafny 的人可能会预见和避免或处理这些困 ..
发布时间:2021-09-17 19:23:18 其他开发

Dafny 中的多态性

我正在尝试在 Dafny 中进行多态性,但我无法使其工作.我没有找到任何文档来帮助我解决这个问题.这是代码:https://rise4fun.com/Dafny/uQ1w trait Atom {叶?:布尔;}类叶子扩展原子{构造函数(){这个.叶子?:= 真;}}类节点扩展原子{左变量:原子;构造函数(){这个.叶子?:=假;this.left := new Leaf();}}方法 Main( ..
发布时间:2021-06-18 20:09:44 其他开发

Dafny 无法证明函数方法等价,高阶多态递归 vs 线性迭代

这个消息会有点长,但那是因为我想尽可能地解释它. 在 Dafny 中,我遇到了下一个问题:给定一个数组,计算发生这种情况的长度为 k 的段的数量;片段左半部分的阳性数大于或等于右半部分. 举个例子(想象段只能是偶数,所以没有关于一半是什么的讨论): k=2 --->计数(数组 [-4,-2,2,1],k)--->2,因为 [-4,-2] 满足并且 [2,1]k=4--->计数(数组 ..

Dafny和发生次数计数

我一直在研究Dafny中的引理的用法,但发现很难理解,显然以下示例无法验证,很可能是因为Dafny没有看到归纳法或诸如引理之类的证明计数属性?基本上,我不知道我该如何定义或需要定义什么来帮助说服Dafny计数是归纳的,等等.一些保证和不变性规范不是必需的,但这不是重点.顺便说一句,这在Spec#中更容易. 功能计数(项:seq ..
发布时间:2021-04-24 20:56:35 其他开发

用Dafny证明BFS的终止

我正尝试通过dafny来证明BFS的某些属性,但到目前为止,我甚至无法证明终止. 算法的进展是通过以下事实来保证的:节点一旦被着色为 false (被访问),它将不被着色为 true 再次. 仍然,我很难把这个事实翻译成正式的dafny 减少 : class Graph {var adjList:seq> ;;}方法BFS(G:Grap ..
发布时间:2021-04-16 19:08:34 其他开发

Dafny后置条件消息引起困惑

一个非常简单的乘法代码: 方法Product1(m:nat,n:nat)返回(res:nat) 确保res == m * n; { var m1:nat:= 0; var n1:nat:= 0; res:= 0; 而(m1 { n1:= 0; 而(n1 { res:= res +1; n1:= n1 +1; } m1:= m1 + 1; } } ..
发布时间:2020-06-11 01:50:55 其他开发

dafny输出为SMT文件

我成功编写了一个经过验证的Dafny程序,该程序给出了一个整数数组,并返回了最长的单调前缀的长度。永久链接位于此处。我希望能够检查Dafny使用的SMT文件,即使没有错误。我尝试了各种标志选项,例如: $ dafny example_longest_monotone.dfy / useSmtOutputFormat /printModelToFile:smt_file.smt ..
发布时间:2020-06-11 01:50:53 其他开发

在dafny中创建类类型的数组

在创建我在dafny中创建的类类型的对象数组时遇到问题。问题是初始化该类型的新数组时,我在vscode中遇到此错误: 除非为该数组提供了初始化程序元素,则新的“杯子”数组必须为空大小 这是代码(实际上是剥离后的版本,仍然说明了问题): 数据类型Drink = WATER |柠檬水|咖啡| TEA 课堂杯{ var量:int var Drink_type:饮料 var ..
发布时间:2020-06-11 01:50:50 其他开发

其他数组断言中包含的Dafny数组元素

问题很简单:为什么断言下面的语句会返回“违反声明”。 方法test() { var a:= new int [5]; a [0]:= 1; a [1]:= 1; a [2]:= 2; a [3]:= 3; a [4]:= 3; var b:= new int [3]; b [0]:= 1; b [1]:= 2; b [2]:= 3; assert( ..
发布时间:2020-06-11 01:50:44 其他开发

Dafny反向查询图

嗨,我有一个类似 map 的地图,我希望进行反向查找,即从一个值中找到一个键。 在Dafny中有没有办法做到这一点(例如 map.getKey(value))呢? 我想一种解决方案是将地图反过来,这样我就可以将 map 反过来 map ..
发布时间:2020-06-11 01:50:38 其他开发

不变集可能会有所不同

一种将整数数组的负元素复制到另一个数组中的方法具有以下属性:结果中的元素集是原始数组中元素的子集,在复制过程中保持不变。 下面的代码中的问题是,一旦我们在结果数组中写入内容,Dafny就会以某种方式忘记原来的集合是不变的。 如何解决此问题? 方法copy_neg(a:array) 需要!= null&& b!=空&& a!= b ..
发布时间:2020-06-11 01:50:36 其他开发

在达夫尼用另一张地图更新地图

我想在Dafny中编写以下函数,该函数将使用 m2 m1 >,这样 m2 会覆盖 m1 : 函数update_map(m1:map):map 确保 (对于m2中的总k :: k ==> update_map(m1,m2)[k] == m2 [k])&& (forall k ::!(k in m2)&& k in m1 ..
发布时间:2020-06-11 01:50:34 其他开发

如何阅读dafny反例

我想了解Dafny提出的反例。我以以下代码为例: function update_map(m1:map< ; K,V>,m 2:图):图。 确保 (对于全部k ::在m1中的k ||在m2中的k ==>在update_map(m1,m2)中的k)&& (对于m2中的总k :: k ==> update_map(m1,m2)[k] == ..
发布时间:2020-06-11 01:50:31 其他开发

Dafny没有条件可触发谓词

对于井字游戏,我有以下代码段Dafny代码,以检查玩家1在棋盘上是否有获胜行: 谓词isWinRowForPlayer1(board:array2) 读取board 需要board.Length0 == board.Length1 == 3&& isValidBoard(board) { 存在i :: 0 (forall j : ..
发布时间:2020-06-11 01:50:29 其他开发

Dafny:复制数组区域方法验证

我正在着手比较几种在考虑验证的情况下创建的语言(Whiley,Dafny和Frama-C等)。我得到了该函数的示例,该函数将一个数组的区域复制到另一个数组中的另一个位置在目标数组中。我想出的规范在Dafny中看起来像这样: 方法复制(src:array ..
发布时间:2020-06-11 01:50:26 其他开发