ppLTLTT:纯过去线性时态逻辑公式的时态测试
1. 引言
线性时态逻辑(LTL)是程序形式验证和综合中常用的规范语言。带过去算子的LTL(pLTL)比普通LTL更简洁,能更自然地描述现实世界的属性,降低错误表述的风险。
例如,有一个程序可能会标记两种不同的错误,用变量
err1
和
err2
表示。我们希望表达当且仅当这两种错误都发生时,触发用变量
end
表示的终止信号。用pLTL可以表示为:
G ((O err1 ∧ O err2 ∧ Y H ¬end) ⇔ end)
而等价的LTL公式则复杂得多:
G (end ⇒ X G ¬end) ∧
((¬err1 ∧ ¬err2 ∧ ¬end) W ((err1 ∧ ((¬err2 ∧ ¬end) W (err2 ∧ end))) ∨
(¬err1 ∧ ¬err2 ∧ ¬end) W ((err2 ∧ ((¬err1 ∧ ¬end) W (err1 ∧ end))))))
当需要触发终止的错误数量增加时,LTL公式会变得更加复杂,而pLTL只需要添加形如
O (erri)
的合取项。
然而,目前缺乏对pLTL的通用工具支持。一些工具如LamaConv、FRET、SpeAR和GOAL等都存在不同程度的局限性。
一个有趣的pLTL片段是LTL原子地增强纯过去LTL(ppLTL)公式,即LTL+pp。它保持了pLTL相对于LTL的指数简洁性,且比完整的pLTL更直观。
2. 带过去的线性时态逻辑和时态测试器
-
pLTL的语法
:给定一组命题变量
AP,pLTL的合式公式由以下语法生成:
ϕ ::= ⊤ | p | ¬ϕ | ϕ ∧ ϕ | X ϕ | ϕ U ϕ | Y ϕ | ϕ S ϕ
其中
p ∈ AP
。
-
pLTL的语义
:pLTL公式在无限字上进行评估,无限字是对
AP
中变量的真值赋值序列。语义蕴含关系
|=
定义如下:
-
(σ, t) |= ⊤
-
(σ, t) |= p ⇔ p ∈ σt
-
(σ, t) |= ¬ϕ ⇔ (σ, t) ̸|= ϕ
-
(σ, t) |= ϕ1 ∧ ϕ2 ⇔ (σ, t) |= ϕ1 and (σ, t) |= ϕ2
-
(σ, t) |= X ϕ ⇔ (σ, t + 1) |= ϕ
-
(σ, t) |= ϕ1 U ϕ2 ⇔ ∃k ≥ t . ((σ, k) |= ϕ2 ∧ ∀j ∈ [t, k) . (σ, j) |= ϕ1)
-
(σ, t) |= Y ϕ ⇔ t > 0 and (σ, t - 1) |= ϕ
-
(σ, t) |= ϕ1 S ϕ2 ⇔ ∃k ≤ t . ((σ, k) |= ϕ2 ∧ ∀j ∈ (k, t] . (σ, j) |= ϕ1)
-
导出的时态算子
:
-
F ϕ := ⊤ U ϕ
-
G ϕ := ¬F ¬ϕ
-
ϕ1 W ϕ2 := ϕ1 U ϕ2 ∨ G ϕ1
-
ϕ1 R ϕ2 := ϕ2 W (ϕ1 ∧ ϕ2)
-
O ϕ := ⊤ S ϕ
-
H ϕ := ¬O ¬ϕ
-
ϕ1 S ϕ2 := ϕ1 S ϕ2 ∨ H ϕ1
-
Y ϕ := Y ϕ ∨ ¬Y ⊤
-
ppLTL和LTL+pp的定义
:
ψ ::= ⊤ | p | ¬ψ | ψ ∧ ψ | Y ψ | ψ S ψ
ϕ ::= ψ | ¬ϕ | ϕ ∧ ϕ | X ϕ | ϕ U ϕ
语义与pLTL相同。
-
时态测试器的定义
:设
ϕ
是一个ppLTL公式,
z
是一个不在
ϕ
中出现的命题变量。
ϕ
的时态测试器
Tz(ϕ) = (S, s0, δ)
是一个确定性Büchi自动机,字母表为
2Var(ϕ)∪{z}
,它恰好识别公式
G (z ⇔ ϕ)
。
3. ppLTLTT工具
ppLTLTT是一个将ppLTL公式转换为时态测试器的工具,输出为Hanoi Omega - Automata格式。
3.1 ppLTL到时态测试器的转换
该工具接受一个纯过去LTL公式
ϕ
并为其构造一个时态测试器。时态测试器的每个状态对应于
ϕ
的子公式的一个子集,当运行到达该状态时,这些子公式为真。
算法如下:
Algorithm 1: The ppLTLTT algorithm
1 Function BuildTT(ϕ, z):
2 AP ← Var(ϕ)
3 Q, q0, δ ← ∅
4 Pϕ ← {ψ | Y ψ ∈ Sub(ϕ) ∨ ∃ψ1, ψ2 . ψ ∈ {O ψ1, ψ1 S ψ2} ∩ Sub(ϕ)}
5 Pϕ ← Pϕ ∪ {¬ψ | Y ψ ∈ Sub(ϕ) ∨ ∃ψ1, ψ2 . ψ ∈ {H ψ1, ψ1 S ψ2} ∩ Sub(ϕ)}
6 S ← S.push(q0)
7 while ¬(S.empty) do
8 s ← S.pop
9 if s /∈ Q then
10 Q ← Q ∪ {s}
11 forall v ∈ 2AP do
12 s′ ← {ψ ∈ Pϕ | ψ, s, v = ⊤}
13 S ← S.push(s′)
14 if ϕ, s, v = ⊤ then
15 δ ← δ ∪ {(s, v ∪ {z}, s′)}
16 else
17 δ ← δ ∪ {(s, v, s′)}
18 return (Q, q0, δ)
评估函数如下:
Algorithm 2: The evaluation function
1 Function ψ, s, v:
2 switch ψ do
/* We omit the cases for Boolean connectives */
3 case p do
4 return (p ∈ v)
5 case Y ψ1 do
6 return (ψ1 ∈ s)
7 case Y ψ1 do
8 return (¬ψ1 ̸∈ s)
9 case O ψ1 do
10 return (ψ1, s, v ∨ (O ψ1 ∈ s))
11 case H ψ1 do
12 return (ψ1, s, v ∧ (¬H ψ1 /∈ s))
13 case ψ1 S ψ2 do
14 return ((ψ1, s, v ∧ (ψ1 S ψ2 ∈ s)) ∨ ψ2, s, v)
15 case ψ1 S ψ2 do
16 return ((ψ1, s, v ∧ (¬(ψ1 S ψ2) /∈ s)) ∨ ψ2, s, v)
该算法返回的自动机最多有
2n
个状态,其中
n
是公式的大小,并且自动机是确定性的。
3.2 实现说明
该工具用Haskell实现。通过遍历输入公式的抽象语法树来收集子公式。每个唯一的具有顶级过去算子的子公式和每个命题变量都被标注一个索引。每个状态(子公式集)在内部表示为一个
Integer
,其中第
i
位表示索引为
i
的子公式的真值。
4. 为现有工具添加过去支持
ppLTLTT旨在作为工具链的一部分,将现有的基于LTL的工具扩展到支持LTL+pp。具体流程如下:
1. 将给定的LTL+pp规范分离为LTL和ppLTL部分,用新变量替换每个纯过去子公式。
2. 使用ppLTLTT将每个纯过去子公式及其对应的监控变量转换为时态测试器。
3. 根据目标工具的不同,将时态测试器与LTL规范组合,并将结果传递给目标工具。
以下是为三个现有工具添加过去支持的具体实现:
-
pSlugs
:Slugs是用于GR(1)综合的工具。pSlugs将纯过去子公式转换为时态测试器,并将其编码到规范中。具体步骤如下:
1. 分配所需数量的布尔变量来编码状态(二进制或一元)。
2. 将这些新变量添加为输出变量。
3. 将初始化和转换不变式分别添加到系统的初始化和转换不变式中。
-
pStrix
:Strix是用于完整LTL的反应式综合工具。pStrix的功能和接口与pSlugs大致相同,但时态测试器直接编码为合取项。最终给Strix的公式格式是与新分配的输出变量相关的公式与去除纯过去后的LTL公式的合取。
-
pLTL2TGBA
:LTL2TGBA是Spot的一个命令行工具,用于将LTL公式转换为各种自动机。pLTL2TGBA的处理步骤如下:
1. 分离输入,将LTL部分用LTL2TGBA转换为所需的自动机类型。
2. 使用autfilt将LTL自动机与时态测试器进行乘积组合。
3. 指示autfilt移除监控变量。
5. 实验评估
实验在一台Dell Latitude 5420上进行,使用arbiter规范作为测试用例。
| No. of Clients | # of Added Variables | Synthesis (s) | No. of States |
|---|---|---|---|
| Arbiter with Strong Fairness, pStrix | |||
| 1 | 2 | 0.03 s | 2 |
| 2 | 4 | 0.04 s | 8 |
| 3 | 6 | 0.6 s | 48 |
| 4 | 8 | 1.04 s | 384 |
| 5 | 10 | 16.37 s | 3840 |
| 6 | 12 | OOM | N/A |
| Arbiter, pSlugs | |||
| 1 | 4 | 0.02 s | 6 |
| 2 | 8 | 0.03 s | 72 |
| 3 | 12 | 0.10 s | 552 |
| 4 | 16 | 1.46 s | 3904 |
| 5 | 20 | 34.30 s | 26720 |
| 6 | 24 | 714.43 s | 180096 |
| No. of Clients | pLTL2TGBA | ltl2aut | ltl2aut+ | couvreur | ltl2buchi | modella |
|---|---|---|---|---|---|---|
| Arbiter with Strong Fairness, pLTL2TGBA and Goal timings | ||||||
| 1 | 0.058 s | 0.646 s | 0.587 s | 0.622 s | 0.629 s | 0.651 s |
| 2 | 0.071 s | 5.108 s | 2.956 s | 9.864 s | 5.690 s | 11.779 s |
| 3 | 15.143 s | TO | TO | TO | TO | TO |
从实验结果可以看出,pStrix和pSlugs在不同数量的客户端下的合成时间和状态数量有所不同,并且在客户端数量增加时,可能会出现内存不足(OOM)的情况。pLTL2TGBA与Goal的不同算法在转换arbiter到NBA时的时间也存在差异。
以下是整体的处理流程mermaid图:
graph LR
A[LTL+pp Specification] --> B[Separate LTL and ppLTL]
B --> C[ppLTL to Temporal Testers by ppLTLTT]
B --> D[LTL Specification]
C --> E[Combine with LTL Specification]
D --> E
E --> F[Pass to Target Tool]
F --> G[Result]
综上所述,ppLTLTT为扩展现有基于LTL的工具以支持更丰富的输入语言提供了一种有效的方法,通过实验也验证了其在一定程度上的可行性。
ppLTLTT:纯过去线性时态逻辑公式的时态测试
6. 不同工具的实现细节分析
-
pSlugs的实现优势 :pSlugs在处理GR(1)综合时,通过将时态测试器编码到输入规范中,巧妙地利用了Slugs对规范的处理方式。因为Slugs将规范视为分离良好的,所以在添加新的变量和不变式时,不会影响控制器的安全性。对于一些需要精确控制状态编码的场景,pSlugs可以根据需求选择二进制或一元编码,提高了灵活性。
-
pStrix的特点 :pStrix作为Strix的包装工具,直接将时态测试器编码为合取项,这种方式简洁明了。它能够处理完整的LTL综合,并且通过将新分配的输出变量相关公式与去除纯过去后的LTL公式合取,保证了最终规范的一致性。在处理复杂的LTL公式时,pStrix能够充分利用Strix的综合能力。
-
pLTL2TGBA的独特处理方式 :pLTL2TGBA与pSlugs和pStrix不同,它直接处理自动机。通过使用autfilt工具,将LTL自动机与时态测试器进行乘积组合,然后移除监控变量。这种方式避免了对输入公式的语法操作,更侧重于自动机层面的处理,适用于需要高效转换LTL公式为自动机的场景。
7. 实验结果深入解读
- 合成时间分析 :从实验数据的表格中可以看出,随着客户端数量的增加,pStrix和pSlugs的合成时间都呈现出增长的趋势。对于pStrix,在客户端数量较少时,合成时间增长较为缓慢,但当客户端数量达到5个及以上时,合成时间显著增加,甚至出现了内存不足(OOM)的情况。这表明pStrix在处理大规模问题时,可能会受到内存和计算资源的限制。而pSlugs的合成时间增长相对较为平稳,但在客户端数量较多时,也需要较长的时间进行合成。
| No. of Clients | Synthesis (s) - pStrix | Synthesis (s) - pSlugs |
|---|---|---|
| 1 | 0.03 s | 0.02 s |
| 2 | 0.04 s | 0.03 s |
| 3 | 0.6 s | 0.10 s |
| 4 | 1.04 s | 1.46 s |
| 5 | 16.37 s | 34.30 s |
| 6 | OOM | 714.43 s |
- 状态数量分析 :控制器的状态数量也是衡量工具性能的一个重要指标。从表格中可以看出,pStrix和pSlugs的状态数量随着客户端数量的增加而增加。pStrix的状态数量增长速度较快,这可能与它处理完整LTL综合的方式有关。而pSlugs的状态数量增长相对较慢,可能是因为它在处理GR(1)综合时,对状态的管理更为高效。
| No. of Clients | No. of States - pStrix | No. of States - pSlugs |
|---|---|---|
| 1 | 2 | 6 |
| 2 | 8 | 72 |
| 3 | 48 | 552 |
| 4 | 384 | 3904 |
| 5 | 3840 | 26720 |
| 6 | N/A | 180096 |
- pLTL2TGBA与Goal算法对比 :在将arbiter转换为NBA的实验中,pLTL2TGBA与Goal的不同算法在时间上存在明显差异。在客户端数量较少时,pLTL2TGBA的转换时间相对较短,但随着客户端数量的增加,pLTL2TGBA的转换时间也显著增加。而Goal的一些算法在客户端数量较少时,转换时间较长,但在客户端数量较多时,可能会出现超时(TO)的情况。这表明pLTL2TGBA在处理小规模问题时具有一定的优势,但在处理大规模问题时,还需要进一步优化。
8. 实际应用场景探讨
-
嵌入式系统开发 :在嵌入式系统开发中,需要对系统的行为进行精确的规范和验证。ppLTLTT及其包装工具可以用于编写更简洁、更自然的规范,提高开发效率。例如,在一个多任务嵌入式系统中,可以使用pLTL2TGBA将LTL+pp规范转换为自动机,然后进行模型检查,确保系统的正确性。
-
网络协议验证 :网络协议的正确性对于网络的稳定运行至关重要。ppLTLTT可以帮助编写包含过去时态信息的协议规范,通过pStrix或pSlugs进行综合,生成符合规范的控制器。这样可以更好地处理协议中的历史信息,提高协议的可靠性。
-
智能交通系统 :在智能交通系统中,需要对交通信号控制、车辆调度等进行优化。ppLTLTT可以用于编写包含过去交通流量信息的规范,通过pSlugs进行GR(1)综合,生成更合理的控制策略,提高交通系统的效率。
9. 结论与展望
综上所述,ppLTLTT为扩展现有基于LTL的工具以支持LTL+pp提供了一种有效的解决方案。通过实验验证,pStrix、pSlugs和pLTL2TGBA在不同的应用场景中都具有一定的可行性和优势。然而,这些工具在处理大规模问题时,仍然面临着内存和计算资源的挑战。
未来的研究方向可以包括以下几个方面:
-
优化算法性能
:进一步优化ppLTLTT的算法,减少合成时间和内存占用。例如,可以研究更高效的状态编码方式和自动机组合算法。
-
支持更多工具
:将ppLTLTT扩展到支持更多的基于LTL的工具,扩大其应用范围。
-
与其他技术结合
:探索将ppLTLTT与机器学习、人工智能等技术结合,提高规范的生成和验证效率。
以下是未来研究方向的mermaid图:
graph LR
A[优化算法性能] --> B[减少合成时间]
A --> C[降低内存占用]
D[支持更多工具] --> E[扩大应用范围]
F[与其他技术结合] --> G[提高规范生成效率]
F --> H[提高验证效率]
总之,ppLTLTT及其相关工具为时态逻辑在实际应用中的发展提供了新的思路和方法,有望在更多领域发挥重要作用。
超级会员免费看

被折叠的 条评论
为什么被折叠?



