Answers:
要真正理解LTL和CTL之间的区别,您必须研究两种语言的语义。LTL公式表示将在每次执行程序时解释的属性。对于每个可能的执行(运行),可以将其视为一行上的一系列事件或状态,这就是为什么将其命名为“线性时间”的原因,系统会检查运行是否满足要求,而无法切换到另一运行在检查过程中。另一方面,CTL语义检查所有可能运行的公式,并且在面对分支时将尝试所有可能的运行(A运算符)或仅尝试一个运行(E运算符)。
实际上,这意味着每种语言的某些公式不能用另一种语言陈述。例如,重置属性(电路设计的重要可及性)指出,即使从未真正达到某个状态,也始终有可能在运行期间达到该状态(AG EF重置)。LTL只能声明实际上已达到复位状态,而不能声明可以达到复位状态。
我不知道这是否能回答您的问题,但我想补充一些意见。
关于表达用于软件验证的属性的最佳逻辑的讨论很多,但是真正的争论在其他地方。当CTL必须具有新的语义(新的可满足性关系)来表达它们时,LTL可以表达软件系统建模的重要属性(公平性)。但是CTL算法通常更有效,并且可以使用基于BDD的算法。所以...没有最好的解决方案。到目前为止,只有两种不同的方法。
其中一位评论者建议Vardi发表论文“分支与线性时间:最终对决”。
如果给定一个对象(例如,在使用LTL的情况下进行跟踪),则您在每个时间点仅考虑一个未来,在CTL中,它们的数量过多。
特别是,next
它在LTL中给出了唯一的动作,但(可能)在CTL中给出了整个动作。