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

推断操作符

在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]。

posted @ 2015-12-04 20:16  阳光是金色的  阅读(646)  评论(0编辑  收藏  举报

Always loyal to lorreta!