我想知道下面的CTL公式是否相同,如果是的话,你能帮我说服自己吗? A(p U(A(q U r)))= A(A(p U q)U r)
我无法想出任何与之相矛盾的模型,而我的胆量告诉我公式是等价的,但我找不到支持该陈述的任何等价。我试图重写等价 A(p U q)== not(E((不是q)U不是(p或q))或EG(不是q)) 做了一些有用但却多次失败的事情。
我查看了我的课程资料以及谷歌,但我找不到任何东西。但我确实找到了another question here that has the same equivalence question but with no answer,所以我想再试一次。
答案 0 :(得分:0)
注意:这个答案可能会迟到。
但是,由于提出了问题multiple times,我认为它仍然有用。
问题:A[p U A[q U r]]
是否等同于A[A[p U q] U r]
?
回答:否。
为了证明不平等,只需提供一个 Kripke Structure s.t. A[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]
在路径上的 true 与表达式{q}*{r}
匹配[p U [q U r]]
在路径上的 true 马赫{p}*{[q U r]} = {p}*{q}*{r}
[[p U q] U r]
怎么样?
[p U q]
在路径上的 true 与表达式{p}*{q}
匹配[[p U q] U r]
在路径上的 true 马赫{[p U q]}*{r} = {{p}*{q}}*{r}
现在,{p}*{q}*{r} != {{p}*{q}}*{r}
。
事实上,{p}*{q}*{r}
匹配任何路径,其中p
序列后跟r
,并且q
沿着{{p}*{q}}*{r}
方式。
但是,p
没有。如果路径包含q
序列,则必须在r
之前出现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];
。
因此,这两个公式并不相同。
实践答案:
让我们编码一个 Kripke结构,它使用 NuSMV 提供相同的反例
~$ 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
并检查:
Foo
确实,一个属性已经过验证,但另一个属性未经过验证。