- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Frama-C 的新手,我想正确学习 ACSL 语法。我有这个虚拟示例,Jessie 插件无法验证第 9 行和第 12 行。我是否遗漏了什么?要验证的函数(等于)将检查两个数组(a 和 b)在每个索引处是否具有相同的值:
/*@
requires \valid_range(a,0,n-1);
requires \valid_range(b,0,n-1);
requires n >= 0;
requires i >= 0 && i <= n;
assigns i;
behavior all_equal:
assumes i == n;
ensures \result == 1;
behavior some_not_equal:
assumes i != n;
ensures \result == 0;
*/
int equal(int a[], int n, int b[], int i) {
/*@
loop invariant 0 <= i <= n;
loop assigns i;
loop variant n-i;
*/
for (i = 0; i < n; i++) {
if (a[i] != b[i])
return 0;
}
return 1;
}
最佳答案
这里有一些不正确的地方:
behavior all_equal:
assumes i == n;
ensures \result == 1;
behavior some_not_equal:
assumes i != n;
ensures \result == 0;
在assumes
子句中,所有变量都在函数的预状态中求值。这意味着如果您有两个大小相同的数组 n
,并且假设 i
是 0
(这不可能,请参阅下一个解释),i == n
将始终失败,除非数组的大小为 0
另一件事:您似乎正在使用 i
作为循环控制的变量,在循环开始时将其设置为 0,但是在您的注释中您说 i
,在程序的预状态中,介于0
和n
之间。这与我之前所说的相结合是杰西无法证明这一点的原因之一。
最后,您无法证明这一点的主要原因是因为您缺少一个基本的循环不变量,它保证两个数组对于当前迭代之前的所有数组索引都是相等的:
loop invariant loop invariant \forall integer k; 0 <= k < i ==> a[k] == b[k];
有了这个不变量,您现在可以更好地指定您的行为。针对您的问题的正确解决方案是:
/*@
requires \valid_range(a,0,n-1);
requires \valid_range(b,0,n-1);
requires n >= 0;
behavior all_equal:
assumes \forall integer k; 0 <= k < n ==> a[k] == b[k];
ensures \result == 1;
behavior some_not_equal:
assumes \exists integer k; 0 <= k < n && a[k] != b[k];
ensures \result == 0;
*/
int equal(int a[], int n, int b[]) {
int i = 0;
/*@
loop invariant 0 <= i <= n;
loop invariant \forall integer k; 0 <= k < i ==> a[k] == b[k];
loop assigns i;
loop variant n-i;
*/
for (i = 0; i < n; i++) {
if (a[i] != b[i])
return 0;
}
return 1;
}
关于使用Jessie插件和Frama-C的验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085068/
我在树莓派上安装了 raspbian jessie。我试图将 iceweasel 网络浏览器配置为在启动时启动。 在/etc/xdg/lxsession/LXDE-pi/autostart 下已经配置
我是 Linux/Raspberry PI 的新手。 我想在新的 shell 窗口中从 shell 脚本运行命令,因为像“cvlc music.mp3”(VLC PLAYER)这样的命令会阻塞 she
当我尝试升级系统时出现以下错误。我是 debian 的新手,一直在尝试安装一些依赖于 python 的模块。但是我似乎无法安装其中任何一个,甚至无法升级或更新其他应用程序。 Reading packa
我一直在研究 raspberry pi,我已经能够在我的 raspbian pi 零上安装和配置 raspbian jessie,但我找不到任何 raspbian jessie 模拟器可以在我的电脑上
我正在尝试将树莓派与 MatLab 连接起来。我使用 matlab 中的工具箱来配置树莓派。它会自动通过网络连接,但它也会在该设置过程中为您提供操作系统,没有它您无法连接到树莓派。虽然它提供的系统在技
我正在使用 spaCy,它需要比 Debian Jessie 提供的系统版本更新得多的 python-numpy 版本。所以我使用 apt-get 删除 numpy 并使用 pip 和 pip3 安装
我总是收到此错误: name@debian-name:~$ sudo apt-get update [sudo] password for name: Ign http://archive.canon
好的,我这里有一盒 Windows 主机(Debian Linux 8 VM - Oracle)-设置。一台实时工作的机器,DNS apache php...等等。 IP 是 **A.A.A.A**
我正在尝试配置 onedrive-d,但出现错误 Traceback (most recent call last): File "/usr/local/bin/onedrive-d",
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
根据 this article代码完成应该适用于带有 youcompleteme 插件的任何语言。我在 Debian Jessie 中设置如下: installed vim from reposito
我有一台旧的专用服务器,想将其升级到最新的操作系统版本。 我正在寻找从 升级的最佳方式Debian 6 Squeeze => Debian 8.6 杰西 . 最佳答案 首先,请记住,从一个 Debia
与 apache wheezy 相同的虚拟配置工作正常。例如: 服务器名称 lgbs 服务器别名 www.lgbs DocumentRoot /home/vdomain/app/web SetEnv
我已经安装了 Debian (Jessie) 的最新稳定版本,但/etc/inittab 不存在。我读过名为 Sysv 的新 init 系统。 我需要启动一个带参数的服务,我曾经在 inittab 中
我正在尝试在 debian jessie 发行版上安装 mysql-shell。我已经成功安装并配置了 mysql-apt-config,然后是 mysql 5.7 服务器。我按照mysql官方网站上
大家早上好。我正在寻找一些帮助来弄清楚我收到的错误究竟是怎么回事。我最近从 Pi B+ 升级到运行在 Debian Jessie 上的 Pi 2。我将我的 Pi 用作基于 Web 的信息亭和基于 We
所以在我上次 apt-get update && apt-get upgrade && apt-get dist-upgrade 之后,我的 Fail2Ban 升级到 0.9.5 没有任何问题,我仔细
我需要安装 Revolution R在 Debian Jessie(版本 8,64 位)上。 在我的系统上已经安装了R 3.1.1和 Rstudio . Revolution download pag
我读过很多这方面的帖子,但我尝试的似乎都不起作用。 我有一台 Windows 10 机器,上面有一个共享。该共享不需要用户名或密码即可访问。我可以从 pi 很好地 ping 机器。该共享具有“所有人”
我有四台服务器,每台服务器都具有相同的硬件规范,运行具有相同配置的 proxmox 4。昨天我尝试对每个文件进行 tar 备份。我创建了简单的脚本: tar -zcvpf /mnt/backup1/r
我是一名优秀的程序员,十分优秀!