推断操做符,映射和量词

推断操做符数组

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

 

量词(quantifier)lambda

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

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

例如:方法

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

断言检验x是一个素数。ant

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

断言数组b有序。ghost

 

类似的,在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]。

相关文章
相关标签/搜索