线性时序逻辑(Linear Temporal Logic, LTL)是一种在命题逻辑基础上添加了时序操作得到的系统规范描述方法。LTL 提供了一种直观且兼容性强的方式来描述时间相关的系统属性。
LTL 的基本符号和组成部分包括:
-
命题变元(Propositional Variables):这些是基本的逻辑单元,通常表示为小写字母,如
p
,q
,r
等。它们可以是真(true)或假(false),并代表系统中的某种状态或属性。 -
逻辑常量:通常有两个逻辑常量,
true
(真)和false
(假)。 -
逻辑连接词:这些是用来组合命题变元的操作符,包括:
- 否定(Negation):
¬
或~
- 合取(Conjunction):
∧
- 析取(Disjunction):
∨
- 蕴含(Implication):
→
- 等价(Biconditional):
↔
- 否定(Negation):
-
时序操作符:这些是用来描述命题变元在时间上的关系的操作符,包括:
- 下一状态(Next):
X
- 未来某状态(Future):
F
- 某任一状态(Globally):
G
- 直到(Until):
U
- 释放(Release):
R
- 弱直到(Weak Until):
W
- 下一状态(Next):
一个 LTL 公式可以递归地定义为:
- 一个命题变元是 LTL 公式。
true
和false
是 LTL 公式。- 如果
φ
和ψ
是 LTL 公式,那么¬φ
,φ ∧ ψ
,φ ∨ ψ
,φ → ψ
,φ ↔ ψ
,Xφ
,Fφ
,Gφ
,φ U ψ
,φ R ψ
,φ W ψ
也是 LTL 公式。
LTL 公式可以用来描述系统应该满足的时间相关属性,如“总是”、“最终”、“在某个时间点之后”、“在某个时间点之前”等。这些公式可以在形式验证中使用,以检查系统是否满足其规格要求。
时序操作符
时序操作符在线性时序逻辑(LTL)中用于描述命题变元在时间上的关系和属性。它们允许我们表达关于系统状态如何随时间变化的复杂条件。以下是LTL中一些常见的时序操作符的详细说明:
-
下一状态(Next):
X
Xφ
表示“下一个状态φ为真”。这个操作符让我们能够引用紧随当前状态之后的状态。例如,如果我们有一个命题p
表示“灯是亮的”,那么X¬p
就表示“下一个状态灯将不亮”。 -
未来某状态(Eventually):
F
Fφ
表示“在未来某个状态φ为真”。这意味着存在一个未来的时间点,在那个时间点上命题φ将成立。例如,Fp
表示“灯最终会亮”。 -
某任一状态(Globally):
G
Gφ
表示“在所有状态φ都为真”。这意味着从初始状态开始,无论何时检查,命题φ都必须为真。例如,Gp
表示“灯始终亮着”。 -
直到(Until):
U
φ U ψ
表示“从φ为真开始,直到ψ为真”。这描述了从一个状态开始,直到另一个状态发生为止的一系列状态。例如,pGq
表示“从灯是亮的开始,直到按钮被按下”。 -
释放(Release):
R
φ R ψ
表示“如果φ从某个时刻开始一直为真,那么从那个时刻开始,ψ最终会为真”。这可以看作是一个“当...则...”的条件,其中第一个条件必须持续为真,以便触发第二个条件。例如,¬pGqR¬p
表示“如果灯一直是灭的,那么当按钮被按下时,灯最终会亮”。 -
弱直到(Weak Until):
W
φ W ψ
表示“从φ为真开始,弱直到ψ为真”。这是一个较弱的“直到”关系,它允许在φ和ψ之间插入任意数量的φ为假的状态。例如,pWq
表示“从灯是亮的开始,灯可能会在某个时刻熄灭,但最终会再次亮起”。
这些时序操作符提供了强大的工具,用于描述和验证系统的时间相关属性。它们可以与命题逻辑中的其他操作符(如否定、合取、析取等)结合使用,以创建复杂的规范,这些规范可以捕获系统的精确行为并用于形式验证。