Logic 为我的模型建模的LTL、CTL或TLA(内部详细说明)?

Logic 为我的模型建模的LTL、CTL或TLA(内部详细说明)?,logic,model-checking,ctl,tla+,Logic,Model Checking,Ctl,Tla+,我目前正在写我的硕士论文,面临着用时态逻辑指定和验证我的方法 在我的情况下,哪种时态逻辑最适合使用?我真的想要一些关于我的方法和如何继续的反馈 我的模型由参与者组成,参与者将并发执行。对于每个参与者,可以注册规则。它们看起来像这样: conditions -> action e、 g 这意味着c必须从b收到一条消息,从c收到一条消息,才能允许向d发送消息 在其中一个参与者发送或接收消息之前,我的原型会检查参与者是否被允许执行该操作。到目前为止,我想验证算法是否执行以下操作: 如果不存在条

我目前正在写我的硕士论文,面临着用时态逻辑指定和验证我的方法

在我的情况下,哪种时态逻辑最适合使用?我真的想要一些关于我的方法和如何继续的反馈

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

conditions -> action
e、 g

这意味着c必须从b收到一条消息,从c收到一条消息,才能允许向d发送消息

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

  • 如果不存在条件成立的规则:禁止该操作

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

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


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

    不变量的概念可以用所有的时序逻辑形式表示。然而,我会使用它,因为它有一个模型检查器、一个可用的证明系统、一个活跃的社区和两本编写规范的好书


    但是。。。请注意,时态逻辑不是小菜一碟,您需要花一些高质量的时间仔细阅读和思考。

    在比较这三种逻辑时存在误解。 TLA+和LTL都是线性逻辑。TLA+是一种公理化理论,它以口吃不变性为基础,并在语法上强制执行口吃不变性(以确保精化是切实可行的)。LTL是一种命题逻辑

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

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

    对于所有级别的说明符,这是一个非常可读的介绍

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