LTL,CTL或TLA用于我的模型建模(内部详细说明)?

时间:2014-03-03 12:40:55

标签: logic model-checking ctl tla+

我目前正在撰写我的硕士论文,并面临在时间逻辑中指定和验证我的方法。

在我的情况下哪种时态逻辑最好用?我真的希望得到一些关于我的方法和如何继续的反馈

我的模型由参与者组成,这些参与者将同时执行。对于每个参与者,可以注册规则。他们看起来像这样:

conditions -> action

e.g。

received(a, c) ^ received(b,c) -> allowed(c,d) 

这意味着c必须接收来自b的消息和来自c的消息才能被允许向d发送消息。

在其中一个参与者发送或接收消息之前,我的原型检查是否允许参与者执行该操作。到目前为止,我想验证算法是否执行以下操作:

  1. 如果没有规则存在条件:禁止行动

  2. 如果存在条件成立并且禁止操作的规则:禁止操作

  3. 如果存在条件成立的规则,则允许该操作,并且不存在其条件成立且禁止操作的其他规则:允许操作

2 个答案:

答案 0 :(得分:8)

看起来您想知道规范的某些属性是不变量。也就是说,如果在执行程序期间属性始终为真。

不变量的概念可以用所有时态逻辑形式表达。但是,我会使用TLA+因为有一个模型检查器,一个可用的证明系统,一个活跃的社区,以及一些用于编写规范的优秀书籍。

但是......请注意,Temporal Logic不是小菜一碟,你需要花一些时间阅读和仔细思考。

答案 1 :(得分:4)

比较这三种逻辑存在误解。 TLA +和LTL都是线性逻辑。 TLA +是一种基于Zermelo-Fraenkel set theory的公理理论,在语法上强制执行口吃不变性(用于确保细化是实用的)。 LTL是命题逻辑。

CTL与LTL截然不同,因为CTL是分支时间逻辑,而LTL是线性时间逻辑。单个序列是线性时间公式的模型。相反,树是分支时间公式的模型。序列表示单个执行,而树表示许多执行,它们从某个状态开始。在CTL中可获得路径定量,而在LTL中不存在。有一个共同的LTL和CTL子集,但它们是无法比较的(=某些属性仅在LTL中可表达,其他属性仅在CTL中可表达)。 CTL *是他们共同的超集。

对于您绘制的应用程序,线性时间语义似乎更合适。我建议使用TLA +,因为它提供了一个很好的描述系统的规则,并且在时间上足够表达,你可能不需要LTL(反过来说:如果你不能指定系统中的口吃不变公式TLA +,那么系统更有可能需要修改,而不是LTL的完全表达能力。)

TLA+ book是一个非常易读的介绍,适用于所有级别的说明符。