我在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之间的任何值。
答案 0 :(得分:0)
是的,这是正确的。
integer set
{0, 1, 2, 3, 4, 5}
也可以写成0 .. 5
,
按照以下documentation:
2.1.6设置类型
集类型用于标识表示一组值的表达式。
set
有四种类型:boolean set
,integer set
,symbolic set
,integers-and-symbolic set
。set
类型可以以非常有限的方式使用。特别是 变量不能为set
类型。仅range constant
和union
运算符可用于创建set
类型的表达式,并且仅in
,case
,(• ? • : •)
和赋值表达式可以具有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
表示一组数字-1
,0
,1
,2
,3
,4
和{{1} }。5
的其他示例可以是range constant
,1..10
,-10..-10
。的1..300
的语法规则如下:range constant
,还有一个附加约束,即第一个整数必须为 小于或等于第二个整数。一个的类型
range_constant :: integer_number .. integer_number
是range constant
。