如何对依赖于未绑定变量的模块进行模型检查?
How do I model-check a module that depends on an unbound variable?
我现在正在经历指定系统,我对如何对以下模块进行模型检查感到有点困惑:
---------------------------- MODULE BoundedFIFO ----------------------------
EXTENDS Naturals, Sequences
VARIABLES in, out
CONSTANT Message, N
ASSUME (N \in Nat) /\ (N > 0)
Inner(q) == INSTANCE InnerFIFO
BNext(q) == /\ Inner(q)!Next
/\ Inner(q)!BufRcv => (Len(q) < N)
Spec == \EE q : Inner(q)!Init /\ [][BNext(q)]_<<in, out, q>>
=============================================================================
我看到 Init
和 BNext
公式都是运算符,由 q
参数化。我如何将其提供给模型检查器?
你不能:\E x : P(x)
是一个无界表达式,TLC 无法处理。 Specifying Systems 中的许多规范无法建模。最近的指南,例如 TLA+ Hyperbook 或 Learn TLA+,更加谨慎地保持其所有规范的可建模性。
我现在正在经历指定系统,我对如何对以下模块进行模型检查感到有点困惑:
---------------------------- MODULE BoundedFIFO ----------------------------
EXTENDS Naturals, Sequences
VARIABLES in, out
CONSTANT Message, N
ASSUME (N \in Nat) /\ (N > 0)
Inner(q) == INSTANCE InnerFIFO
BNext(q) == /\ Inner(q)!Next
/\ Inner(q)!BufRcv => (Len(q) < N)
Spec == \EE q : Inner(q)!Init /\ [][BNext(q)]_<<in, out, q>>
=============================================================================
我看到 Init
和 BNext
公式都是运算符,由 q
参数化。我如何将其提供给模型检查器?
你不能:\E x : P(x)
是一个无界表达式,TLC 无法处理。 Specifying Systems 中的许多规范无法建模。最近的指南,例如 TLA+ Hyperbook 或 Learn TLA+,更加谨慎地保持其所有规范的可建模性。