- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我要证明的代码:
function rec_even(a: nat) : bool
requires a >= 0;
{
if a == 0 then true else
if a == 1 then false else
rec_even(a - 2)
}
method Even(key: int) returns (res: bool)
requires key >= 0;
ensures res == rec_even(key)
{
var i : int := key;
while (i > 1)
invariant 0 <= i <= key;
decreases i;
{
i:= i - 2;
}
res := i == 0;
}
但是我得到了一个后置条件错误:
stdin.dfy(13,0): Error BP5003: A postcondition might not hold on this return path. stdin.dfy(12,14): Related location: This is the postcondition that might not hold.
如果有任何方法可以证明均匀性的循环版本(while 循环或递归),我将不胜感激!
编辑:从代码中可能不是很明显,但我正在寻找关于 n 的归纳证明,dafny 至少应该能够找出方法案例。
我看过一些类似的证明,其中递归函数用于方法函数的循环不变量,只是不知道为什么它不适用于这种特殊情况。
您可以在此处试用 rise4fun 上的代码: https://rise4fun.com/Dafny/wos9
最佳答案
我发现在证明您的实现后置条件时存在问题,如果您从零开始,您可以为 0 建立循环不变量并从那里开始。
function rec_even(a: nat) : bool
decreases a
{
if a == 0 then true else
if a == 1 then false else
rec_even(a - 2)
}
lemma {:induction a} Lemma(a:int)
requires 1 <= a
ensures rec_even(a-1) ==> !rec_even(a)
{
}
method Even(n: int) returns (res: bool)
requires n >= 0;
ensures res == rec_even(n)
{
var i : int := 0;
while (i < n)
invariant 0 <= i <= n+1;
invariant rec_even(i)
decreases n-i;
{
i:= i + 2;
}
assert rec_even(i);
Lemma(i+1);
assert i == n ==> rec_even(n);
assert i == n+1 ==> !rec_even(i+1);
res := i == n;
}
最后一步需要一个引理来从最终的两种可能情况中为 i,(i==n) 或 (i==n+1) 建立否定情况。
希望对您有所帮助。
关于formal-verification - 在 Dafny 中显示循环均匀性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49332095/
我需要在半径R的圆内生成一个均匀随机点。 我意识到,通过在区间 [0 ... 2π) 中选择均匀随机的角度,并在区间 (0 ... R) 中选择均匀随机的半径,我最终会得到更多的点朝向中心,因为对于两
我想在一个正方形内生成 N 个点(均匀地)。我怎样才能做到这一点? 最佳答案 非常酷的问题,比我想象的要困难得多,但这就是想法。有关于 n 边形的论文,但我只会做正方形。因此,圆的均匀分布是一个常见问
考虑以下示例: import itertools import numpy as np a = np.arange(0,5) b = np.arange(0,3) c = np.arange(0,7)
SQL Server 将一组值分成 5 组,每组的 sum(count) 应该均匀分布。 表仅包含 2 列 rid 和 count。 create table t1(rid int, count in
我有以下简单的 HTML。 A B C 和 CSS: ul { width: 100%; display: flex; flex-direction:
我是一名优秀的程序员,十分优秀!