为NuSMV中的变量分配随机值

时间:2018-08-21 22:55:59

标签: nusmv

我在NuSMV中有以下代码。

MODULE main
VAR
   x : 0..5

所以x是一个变量,可以采用整数值0、1、2、3、4、5。接下来,我对其进行初始化并确定其转换规则。

ASSIGN
    init(x):=1;
    next(x) := case
         y=1 & z=23: 4;
         TRUE: 0..5;
    esac;

上面应该说的是x最初是1。然后,如果y = 1且z = 23,则x变成4,否则x可以从其域中假设任何随机值。我对此表示怀疑,这是逻辑的“其他”部分。我编码正确吗? y和z是此处未显示代码的变量。假设有y和z。

或者我应该写:

TRUE: {0,1,2,3,4,5};

因为我绝对知道this文档第4页中的上述内容是正确的。

但这对于很大的域是不可行的。假设x可以取0到293之间的任何值。

1 个答案:

答案 0 :(得分:0)

是的,这是正确的。

integer set {0, 1, 2, 3, 4, 5}也可以写成0 .. 5, 按照以下documentation

  

2.1.6设置类型

     

集类型用于标识表示一组值的表达式。   set有四种类型:boolean set,   integer setsymbolic setintegers-and-symbolic setset   类型可以以非常有限的方式使用。特别是   变量不能为set类型。仅range constantunion   运算符可用于创建set类型的表达式,并且仅   incase(• ? • : •)和赋值表达式可以具有   set类型的中间操作数。

     

每个set类型都有一个对应的   在其他类型中。尤其是

     
      
  • boolean set类型相对应的是boolean

  •   
  • integer set类型相对应的是integer

  •   
  • symbolic set类型相对应的是symbolic enum

  •   
  • integers-and-symbolic set类型相对应的是integers-and-symbolic enum

  •   
     

某些类型,例如无符号的word[•]signed word[•]没有   set类型对应项。

  

范围常数

     

range constant指定一组连续的整数   数字。例如,一个常数   -1..5表示一组数字-101234和{{1} }。   5的其他示例可以是range constant1..10-10..-10。的   1..300的语法规则如下:

range constant
     

,还有一个附加约束,即第一个整数必须为   小于或等于第二个整数。一个的类型   range_constant :: integer_number .. integer_number range constant