时序逻辑被哲学家用来推理世界随时间变化的方式。它在现代应用中被用来描述程序/设计状态的演变,从而产生了对执行的描述。时序逻辑可以根据它们对时间演化的观点分为线性或分支。在线性时间视图中,我们看到时间范围是线性的并且是顺序的状态。当系统有多种可能的线性时序时(由于不确定性或读取输入),我们将它们视为一个个独立的时序情况并且系统有一系列可能的行为。在分支时间视图中,一个时间点可能有多个可能的后继,因此呈现树状结构。根据这种观点,一个系统只有一个执行,它采取树的形式。我们从介绍公平离散结构来开始这一章,我们在这个模型上评估时态逻辑公式的真与假。公平离散结构描述了系统的状态及其可能的演化。然后我们从线性时间观点出发,引入命题线性时态逻辑。我们解释了安全性和活性属性之间的区别,并引入了一个增加表现力的活性属性层次。我们研究完整LTL的表达能力,并涵盖增加其表达能力的扩展。我们介绍了检查可满足性的算法和模型检查算法。我们转向分支时间框架并引入计算树逻辑。像以前一样,我们讨论它的表达能力,考虑扩展,并涵盖可满足性和模型检查。然后,我们花一些时间讨论LTL和CTL中的公式示例,并强调两者之间的差异。最后,我们对LTL和CTL进行了正式的比较,鉴于这种比较,我们引入了CTL*,它是LTL和CTL的混合,将线性视图和分支视图结合到一个逻辑中。
从时序逻辑LTL到CTL的发展中总结得到了模型检查的思想:模型检查是确定程序是否满足给定的时序逻辑规范的算法分析。
线性-分支二分法起源于关于选择自由和命运确定性的宗教辩论,导致了关于在验证中使用时间逻辑的意识形态辩论。各种研究比较了线性时间和分支时间方法,这也导致了CTL *的发明,一种结合线性时间逻辑和计算树逻辑的逻辑。
多年来,人们已经收集了关于时态逻辑及其在模型检测和验证中的使用的各个方面的广泛知识:哪些属性可以在哪种时态逻辑中表达,哪些属性不能在哪种时态逻辑中表达,怎样扩展逻辑的表达能力,以及不同问题的算法方面。特别是,有效的模型检测算法适用于大型系统,模型检测作为一项成功的技术广泛使用在工业界和学术界。
2.2 Fair Discrete Systems——Kripke语义的介绍以及如何将它应用为表示程序的数学模型、并展示如何用公平离散系统来表示程序
为了能够形式化的推理系统和程序,我们必须就一个可以应用于推理的形式化数学模型。到目前为止,转换系统是计算机科学中表示程序的标准的工具。
转换系统在计算机科学中通常用作描述系统行为的模型,它是一种有向图,节点代表状态,边代表着状态的转化
状态(state)描述了系统在其行为的特定时刻的一些信息。
例如,交通灯的状态指示灯的当前颜色。类似地,顺序计算机程序的状态指示所有程序变量的当前值,以及指示要执行的下一个程序语句的程序计数器的当前值。
转变(transition)指定系统如何从一种状态演变为另一种状态。
对交通信号灯来说,转换表示从一种颜色切换到另一种颜色。而对于顺序程序,转换通常对应于语句的执行,并且可能涉及某些变量和程序计数器的更改。
下面给Transition System(TS)的定义 TS是一个六元组 ( S , A c t , → , S 0 , A P , L ) \left(\mathrm{S}, \mathrm{Act}, \rightarrow, S_{0}, \mathrm{AP}, \mathrm{L}\right) (S,Act,→,S0,AP,L):
- S是一组状态的集合
- Act是一组动作的集合
- →⊆S×Act×S是转换关系
- S0⊆S是初始状态集,
- AP是一组原子命题的集合
- L : S → 2 A P \mathrm{L}: \mathrm{S} \rightarrow 2^{A P} L:S→2AP是标识函数,标识在某个状态下为真的原子命题集
- 对比Kripke structure,我们可以发现TS有一个明显的不同,就是多了Act(动作)这个概念,如果状态s通过执行动作α发生状态的转变,转换到了状态s’,我们记为 s ⟶ α s ′ s \stackrel{\alpha}{\longrightarrow} s^{\prime} s⟶αs′
- 例子:
在转换系统的基础上又定义了Kripke结构,这是建模中使用的最流行的转换系统版本之一。然后,我们提出了一个转换系统的符号化版本,我们称之为公平离散系统或简称为FDS(Fair Descrete System),其中状态作为变量的解释和转换出现,它对应于变量值的变化。
FDS简单解析:https://blog.csdn.net/qq_39110678/article/details/116993350
Representing Program
Example:
D
1
=
⟨
{
π
1
,
x
,
y
,
t
}
,
θ
1
,
ρ
1
,
J
,
C
⟩
\mathscr{D}_{1}=\left\langle\left\{\pi_{1}, x, y, t\right\}, \theta_{1}, \rho_{1}, \mathscr{J}, \mathscr{C}\right\rangle
D1=⟨{π1,x,y,t},θ1,ρ1,J,C⟩
以下状态序列是上图中简单循环的运行
Example2:
D
2
=
⟨
{
π
2
,
x
,
y
,
t
}
,
θ
2
,
ρ
2
,
J
,
C
⟩
D2=\left\langle\left\{\pi_{2}, x, y, t\right\}, \theta_{2}, \rho_{2}, \mathscr{J}, \mathscr{C}\right\rangle
D2=⟨{π2,x,y,t},θ2,ρ2,J,C⟩
Example3:
T
=
⟨
{
t
}
,
t
=
0
,
t
=
t
′
∅
,
∅
⟩
.
T=\left\langle\{t\}, t=0, t=t^{\prime}\right.\emptyset, \emptyset\rangle .
T=⟨{t},t=0,t=t′∅,∅⟩.
注:
keep
(
π
1
,
x
,
y
,
t
)
\operatorname{keep}\left(\pi_{1}, x, y, t\right)
keep(π1,x,y,t)代表这四个变量可以有部分变量不出现。
D
=
D
1
∥
D
2
∥
T
\mathscr{D}=\mathscr{D}_{1}\left\|\mathscr{D}_{2}\right\| \mathscr{T}
D=D1∥D2∥T
D构成了一个FDS,这个系统就是皮特森互斥算法。
Var
t
,
x
,
y
:
t, x, y:
t,x,y: Boolean initially
t
=
0
,
x
=
0
,
y
=
0
t=0, x=0, \quad y=0
t=0,x=0,y=0
[
l
0
:
while (true)
{
l
1
:
Non Critical
;
l
2
:
x
=
1
;
l
3
:
t
=
1
;
l
4
:
await
(
t
=
=
0
∨
y
=
=
0
)
;
l
5
:
Critical
;
l
6
:
x
=
0
;
l
7
:
]
∥
[
m
0
:
while (true)
{
m
1
:
Non Critical;
m
2
:
y
=
1
;
m
3
:
t
=
0
;
m
4
:
await
(
t
=
=
1
∨
x
=
=
0
)
;
m
5
:
Critical
;
m
6
:
y
=
0
;
m
7
:
]
\left[\begin{array}{ll}l_{0}: & \text { while (true) }\{ \\ l_{1}: & \text { Non Critical } ; \\ l_{2}: & x=1 ; \\ l_{3}: & t=1 ; \\ l_{4}: & \text { await }(t==0 \vee y==0) ; \\ l_{5}: & \text { Critical } ; \\ l_{6}: & x=0 ; \\ l_{7}: & \end{array}\right] \|\left[\begin{array}{l}m_{0}: \text { while (true) }\{ \\ m_{1}: & \text { Non Critical; } \\ m_{2}: & y=1 ; \\ m_{3}: & t=0 ; \\ m_{4}: & \text { await }(t==1 \vee x==0) ; \\ m_{5} & : \quad \text { Critical } ; \\ m_{6} & : & y=0 ; \\ m_{7} & : & \end{array}\right]
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡l0:l1:l2:l3:l4:l5:l6:l7: while (true) { Non Critical ;x=1;t=1; await (t==0∨y==0); Critical ;x=0;⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤∥⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡m0: while (true) {m1:m2:m3:m4:m5m6m7 Non Critical; y=1;t=0; await (t==1∨x==0);: Critical ;::y=0;⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤