这个VMT公司格式是SMT-LIBv2(简称SMT2)表示符号转换系统的格式。

下面的示例显示了一个简单的nummv模型(左)及其对应的VMT转换(右)。

nuXmv公司VMT公司
--这是一条评论
主模块
VAR x:整数;
初始x=1;
TRANS next(x)=x+1;
因瓦规范x>0;
; 这是一条评论
(声明fun x()Int)
(声明fun xn()Int)
(define fun.sv0()Int(!x:下一个xn)
(define fun.init()Bool(!(=x 1):初始真)
(define fun.trans()Bool(!(=xn(+x 1)):真转换)
(定义fun.p0()Bool(!(>x 0):因瓦特性0)

VMT利用SMT2语言提供的将注释附加到术语和公式的功能,以便指定转换系统的组件和要验证的属性。更具体地说,使用了以下注释:

  • :下一个名称用于表示状态变量。对于每个变量在模型中,VMT文件包含一对变量,cn,分别表示当前版本和下一版本. 这两个变量通过注释连接起来c具有属性:下一个xn. 所有与另一个变量无关的变量:下一个属性被视为输入。
  • 真:初始化用于指定模型初始状态的公式。此公式既不应包含下一个状态变量,也不应包含输入变量(这个“笨蛋” 价值是的因为当前的SMT2标准要求注释始终具有关联的值,所以需要在注释中
  • :trans真用于指定转换关系的公式。
  • :因瓦属性idx公司用于指定不变属性,即形式的公式G p公司,其中p公式是否有注释:因瓦属性. 非负整数idx公司属性的唯一标识符。
  • :live属性idx公司用于指定窗体的LTL属性F G p公司,其中p公式是否有注释:live属性. 非负整数idx公司属性的唯一标识符。

在VMT文件中,只有带注释的术语及其子术语才有意义。忽略任何其他术语。此外,VMT文件中只允许出现以下命令:集合逻辑,设置选项,声明排序,定义排序,宣布有趣,定义乐趣. (为了方便起见(断言为真)命令允许出现在文件末尾。)

由于SMT2格式(以及从SMT2继承的VMT格式)不允许对变量的声明进行注释,因此最好在变量声明之后立即插入一组defined来指定变量之间的关系。例如,参见定义.sv0版在上面的例子中介绍了n.

在nuXmv的发行版中(在目录contrib中),我们还提供其他格式的转换脚本(例如BTOR公司语言选择器)对numv的语言,反之亦然。

nummv允许使用编写\u-vmt_模型命令。下面是一个与nummv的shell交互的简单示例,从保存在中的nummv模型生成VMT文件文件.smv.

     shell>nummv-int file.smv
nuXmv>开始;写入_vmt_model-o file.vmt;退出

nuXmv用户手册(pdf格式)更多细节。