检查SMV中的CTL规范

时间:2017-07-28 22:31:48

标签: model-checking ctl nusmv

当我尝试在SMV中检查“EG(!s11included&!s10included)”时,报告为false并给出如下的计数器示例,我认为相反它支持此CTL规范。我的CTL规格有问题吗?

-- specification EG (!s11included & !s10included)  is false
-- as demonstrated by the following execution sequence
Trace Description: CTL Counterexample 
Trace Type: Counterexample 
  -> State: 9.1 <-
    s00included = TRUE
    s01included = TRUE
    s10included = FALSE
    s11included = FALSE

1 个答案:

答案 0 :(得分:0)

简短回答:

不,您的 CTL 规范没有任何问题:您观察到的是正常的,完全取决于您的型号规格。

该工具会打印反例,直至违反给定属性的第一个州(包含)。尽管对于操作人员来说它似乎有点武断,因为属性违规的原因有时会从执行跟踪本身隐藏,但从 CTL的角度来看,这种设计选择非常有意义。 模型检查。 需要注意的重要一点是,结果可以信任,更重要的是,通过运行模拟进行双重检查。

示例:

我邀请您查看以下示例。

MODULE main
VAR a : boolean;
VAR b : boolean;

ASSIGN
next(a) := case
    a = FALSE : { TRUE };
    TRUE      : { TRUE, FALSE };
  esac;

next(b) := case
    b = FALSE : { TRUE };
    TRUE      : { TRUE, FALSE };
  esac;

CTLSPEC EG (!a & !b);

在此模型中,只要a(分别为bFALSE,我们就会将其确定为TRUE,否则我们会允许它随意更改。

如果我们检查 CTL 属性(与您的属性完全相同),我们会获得以下反例

NuSMV > reset; read_model -i test.smv ; go; check_property
-- specification EG (!a & !b)  is false
-- as demonstrated by the following execution sequence
Trace Description: CTL Counterexample 
Trace Type: Counterexample 
-> State: 1.1 <-
  a = FALSE
  b = FALSE

如您所见,反例与您的 100%相匹配。到底是怎么回事?

嗯,基本上 NuSMV 保守地打印最少数量的状态,以达到违反财产的状态。在这种情况下,执行跟踪的初始状态已经违反了该属性,因为 next,deterministic,transition 会导致a的状态或bTRUE (在此特定情况下为两者)

NuSMV > pick_state -s 1.1
NuSMV > simulate -iv -k 2
********  Simulation Starting From State 3.1   ********

***************  AVAILABLE STATES  *************

================= State =================
0) -------------------------
  a = TRUE
  b = TRUE


There's only one available state. Press Return to Proceed.

Chosen state is: 0

***************  AVAILABLE STATES  *************

================= State =================
0) -------------------------
  a = TRUE
  b = TRUE


================= State =================
1) -------------------------
  b = FALSE


================= State =================
2) -------------------------
  a = FALSE
  b = TRUE


================= State =================
3) -------------------------
  b = FALSE


Choose a state from the above (0-3): ^C

我的猜想是你的模型有类似的行为,这就是你获得相同结果的原因。