注意:这个答案可能会迟到。
但是,由于这个问题被多次提出,我认为它仍然有用。
问题:A[p U A[q U r]]
相当于A[A[p U q] U r]
?
答案:没有。
为了证明不等式成立,提供单个Kripke 结构stA[p U A[q U r]]
已验证但未验证(或相反)A[A[p U q] U r]
就足够了。
现在,为简单起见,我们假设处理一个Kripke 结构,其中每个状态只有一个可能的未来状态。因此,我们可以忘记A
修饰符并考虑给定问题的LTL版本:是否[p U [q U r]]
等价于[[p U q] U r]
? .
让我们分解[p U [q U r]]
:
[q U r]
在匹配表达式的路径上为真{q}*{r}
[p U [q U r]]
在马赫的路径上是真的{p}*{[q U r]} = {p}*{q}*{r}
怎么样[[p U q] U r]
?
[p U q]
在匹配表达式的路径上为真{p}*{q}
[[p U q] U r]
在马赫的路径上是真的{[p U q]}*{r} = {{p}*{q}}*{r}
现在,{p}*{q}*{r} != {{p}*{q}}*{r}
.
事实上,{p}*{q}*{r}
匹配任何路径,其中有一个序列,p
并且r
没有q
沿途。
然而,{{p}*{q}}*{r}
没有。如果路径包含 的序列p
,则q
before的出现r
是强制性的。
因此,这两个公式是不等价的。
动手回答:
让我们使用NuSMV对提供相同反例的Kripke 结构进行编码
MODULE main ()
VAR
p: boolean;
q: boolean;
r: boolean;
INVAR !q;
INIT
!q & p & !r
TRANS
r -> next(r);
TRANS
p & !r -> next(r);
CTLSPEC A[p U A[q U r]];
CTLSPEC A[A[p U q] U r];
并检查它:
~$ NuSMV -int
NuSMV > reset; read_model -i test.smv; go; check_property
-- specification A [ p U A [ q U r ] ] is true
-- specification A [ A [ p U q ] U r ] is false
-- as demonstrated by the following execution sequence
Trace Description: CTL Counterexample
Trace Type: Counterexample
-> State: 1.1 <-
p = TRUE
q = FALSE
r = FALSE
事实上,一个属性得到验证,而另一个没有。