我有两个规格:System 和 SystemMC。系统规范是我指定的系统的“好”规范,对文档很有用。它定义了一个 CONSTANT MessyAction(_) (在我正在编写的实际规范中,一个散列函数),以一种有效的模型可检查方式指定它是混乱的,因此会降低规范的可读性。我在 SystemMC 规范中实现了 MessyAction(_),所以我可以对系统规范进行模型检查。但是,解析器在 SystemMC 规范中给出了以下错误:
实例化模块“System”中的级别错误:替换“MessyAction”的表达式或运算符的级别最多只能为 0。
这个错误是什么意思,我怎样才能在不添加一堆针对 TLC 优化的东西的情况下实现模型检查系统规范的目标?这是系统规格:
------------------------------- MODULE System -------------------------------
EXTENDS
Naturals
CONSTANTS
MessyAction(_)
VARIABLES
Counter
-----------------------------------------------------------------------------
TypeInvariant ==
/\ Counter \in Nat
Init ==
/\ Counter = 0
Increment ==
/\ Counter' = Counter + 1
/\ MessyAction(Counter)
Next ==
\/ Increment
=============================================================================
这是 SystemMC 规范:
------------------------------ MODULE SystemMC ------------------------------
EXTENDS
Naturals
CONSTANTS
MaxCounterValue
VARIABLES
Counter,
PastValues
ASSUME MaxCounterValue \in Nat
-----------------------------------------------------------------------------
MessyAction(c) ==
/\ PastValues' = PastValues \cup {c}
S == INSTANCE System
TypeInvariant ==
/\ PastValues \subseteq Nat
/\ S!TypeInvariant
Init ==
/\ PastValues = {}
/\ S!Init
Increment ==
/\ Counter < MaxCounterValue
/\ S!Increment
Next ==
\/ Increment
=============================================================================