问题标签 [loop-invariant]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
547 浏览

swap - Dafny 使用交换验证插入排序

我正在研究如何使用 dafny 来验证使用“交换”相邻元素的插入排序,但我找不到 while 循环的合理不变量,谁能帮我修复它?这是链接:http ://rise4fun.com/Dafny/wmYME

0 投票
1 回答
1252 浏览

arrays - (Dafny) 将数组的元素添加到另一个 - 循环不变量

我有一个函数sum,它接受两个数组ab作为输入并b修改b[i] = a[0] + a[1] + ... + a[i]. 我写了这个函数,想用 Dafny 验证它。但是,Dafny 告诉我,循环可能不会维护我的循环不变量。这是代码:

我该如何解决这个错误?

0 投票
1 回答
80 浏览

iteration - 对于这一小段代码,我如何找到循环不变量?

前置条件:len(list) >= 2 的整数列表

后置条件:返回第二小的值。如果列表中存在两个最小值,则返回最小值。

非常感谢。

0 投票
1 回答
2582 浏览

sorting - (Dafny) 对数组进行排序 - 循环不变量

这是一个用Dafny编写的简单排序算法

代码没有错误。但是,如果我从forall m,n | 0 <= m < j < n <= i :: a[m] <= a[n]内部循环中删除不变量,Dafny 会告诉我循环sorted(a,j,i+1)可能不会维护不变量。

  1. 这是为什么?

  2. 怎么能猜到一 forall m,n | 0 <= m < j < n <= i :: a[m] <= a[n] 开始就需要不变量呢?

    我试图在纸上证明这个程序,但是在构造内部循环的不变量时我不需要这个不变量。

0 投票
1 回答
471 浏览

c - 我将如何使用初始化-维护-终止技术证明算法正确?

在函数执行过程中必须满足哪些条件?(断言)

我想确保我的断言能够在运行第 i 个循环后描述我所知道的真实情况。

这只是一个迭代线性搜索函数,如果找到目标,则返回目标的索引,否则返回 -1。

0 投票
1 回答
515 浏览

formal-verification - 与 Dafny 一起证明 100 名囚犯和一个灯泡

考虑解决100 名囚犯和一个灯泡问题的标准策略。这是我在 Dafny 中对其建模的尝试:

然而,它最终无法证明这一点I == P。为什么?我可能需要进一步加强循环不变量,但无法想象从哪里开始......

0 投票
1 回答
3355 浏览

python-2.7 - tensorflow while_loop形状不变量上的ValueError

错误是:

ValueError:while_12/Merge:0 的形状不是循环的不变量。它以形状 (1, 6) 进入循环,但在一次迭代后具有形状 (?, ?)。shape_invariants在循环变量上使用 tf.while_loop 或 set_shape()的参数提供形状不 变量。

似乎变数

contigs_index

是负责任的,但我真的不知道为什么!我展开循环执行每个语句,但找不到任何形状不匹配!

0 投票
1 回答
999 浏览

loop-invariant - dafny 中的指数方法:可能无法保持不变量

我开始学习 Dafny,我刚刚学习了不变量。我有这个代码:

给定的错误如下:“这个循环不变量可能不会被循环维护。” 我想我可能需要另一个不变量,但我认为我的代码除此之外是正确的(我猜)。任何帮助表示赞赏。提前致谢。

0 投票
1 回答
447 浏览

c - 如何用frama-c wp中的计算证明迭代循环?

我有我的测试代码(用于研究 WP 循环不变量),它在数组单元格中添加了两个长整数,每个数字的表示形式:

我只想指定最后一个循环不变量。我已经用 \at(a[i], LoopCurrent) 尝试了一些 ACSL 代码。我收到未知状态或超时。最后,我完成了一个公理递归解决方案,但没有任何成功。

我现在不知道我还应该尝试什么来验证这一点。帮助?

更新:为实际计算创建了一个函数。改进的公理。仍然有超时状态。使用来自 opam 的 Frama-C 最新版本以默认设置运行(超时 = 10,证明者 Alt-Ergo)。

0 投票
1 回答
121 浏览

algorithm - 为什么插入排序算法的终止循环不变量中的 j = n + 1 ?

我目前正在阅读 TCRC Introduction to Algorithms 3rd edition 教科书的第 2 章,并且正在阅读作者对该算法的循环不变量的解释。我理解作者的初始化和维护逻辑。然而,终止是我有点陷入困境的。作者声称在终止时,j = n + 1。然而,在算法的伪代码中,j 从 2 循环到 n。所以不应该 j = n - 1 吗?

编辑:这本书的插入排序伪代码是:

编辑:仔细阅读后,我终于明白了为什么 j = n + 1 在终止期间。这是因为 for 循环从 2 变为 n(包括),所以在 j 超过 n 之后,循环终止,因此在终止时 j = n + 1。我很感激帮助。