推断操作符

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

量词(quantifier)

关于量词,这里指的是全称量词(universal quantifier)和存在量词(existential quantifier)。

在VCC中全称量词的描述方法是 \forall  T v;E ,意思是“对于任意的T类型的v,表达式E均为真。

例如:

_(assert x > 1 && \forall int i; 1 < i && i < x ==> x % i != 0)

断言检验x是一个素数。

_(assert \forall int i; \forall int j; 0 <= i && i <= j && j < N ==> b[i] <= b[j])

断言数组b有序。

相似的,在VCC中存在量词的表达形式是 \exists T v; E,意思是”存在T类型的v,使得表达式E成立“。

例如:

_(assert \exists int i; 0 <= i && i < N && b[i] == 0)

断言数组b包含元素0。

映射(map)

VCC提供映射类型,使用方式有点像数组,但是他们的值不一定是一个简单的数或者字符,他是两种类型的数据之间的一种映射关系。如 \integer x [int]是一个从 int类型映射到\integer类型的映射,x[-5]就是在x中-5对应的\integer值,但是由于没有给出映射方式,谁也不知道-5映射到哪一个\integer上。

注:\integer 表示数学意义上的整数,而\natural则是自然数

关于映射的创建,一般使用lambda表达式。如 \lambda T x;E,表达式将返回一个从T类型的x映射映射到 ”x通过表达式E计算之后的结果“,如果表达式E的计算结果类型为S,那么这个映射的类型就是S[T]。

例:

_(ghost int av[\natural] = \lambda \natural i;buf[i])

忽略前面的ghost,以后再说,后面的表达式将创建一个av映射,从自然数映射到int类型,映射方式为buf[i]。

<VCC笔记> 推断操作符,映射和量词的更多相关文章

  1. Hibernate学习笔记-Hibernate关系映射

    1. 初识Hibernate——关系映射 http://blog.csdn.net/laner0515/article/details/12905711 2. Hibernate 笔记8 关系映射1( ...

  2. mybatis学习笔记(7)-输出映射

    mybatis学习笔记(7)-输出映射 标签: mybatis mybatis学习笔记7-输出映射 resultType 输出简单类型 输出pojo对象和pojo列表 resultMap result ...

  3. <VCC笔记> 溢出与unchecked

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

  4. <VCC笔记> 关于Assertion

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

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

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

  6. linux C学习笔记04--内存映射

    内存映射代码,打开一个文件与映射到内存中,对内存和文件的修改都会反映到文件中来,反之亦然,先贴代码,以后再完善: /****************************************** ...

  7. Unity学习笔记(2):注册映射

    在上一篇文章中(认识Unity)中概要介绍了Unity和Ioc,本节主要介绍IoC中的注册映射,并使用代码和配置文件两种方式进行说明. 定义依赖注入相关信息 定义ILogger接口 public in ...

  8. EF Code First 学习笔记:表映射

    多个实体映射到一张表 Code First允许将多个实体映射到同一张表上,实体必须遵循如下规则: 实体必须是一对一关系 实体必须共享一个公共键 观察下面两个实体: public class Perso ...

  9. redisbook笔记——redis内存映射数据结构

    虽然内部数据结构非常强大,但是创建一系列完整的数据结构本身也是一件相当耗费内存的工作,当一个对象包含的元素数量并不多,或者元素本身的体积并不大时,使用代价高昂的内部数据结构并不是最好的办法. 为了解决 ...

随机推荐

  1. 使用Html5对图片加水印及多图合成

                                                                             转载请注明原地址:                   ...

  2. Poj 最短路和次短路的个数 Dij+优化?。

    Description Tour operator Your Personal Holiday organises guided bus trips across the Benelux. Every ...

  3. Robot Framework(4)- 测试套件的基本使用

    如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 前言 因为是基于 ...

  4. Flexible 应用

    Flexibl.js 为我们做了一项工作,媒体查询工作,节约了许多操作 举个例子,移动端的页面设计稿是750px,我们自己换算rem单位,比如我想把屏幕划分为15等份,我就750/15=50,然后用所 ...

  5. Asp.net Identity身份与权限体系设计

    1 Identity 介绍 2 授权系统 图1 体系结构 3 自定义 Attribute 自定义 Attribute 继承于 AuthorizeAttribute,AuthorizeAttribute ...

  6. C# 委托浅析

    C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delegate) 是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变. 委托(Delegate)特别用于实现 ...

  7. 面试题: SpringBoot 的自启动原理

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 引言 不论在工作中,亦或是求职面试,Spring Boot 已经成为我们必知必会的技能项.除了比较老旧的 ...

  8. 使用turtle库画太极图

    from turtle import * pensize(3) penup() pencolor("black") reset() speed(10) pendown() circ ...

  9. Java实现 LeetCode 824 山羊拉丁文(暴力)

    824. 山羊拉丁文 给定一个由空格分割单词的句子 S.每个单词只包含大写或小写字母. 我们要将句子转换为 "Goat Latin"(一种类似于 猪拉丁文 - Pig Latin ...

  10. Java实现 LeetCode 780 到达终点(逻辑题)

    780. 到达终点 从点 (x, y) 可以转换到 (x, x+y) 或者 (x+y, y). 给定一个起点 (sx, sy) 和一个终点 (tx, ty),如果通过一系列的转换可以从起点到达终点,则 ...