admin管理员组

文章数量:1530018

目录

1. 引言

2. LTL

2.1 Action的逻辑

3. FSP—流动性

3.1 FSP– Indexed fluents

4. FSP – Fluent expressions

5. 时间逻辑—“always” 和 “eventually”

5.1 时间逻辑—“always”

5.2 时间逻辑—“eventually”

6. FSP – Safety and liveness

7. 结合时间性运算符

8. 时间逻辑法则

9. 时间逻辑的表达能力

10. 时间逻辑—“until”操作符

11. 时间逻辑—“next”操作符

12. 重新审视相互排斥

13. 表达Mutex的安全性和活泼性

14. 现实世界中的模型检查


1. 引言

在上两讲中,我们看到如何指定对并发系统的每一次执行都成立的属性。这些安全和有效性属性对于描述系统的某些属性非常有用。然而,它们并不像逻辑属性那样强大。

逻辑属性是由命题和逻辑运算符组成的描述,如and、not和or。你可能已经学过命题逻辑,它允许我们描述关于系统在某一瞬间的状态的属性。然而,FSP模型没有状态,它的时间是线性的,连续的,它们由在连续时间中发生的动作组成。

2. LTL

我们如何解决上述问题,为FSP模型添加命题逻辑。在这里,我们超越了命题逻辑和安全/有效性属性,而采用了线性时态逻辑(LTL)。

LTL谓词给了我们比命题逻辑或安全/有效性属性更大的灵活性,并允许我们指定更复杂的系统属性,然后可以用LTSA进行检查。

2.1 Action的逻辑

逻辑学中的原子命题涉及到系统的状态。在软件分析中,这通常是基本命题,如和。我们该如何思考并发模型的逻辑呢?首先我们提供一个思路:

因为在并发的模型中,我们通常关注的是action,以及它们发生的顺序。我们可以采用命题逻辑的思想,说当action a执行时,命题a是真的,而在执行其他action的时候命题a是假的。但这种思路有问题,因为每次只有一个命题是真的。

实际上,我们感兴趣的是关于一段时间内的行动序列的属性,而不仅仅是一个瞬间的时间。时间逻辑允许我们谈论持续时间和事件的相对时间(相对于绝对时间)。

3. FSP—流动性

fluent是一种可以随时间变化的属性。

fluent使我们能够描述一个系统在其生命周期中的属性,而不仅仅是在一个瞬间。

fluent被大量用于逻辑学,特别是人工智能。

在FSP中,一个fluent被描述为:

fluent FL = <{s1,...,sN}, {e1,...,eN}>

和都是actions:

fluent FL

fluent FL是一个命题,当中的任何一个动作发生时,FL变成了True。而当中的任何一个动作发生时,FL又变为False。

如果我们想要一个最初是True的fluent,我们可以用以下方式来描述它:

fluent FL = <{s1,...,sN}, {e1,...,eN}> initially 1

1 代表 true,0 代表 false

以交通灯系统为例,当我们预计绿灯亮的时候,我们可以说:

fluent GREEN = <{green}, {yellow ,red}> initially 1

也就是说,当绿色动作发生时,fluent GREEN为真,而当黄色或红色发生时,fluent 为假。

因此,这个 fluent 不是一个动作:当黄色或红色以外的动作发生时(比如说,动作 wander 或者 none),它仍然是真的,尽管动作绿色目前不是真的。

3.1 FSP– Indexed fluents

与进程一样,我们可以为两个灯定义索引 fluents:

fluent GREEN[i:1..2]
    = <{green[i]}, {yellow[i],red[i]}> initially 1

4. FSP – Fluent expressions

Fluents 可以使用命题逻辑连接词进行组合。

此外,我们还有(有界的)普遍性和存在性量词:

forall[i:1..2] GREEN[i]
exists[i:1..2] GREEN[i]

现在我们可以表示,我们不希望两个灯同时是绿色的&#

本文标签: 逻辑模型语言FSP