这个CTL公式是等价的吗?是什么让它成立?

时间:2015-10-13 13:59:02

标签: logic ctl transitivity

我想知道下面的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,所以我想再试一次。

1 个答案:

答案 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

确实,一个属性已经过验证,但另一个属性未经过验证。