检查 SMV 中的 CTL 规范
Check CTL specification in SMV
当我尝试在SMV中检查"EG (!s11included & !s10included)"时,它被报告为错误并给出了一个反例如下,我认为相反它支持这个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
简答:
不,您的 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
(resp. b
)为 FALSE
时,我们确定性地将其设置为 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 保守地打印最少数量的必要状态以达到违反 属性 的状态。在这种情况下,执行轨迹的 initial-state 已经违反了 属性,因为 next, deterministic, transition 导致a
或 b
是 TRUE
的状态(在这种特定情况下,两者都是):
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
我的推测是你的模型有类似的行为,这就是你得到相同结果的原因。
当我尝试在SMV中检查"EG (!s11included & !s10included)"时,它被报告为错误并给出了一个反例如下,我认为相反它支持这个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
简答:
不,您的 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
(resp. b
)为 FALSE
时,我们确定性地将其设置为 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 保守地打印最少数量的必要状态以达到违反 属性 的状态。在这种情况下,执行轨迹的 initial-state 已经违反了 属性,因为 next, deterministic, transition 导致a
或 b
是 TRUE
的状态(在这种特定情况下,两者都是):
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
我的推测是你的模型有类似的行为,这就是你得到相同结果的原因。