接下来是第二种注释语句类型Assumption。语法_(Assume E), 这个表达式是让VCC在接下来的额推理中,无视表达式E, 直接认可表达式E。

例:

int x, y;

_(assume x != 0)

y = 100 / x;

在没有那条assumption之前,VCC肯定不会通过验证,因为x可能为0。但是,加了Assumption之后,VCC就选择放弃治疗,将x!=0加入自己的资料库。但是你用assumption糊弄了VCC并没有什么好处,因为当代码实际运行的时候,没有人会管那堆注释,当X恰好为0的时候,程序就要crash了。所以一般来说,如果你希望你的验证可靠的话,Assumption就只能是验证过程中临时性的产物,最终还是尽量消除的。

听起来assumption不是个好东西,其实不然,他也是有不少作用的。

1.当你代码比较复杂,VCC难以验证的时候,你可以用assumption先跳过,assumption也是一个标记,日后再去验证他。

2.当你调试那些注释的时候,你可以用assumption缩小错误范围,帮助定位错误。

3.对于复杂的程序,VCC验证需要很长的时间,使用assumption可以让VCC放弃治疗,快速通过那段代码,提高你编写调试注释的效率。

4.可以使用assumption模拟程序运行环境。

甚至VCC自己验证程序的时候,也在背地里使用assumption。

int x;

_(assert x == 1)

_(assert x > 0)

比如在上面的例子中,第一个assertion会报错,但是第二个不会。因为VCC给第一个Assertion报错之后,为了继续找到更多的错误,他就写了一个_(assume x==1)。

例:

int x,y;

_(assert x > 5)

_(assert x > 3)

_(assert x < 2)

_(assert y < 3)

结果

_(assert x > 5) // fails

_(assert x > 3) // succeeds

_(assert x < 2) // fails

_(assert y < 3) // fails

<VCC笔记> Assumption的更多相关文章

  1. <VCC笔记> 溢出与unchecked

    在程序运算或者数据转换的时候,由于各种数据类型有各自的范围,运算的时候,其结果如果超出这个范围,就被称之为溢出.熟悉C#的同志们应该了解用来解决溢出(Overflow)问题的checked,unche ...

  2. <VCC笔记> 推断操作符,映射和量词

    推断操作符 在VCC中,==>符号意味着逻辑推理结果,即离散数学中的蕴涵关系.P==>Q等价于((!P)||(Q)).是非常常用的操作符. 量词(quantifier) 关于量词,这里指的 ...

  3. <VCC笔记> 关于Assertion

    这篇博客开始介绍VCC的用法,先用简单的例子介绍VCC的基本语法,当然面对更复杂的程序时,VCC也是将他简化然后分析的. 1.Assertion #include <vcc.h> int ...

  4. <VCC笔记>VCC简介与安装

    最近在学校跟着老师参与了一个代码验证的工作,需要使用Microsoft Research(微软学术)开发的VCC工具,是开源的,托管在Codeplex上.这东西英语资料极其少,中文资料基本没有.我只能 ...

  5. 加州大学伯克利分校Stat2.2x Probability 概率初步学习笔记: Section 2 Random sampling with and without replacement

    Stat2.2x Probability(概率)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...

  6. 加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 5 Window to a Wider World

    Stat2.3x Inference(统计推断)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...

  7. 加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 4 Dependent Samples

    Stat2.3x Inference(统计推断)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...

  8. 菜农群课笔记之ICP与ISP----20110412(整理版)

    耗时一上午时间对HOT大叔昨晚的群课内容进行温故并整理,现将其上传,若想看直播可到下面链接处下载:http://bbs.21ic.com/icview-229746-1-1.html        成 ...

  9. 《为大量出现的KPI流快速部署异常检测模型》 笔记

    以下我为这篇<Rapid Deployment of Anomaly Detection Models for Large Number of Emerging KPI Streams>做 ...

随机推荐

  1. 理解javascript中的连续赋值

    之前在扒源码时经常看到类似的连续赋值操作:  var a = b = 1;  在某度搜了众多前辈的博客,总算对这骚操作有点眉目. Case analysis 首先,javascript中连续赋值最典型 ...

  2. 树点分治入门题poj1741

    Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 24253   Accepted: 8060 Description ...

  3. Java程序员的两项通用能力

    工作这几年来,经历了很多.从小白到中级(手机里有一款叫中国象棋的游戏,里面给对弈中电脑水平分为小白.菜鸟.新手.入门.初级.中级.高级.大师.特级大师,编程我暂且按照这样来区分). 学校教给我的是从小 ...

  4. 关于mantisBT2.22安装插件Inline column configuration 2.0.0时提示缺少依赖jQuery UI Library 1.8

    1.首先直接下载最新的那个1.12即可 https://github.com/mantisbt-plugins/jQuery-UI/releases 2.上传到mantis的插件目录下:……manti ...

  5. 写给程序员的机器学习入门 (五) - 递归模型 RNN,LSTM 与 GRU

    递归模型的应用场景 在前面的文章中我们看到的多层线性模型能处理的输入数量是固定的,如果一个模型能接收两个输入那么你就不能给它传一个或者三个.而有时候我们需要根据数量不一定的输入来预测输出,例如文本就是 ...

  6. Spring_Bean的配置方式

    1.通过工厂方法配置bean beans-factory.xml <?xml version="1.0" encoding="UTF-8"?> &l ...

  7. STL中的迭代器分类

      STL中迭代器的分类 五类迭代器如下: 1.输入迭代器:只读,一次传递    为输入迭代器预定义实现只有istream_iterator和istreambuf_iterator,用于从一个输入流i ...

  8. PowerPC-关闭中断后,还能报sc中断?

    https://mp.weixin.qq.com/s/OsHIfPzYUagaTe5J88dIIg   一. 基本问题   FreeRTOS有一个宏,portYIELD_WITHIN_API(), 意 ...

  9. WebAPI之FormData

    MDNformdata参考--https://developer.mozilla.org/zh-CN/docs/Web/API/FormData MDNformdata参考--https://deve ...

  10. Java实现 LeetCode 242 有效的字母异位词

    242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = " ...