Download ppt - 第 6 章 模型检测

Transcript
Page 1: 第 6 章  模型检测

第 6 章 模型检测• 验证是提高软件可信程度的重要方法

– 模型检测– 基于逻辑推理的程序验证

• 模型检测– 一种验证系统满足性质 ( ) 的方法。它操

作在系统的模型(语义)上,而不是在系统的描述(语法)上

– 通过遍历系统所有状态空间,能够对有穷状态系统进行自动验证,并自动构造不满足验证性质的反例

Page 2: 第 6 章  模型检测

第 6 章 模型检测• 模型检测的应用

– 常用于硬件验证和通信协议的验证中– 现在开始用于软件的验证

• 模型检测过程的大体步骤– 由用户描述的一个模型开始– 判断用户所断言的假设在模型中是否有效– 若无效,则产生由执行轨迹构成的反例

Page 3: 第 6 章  模型检测

第 6 章 模型检测• 内容概述

– 命题逻辑和谓词逻辑的简短回顾– 线性时态逻辑及其在模型检测中的应用– 计算树逻辑及其在模型检测中的应用

Page 4: 第 6 章  模型检测

命题逻辑的回顾•合适公式的归纳定义

::= p | ( ) | ( ) | ( ) | ( )

• 推理规则(包括公理)

( i) (e1) (e2)

• 语法推论若从 1, 2, …, n 可以证明,表示成

1, 2, …, n , 简写成

• 逻辑等价 并且

Page 5: 第 6 章  模型检测

命题逻辑的回顾• 命题逻辑的语义

– 定义真值集合(给 p, q 指派真值)– 把各逻辑连接词映射到真值集合上的运算(真值表

方式)– 各推理规则在该模型中成立– 语义推论若 1, 2, …, n的值都为真 , 则 值也为真 , 写成

1, 2, …, n , 简写成 – 语义等价

并且 – 可满足性

是可满足的,若存在一种指派使的值为真

Page 6: 第 6 章  模型检测

命题逻辑的回顾• 命题逻辑是可靠的和完备的

– 命题逻辑的可靠性若 是有效的(可证明的),则 成

立– 命题逻辑的完备性

若 成立,则 是有效的– 命题逻辑的可靠性和完备性

有效,当且仅当 成立

Page 7: 第 6 章  模型检测

谓词逻辑的回顾• 合式公式

– 谓词符号集合、函数符号集合(包括常量符号)

– 基于来定义项集t ::= x | c | f(t, …, t)

– 归纳地定义基于( , )的合适公式 ::= P(t1, t2, …, tn) | ( ) | ( ) | ( )

|

( ) | (x ) | ( x ) ( P )

• 自由变量、约束变量、代换

Page 8: 第 6 章  模型检测

谓词逻辑的回顾• 新增推理规则(包括公理)

– 项相等的证明规则– 全称量词证明规则– 存在量词证明规则– 量词间的等价规则

• 语义模型、可靠性、完备性– 它们都可以基于命题逻辑相应概念进行拓展 和 的意思与前面的一致

表示在模型中成立

Page 9: 第 6 章  模型检测

形式验证的动机• 形式验证技术由三部分组成

– 用于系统建模的框架,通常是某种描述语言– 用于描述待验证性质的规范语言– 用来确立系统描述是否满足规范的验证方法

• 基于逻辑推理的方法– 系统描述是适当逻辑中的一组公式– 待证性质的规范是另一个公式– 验证就是试图通过该逻辑的公理和推理规则来证明

Page 10: 第 6 章  模型检测

形式验证的动机• 形式验证技术由三部分组成• 基于逻辑推理的方法

– 系统描述是适当逻辑中的一组公式– 待证性质的规范是另一个公式– 验证就是通过该逻辑来证明

• 基于模型的方法– 系统由适当逻辑的某个模型表示– 待证性质的规范仍由公式表示– 验证就是计算模型是否满足( )

Page 11: 第 6 章  模型检测

形式验证的动机• 形式验证技术由三部分组成• 基于逻辑推理的方法

– 系统描述是适当逻辑中的一组公式– 待证性质的规范是另一个公式– 验证就是通过该逻辑来证明

• 基于模型的方法– 系统由适当逻辑的某个模型表示– 待证性质的规范仍由公式表示– 验证就是计算模型是否满足( ) 比基于证明方法简单,因为只考虑单个模型

Page 12: 第 6 章  模型检测

形式验证的一些特性• 自动化程度

– 基于模型的方法高于基于逻辑的方法• 性质验证和完全验证

– 规范可描述单个性质或全部行为– 完全验证的代价要高昂得多

• 潜在应用领域– 硬件或软件、串行或并发、反应式或终止式

• 开发前与开发后– 开发前验证可及早发现错误,降低纠错代价

Page 13: 第 6 章  模型检测

模型检测及所用逻辑概述• 模型检测

– 基于模型的性质验证的自动化方法– 最初试图用于并发、反应式系统– 作为一种开发后的方法论问世

• 模型检测的大体步骤– 由用户描述的一个模型开始– 判断用户所断言的假设在模型中是否有效– 若无效,则产生由执行轨迹构成的反例

Page 14: 第 6 章  模型检测

模型检测及所用逻辑概述• Model checking, narrowly interpreted

– Decision procedures for checking if a given Kripke structure is a model for a given formula of a modal logic.

• Why is this of interest to us?– Because the dynamics of a discrete system can be

captured by a Kripke structure. – Because some dynamic properties of a discrete

system can be stated in modal logics.

Model checking = System verification

Page 15: 第 6 章  模型检测

模型检测及所用逻辑概述• Model checking, generously interpreted

– Algorithms for system verification which operate on a system model (semantics) rather than a system description (syntax).

• There are many different model-checking problems– for different (classes of) system models– for different (classes of) system properties

Page 16: 第 6 章  模型检测

模型检测及所用逻辑概述• 基于时态逻辑的模型检测

– 模型是一个状态迁移系统– 性质 是时态逻辑的公式,在某些状态下为真,在其它状态下为假(公式的真与假不是静态的)

• 验证系统满足性质– 用模型检测器的描述语言建立系统的模型– 用模型检测器的规范语言对待证性质进行编码,得到时态逻辑公式

– 以和作为输入,运行模型检测器– 若 ,则产生由系统执行轨迹构成的反例

Page 17: 第 6 章  模型检测

模型检测及所用逻辑概述• 时态逻辑是一个庞大的家族

“ ”归类到模态逻辑,依赖于对 时间 的特别观点进行内部分类– 线性时态逻辑:时间是线性的逻辑– 计算树逻辑:时间形成分支的逻辑

– 常用于硬件和通信协议的验证中– 现在开始用于软件的验证

Page 18: 第 6 章  模型检测

状态迁移系统• 状态集合 S {s1, s2, s3}

• 标记 ( 观察 ) 集合 A {p, q}

• 迁移关系 S S s1 s2, …

• 标记函数 L: S P(A) L(s1) = { p }, …

p

p, q q

s1

s3s2

Page 19: 第 6 章  模型检测

线性时态逻辑• 线性时态逻辑 (Linear-time Temprol Logic,

LTL)的特点– 将时间建模成状态的序列,无限延伸到未来。该状态序列称为计算路径或路径

– 使用指示未来的连接词– 未来一般不确定,出现若干可能路径

p

p, q q

s1

s3s2

Page 20: 第 6 章  模型检测

线性时态逻辑• LTL的语法 ::= | | p | ( ) | ( ) | ( ) | ( ) |

(X ) | (F ) | (G ) | ( U ) | ( W ) | ( R )– 原子公式集合: , , p, q, r, …

– 时态连接词下一个状态 (X),未来某状态 (F),未来所有状态 (G),直到 (U),释放 (R),弱-直到 (W)

p

p, q q

s1

s3s2

Page 21: 第 6 章  模型检测

线性时态逻辑• LTL的语法 ::= | | p | ( ) | ( ) | ( ) | ( ) |

(X ) | (F ) | (G ) | ( U ) | ( W ) | ( R )– 原子公式集合: , , p, q, r, …

– 优先级(高到低)一元连接词U, R, W ,

p

p, q q

s1

s3s2

Page 22: 第 6 章  模型检测

线性时态逻辑• LTL的语义模型

– 是一个 Kripke 结构( S, s0, , A, L )– 即状态迁移系统: 状态集合 S ,开始状态

s0 ,迁移关系,标记集合 A ,标记函数 L

– 其中对迁移关系的要求: s:S. s':S. s s'– 通常用状态迁移图表示– 以后的讨论用简化的三元组( S, , L )

• 模型的路径– 状态迁移的无限序列 = s1 s2 …

i 表示从 si 开始的后缀 si si+1 …

Page 23: 第 6 章  模型检测

线性时态逻辑• 模型上路径的满足关系

, , p iff p L(s1), iff

1 2 iff 1 且 2

1 2 iff 1 或 2

1 2 iff 1 蕴涵 2

X iff 2 G iff 对所有的 i 1 ,有 i F iff 存在某个 i 1 ,使得 i U iff 存在某个 i 1 ,使得 i ,且对

所有的 j =1, …, i 1 有 j

Page 24: 第 6 章  模型检测

线性时态逻辑• 模型上路径的满足关系

U iff 存在某个 i 1 ,使得 i ,且对所有的 j =1, …, i 1 有 j

s1 s2 s3 s4 s5 s6 s7 s8 s9s10 …

i( 3 i 9) 满足 p U q

p q

Page 25: 第 6 章  模型检测

线性时态逻辑• 模型上路径的满足关系

U iff 存在某个 i 1 ,使得 i ,且对所有的 j =1, …, i 1 有 j

W iff 存在某个 i 1 ,使得 i ,且对所有的 j =1, …, i 1 有 j ;或者对所有的 k 1 有 k

R iff 存在某个 i 1 ,使得 i ,且对所有的 j =1, …, i 有 j ;或者对所有的 k 1有 k

Page 26: 第 6 章  模型检测

线性时态逻辑• R 等价于 ( U )

U iff 存在某个 i 1 ,使得 i ,且对所有的 j =1, …, i 1 有 j

s1 s2 … si-1 si si+1 …

R iff 存在某个 i 1 ,使得 i ,且对所有的 j =1, …, i 有 j ;或者对所有的 k 1有 k (两种情况)

s1 s2 … si-1 si si+1 …

Page 27: 第 6 章  模型检测

线性时态逻辑• R 等价于 ( U )

U iff 存在某个 i 1 ,使得 i ,且对所有的 j =1, …, i 1 有 j

s1 s2 … si-1 si si+1 …

R iff 存在某个 i 1 ,使得 i ,且对所有的 j =1, …, i 有 j ;或者对所有的 k 1有 k (其中较简单的情况)

s1 s2 … si-1 si si+1 …

Page 28: 第 6 章  模型检测

线性时态逻辑• R 等价于 ( U )

U iff 存在某个 i 1 ,使得 i ,且对所有的 j =1, …, i 1 有 j

s1 s2 … si-1 si si+1 …

R iff 存在某个 i 1 ,使得 i ,且对所有的 j =1, …, i 有 j ;或者对所有的 k 1有 k (其中较复杂的情况)

s1 s2 … si-1 si si+1 …

Page 29: 第 6 章  模型检测

线性时态逻辑• R 等价于 ( U )

U iff 存在某个 i 1 ,使得 i ,且对所有的 j =1, …, i 1 有 j

s1 s2 … si-1 si si+1 …

R iff 存在某个 i 1 ,使得 i ,且对所有的 j =1, …, i 有 j ;或者对所有的 k 1有 k (其中较复杂的情况)

s1 s2 … si-1 si si+1 …

Page 30: 第 6 章  模型检测

线性时态逻辑 , s (简记 s )若对每条开始于 s 的路径 都有 例 , s0 p q , s0 r

, s0 , s0 X r

, s0 X ( q r )

, s0 G ( p r )

, s2 G r

q, r r

s0

s2s1

p, q

Page 31: 第 6 章  模型检测

线性时态逻辑 , s (简记 s )若对每条开始于 s 的路径 都有 例 , s F (q r ) F G r(对任意状态 s)– G F p表示 p无数次发生

s0 s1 s0 s1 … G F p

s0 s2 s2 … G F p

, s0 G F p G F r

, s0 G F r G F pq, r r

s0

s2s1

p, q

Page 32: 第 6 章  模型检测

线性时态逻辑• LTL公式(规范)的实际样例

– G(started ready)

永远不可能尚未就绪就已经启动了– G(requested F acknowledged)

对资源的请求最终会得到确认– G F enabled

在每条计算路径上 , 某进程无限多次处于enabled

– F G deadlock

某进程最终会被永久地死锁

Page 33: 第 6 章  模型检测

线性时态逻辑• LTL公式(规范)的实际样例

– G F enabled G F running

进程无限多次处于 enabled,则将无限多次执行

– G(floor2 directionup ButtonPressed5

(directionup U floor5))

若乘客想上 5楼,处于 2楼的上行电梯在到达 5楼前不会改方向

Page 34: 第 6 章  模型检测

线性时态逻辑• LTL表达不了的事情

– 从任何状态出发,都可能(即存在一条路径)到达重新启动状态

– 电梯可以在第 3层保持关门闲置(即存在一条从该层到该层的路径,沿该路径电梯停留在原地)

表达这些事情需要对路径使用存在量词,后面采用计算树逻辑解决

Page 35: 第 6 章  模型检测

线性时态逻辑• LTL公式之间的语义等价

若对所有模型 , 的所有路径 ,都有 当且仅当 ,记为

例如– F 和 G对偶 G F , F G – X与自身对偶 X X – U 和 R对偶 ( U ) R

( R ) U – 分配律 F ( ) F F

G ( ) G G

Page 36: 第 6 章  模型检测

线性时态逻辑• LTL的适当连接词集合

– 命题逻辑的适当连接词集合 {, , }

– 线性时态逻辑的适当连接词集合 {U, X}是适当的,因为

R ( U )

W R ( )

{R, X}是适当的 {W, X}是适当的

Page 37: 第 6 章  模型检测

线性时态逻辑能表达的性质• 以互斥使用某资源为例

– 安全性 (safety):在任何时候只有一个进程处于临界区(多进程共处该区的坏事不会发生)

– 活性 (liveness):只要进程请求进入临界区,则最终会被允许进入(但不知何时发生)

– 无阻性 (non-blocking):进程总可以请求进入临界区

– 非严格顺序性:各进程无需按严格顺序进入临界区

Page 38: 第 6 章  模型检测

线性时态逻辑能表达的性质• 以两个进程为例 n t c n …

– n:处于非临界状态– t:试图进入临界状态– c:处于临界状态

状态迁移图– 无 c1c2状态– 每次迁移改一个进程的状态

s0n1 n2

s3

s2

s1 t1 n2

c1 n2 t1 t2

c1 t2s4

s6

s5n1 t2

n1 c2

t1 c2 s7

Page 39: 第 6 章  模型检测

线性时态逻辑能表达的性质• 以两个进程为例安全性: G(c1 c2)

– s0 满足安全性– 所有状态都满足

s0n1 n2

s3

s2

s1 t1 n2

c1 n2 t1 t2

c1 t2s4

s6

s5n1 t2

n1 c2

t1 c2 s7

Page 40: 第 6 章  模型检测

线性时态逻辑能表达的性质• 以两个进程为例活性: G(t1 F c1)

– s0 不满足活性– 见绿色路径

s0n1 n2

s3

s2

s1 t1 n2

c1 n2 t1 t2

c1 t2s4

s6

s5n1 t2

n1 c2

t1 c2 s7

Page 41: 第 6 章  模型检测

线性时态逻辑能表达的性质• 以两个进程为例无阻性– 对所有满足 n1的状态,存在路径进入满足t1 的状态– 表达不了这样的性质

s0n1 n2

s3

s2

s1 t1 n2

c1 n2 t1 t2

c1 t2s4

s6

s5n1 t2

n1 c2

t1 c2 s7

Page 42: 第 6 章  模型检测

线性时态逻辑能表达的性质• 以两个进程为例非严格顺序性– 存在路径,两个满足c1的状态的中间状态都不满足 c1 和 c2

严格顺序性– 所有路径上,c1周期结束后,c2先于 c1 的再出现

s0n1 n2

s3

s2

s1 t1 n2

c1 n2 t1 t2

c1 t2s4

s6

s5n1 t2

n1 c2

t1 c2 s7

Page 43: 第 6 章  模型检测

线性时态逻辑能表达的性质严格顺序性– G(c1 c1W(c1 c1W c2))

– 所有路径上,c1周期结束后,c2先于 c1 的再出现

– 不满足严格顺序性,见绿色路径

s0n1 n2

s3

s2

s1 t1 n2

c1 n2 t1 t2

c1 t2s4

s6

s5n1 t2

n1 c2

t1 c2 s7

Page 44: 第 6 章  模型检测

线性时态逻辑能表达的性质• 以两个进程为例

– 重新建模,以满足非严格顺序性安全性活性无阻性

n1 n2

s3

s2

s1 t1 n2

c1 n2 t1 t2

c1 t2s4

s0

s6s8

s5n1 t2

t1 t2 n1 c2

t1 c2 s7

Page 45: 第 6 章  模型检测

模型检测工具• 工具 New Symbolic Model Verifier

– 一个开放源码的工具– 提供一种描述模型的语言,用它描述的模型被称为程序

– 模型要满足的性质用线性时态逻辑公式(规范)来表示

– 该工具以程序和规范作为输入;若规范成立则输“ ”出 真 ,否则输出一条可作为反例的路径

Page 46: 第 6 章  模型检测

计算树逻辑• LTL的不足

– 隐含着对所有路径做全称量词限定– 断言某一条路径的性质时,难以表示;有时可通过考虑该性质的否定来解决

– 不能表示混合使用全称和存在路径量词的性质

• 分支时态逻辑通过允许使用路径量词来解决– 研究其中的计算树逻辑:时间建模为树状结构,未来有不同的路径

Page 47: 第 6 章  模型检测

计算树逻辑• 计算树逻辑 (Computation Tree Logic)的语法 ::= | | p | ( ) | ( ) | ( ) | ( ) |

AX | EX | AF | EF | AG | EG |

A[ U ] | E[ U ] – A表示沿所有路径, E表示沿至少一条路径– 存在一个可达状态满足 q : EF q– 存在一个可达状态,由其出发的所有可达状态都满足 p : EF AG p

– AG( p E[p U q] )– AG( p EG q )

Page 48: 第 6 章  模型检测

计算树逻辑• CTL的语义

, s AX 当且仅当 对所有使 s s1 的 s1,有 , s1

, s EX 当且仅当对某个使 s s1 的 s1,有 , s1

, s1 AG 当且仅当每条路径s1 s2 … 上的任何 si都有 , si

, s1 EG 当且仅当存在一条路径s1 s2 … ,其上的任何 si都有 , si

Page 49: 第 6 章  模型检测

计算树逻辑• CTL的语义

, s1 AF 当且仅当每条路径s1 s2 … 上都存在某个 si,使得 , si

, s1 EF 当且仅当存在一条路径s1 s2 … ,其上存在某个 si,使得 , si

, s1 A[1 U 2 ]当且仅当每条路径s1 s2 … 都满足 1 U 2

, s1 E[1 U 2 ]当且仅当存在一条路径s1 s2 … 满足 1 U 2

Page 50: 第 6 章  模型检测

计算树逻辑• CTL的语义初始状态满足 EF

...

......

......

Page 51: 第 6 章  模型检测

计算树逻辑• CTL的语义初始状态满足 EG

...

......

......

Page 52: 第 6 章  模型检测

计算树逻辑• CTL的语义初始状态满足 AG

...

......

......

Page 53: 第 6 章  模型检测

计算树逻辑• CTL的语义初始状态满足 AF

...

......

......

Page 54: 第 6 章  模型检测

计算树逻辑• CTL的语义

, s0 EX( q r )

, s0 AX( q r )

, s0 EF( p r )

, s2 EG( r )

, s0 AF r

, s0 E [( p q ) U r ]

, s0 A [ p U r ]

, s0

AG(pqr EF EG r)

q, r r

s0

s2s1

p, q

Page 55: 第 6 章  模型检测

计算树逻辑• CTL公式(规范)的实际样例用线性时态逻辑也能表达的例子 EF ( started ready )

永远不可能尚未就绪就已经启动了LTL 公式: G(started ready)

– AG (requested AF acknowledged )

对任何状态,对资源的请求最终会得到确认 LTL 公式: G(requested F

acknowledged)

Page 56: 第 6 章  模型检测

计算树逻辑• CTL公式(规范)的实际样例用线性时态逻辑也能表达的例子– AG ( AF enabled )

在每条计算路径上,进程无限多次处于 enabled

LTL 公式: G F enabled

– AF ( AG deadlock )

进程最终会被永久地死锁 LTL 公式: F G deadlock

Page 57: 第 6 章  模型检测

计算树逻辑• CTL公式(规范)的实际样例用线性时态逻辑也能表达的例子– AG( floor2 directionup ButtonPressed5

A [directionup U floor5] )

若乘客想上 5楼,处于 2楼的上行电梯在到达 5楼前不会改方向

LTL 公式: G( floor2 directionup ButtonPressed5

(directionup U floor5) )

Page 58: 第 6 章  模型检测

计算树逻辑• CTL公式(规范)的实际样例线性时态逻辑能表达,但计算树逻辑不行– 进程无限多次处于 enabled,则将无限多次执行

LTL 公式: G F enabled G F running

计算树逻辑不是简单地在线性时态逻辑公式G F enabled G F running

中插入 A 或 E

AG AF enabled AG AF running

Page 59: 第 6 章  模型检测

计算树逻辑• CTL公式(规范)的实际样例计算树逻辑能表达,但线性时态逻辑不行– AG( EF restart )

从任何状态出发,都可到达重新启动状态

– AG( floor3 idle DoorClosed

EG (floor3 idle DoorClosed ))

电梯可以在第 3层保持关门闲置

Page 60: 第 6 章  模型检测

计算树逻辑• CTL公式(规范)的实际样例计算树逻辑能表达,但线性时态逻辑不行

– AG( n1 EX t1 )

一个进程总可以请求进入临界区(无阻性)

– EF (c1 E[ c1 U ( c1 E[ c2 U c1 ] ) ] )

进程无需按严格顺序进入临界区(非严格顺序性,用线性时态逻辑只能表示严格顺序性)严格顺序性的 LTL公式:

G(c1 c1W(c1 c1W c2))

Page 61: 第 6 章  模型检测

计算树逻辑• CTL公式之间的语义等价

两公式 语义等价,若任何模型中的任何状态,满足其中一个公式当且仅当满足另一个公式 AF EG EF AG AX EX – AF A[ U ]– EF E[ U ]

Page 62: 第 6 章  模型检测

计算树逻辑• CTL的适当连接词集合

定理:计算树逻辑的一个时态连接词集合是适当的,当且仅当它至少包含 {AX, EX}中之一, {EG, AF, AU}中之一以及 EU

Page 63: 第 6 章  模型检测

两种逻辑表达能力的比较• LTL 和 CTL表达能力的直观比较

1 、 CTL 比 LTL强的一面– 对路径使用量词– 已经给出过说明 CTL强的例子2 、 LTL 比 CTL强的一面– LTL可以用公式描述在所有路径上选择一个范围– F p F q:每条有 p的路径,随后也有 q– 在 CTL中,由于每个 F必须有一个前束的 A 或 E

“,不能表达 每条有 p的路径,随后也有 q”– AF p AF q 和 AG( p AF q )含义都与之不同

Page 64: 第 6 章  模型检测

两种逻辑表达能力的比较• CTL逻辑介绍

– 通过删除一个约束而得的两种逻辑的一种组合– 所删除的约束:每个时态算子 (X, U, F, G)必须有唯一的路径量词 (A, E)伴随使用允许加入如下形式的公式– A[(p U r) (q U r)]– A[X p XX p]– E[GF p]:存在一条 p无限多次为真的路径

Page 65: 第 6 章  模型检测

两种逻辑表达能力的比较• CTL逻辑介绍

– 通过删除一个约束而得的两种逻辑的一种组合– 所删除的约束:每个时态算子 (X, U, F, G)必须有唯一的路径量词 (A, E)伴随使用

– 状态公式 ::= | p | ( ) | ( ) | A[] | E[]

– 路径公式 ::= | ( ) | ( ) | ( U ) | (G ) |

(F ) | (X )

Page 66: 第 6 章  模型检测

两种逻辑表达能力的比较• CTL逻辑介绍

– LTL公式 等价于 CTL公式 A[ ]– CTL是将路径公式限制为如下的 CTL片断

::= ( U ) | (G ) | (F ) | (X )

CTL

CTL LTL

1 2 3 4

Page 67: 第 6 章  模型检测

两种逻辑表达能力的比较• 比较能力的例子

1、在 CTL但不在 LTL中– AG EF p :无论到那儿,总可到使 p为真的状态

– 把展开成无限计算树来说明(1) , s AG EF p

(2) 中始于 s 的路径是中的子集

pst

p ps

Page 68: 第 6 章  模型检测

两种逻辑表达能力的比较把 展开成无限计算树来说明

, s AG EF pp

...

p

p

...p p p

...p p p

...p p p

pst

p ps

Page 69: 第 6 章  模型检测

两种逻辑表达能力的比较把 展开成无限计算树来说明

, s AG EF p

中始于 s 的路

径是中的子集

p

...

p

p

...p p p

...p p p

...p p p

pst

p ps

Page 70: 第 6 章  模型检测

两种逻辑表达能力的比较• 比较能力的例子

1、在 CTL但不在 LTL中– AG EF p :无论到那儿,总可到使 p为真的状态

– 设 是 LTL公式,使得 A[ ]等价于 AG EF p

显然 , s AG EF p ,由假设也有 , s A[ ]

显然 , s AG EF p;由于中始于 s 的路径是中的子集,所以 , s A[ ],导致矛盾

pst

p ps

Page 71: 第 6 章  模型检测

两种逻辑表达能力的比较• 比较能力的例子

1、在 CTL但不在 LTL中AG EF p :无论到那儿,总可到使 p为真的状态

2、在 LTL但不在 CTL中A[GF p F q] : 如果沿路径有无限多次 p的出现,则有 q的一次出现

3、在 CTL中,但不在 LTL 和 CTL中E[GF p]:存在一条有无限多次 p的路径

Page 72: 第 6 章  模型检测

两种逻辑表达能力的比较• 比较能力的例子

1、在 CTL但不在 LTL中AG EF p :无论到那儿,总可到使 p为真的状态

2、在 LTL但不在 CTL中A[GF p F q]:

3、在 CTL中,但不在 LTL 和 CTL中E[GF p]:存在一条有无限多次 p的路径

4、同在 LTL 和 CTL中AG(p AF q) (CTL) , G(p F q) (LTL) :

任何 p最终由一个 q跟随

Page 73: 第 6 章  模型检测

两种逻辑表达能力的比较• 比较能力的例子

– 某些 LTL公式可以转换为 CTL公式G( p F q )等价于 AG( p AF q )

– FG p 和 AF AG p不等价下面模型满足 FG p,但不满足 AF AG p

ppp

Page 74: 第 6 章  模型检测

两种逻辑表达能力的比较把模型展开成无限计算树来说明

ppp

p

...

p

p

...p p p

...p p p

...p p p

对该计算树上的任意一条无限路径,都有从某个位置开始, p 一直为真,所以该模型满足 FG p

Page 75: 第 6 章  模型检测

两种逻辑表达能力的比较把模型展开成无限计算树来说明

ppp

p

...

p

p

...p p p

...p p p

...p p p

在这棵无限计算树上,这条绿色路径上不存在一个位置,满足 AG p ,所以该模型不满足 AF AG p

Page 76: 第 6 章  模型检测

计算树逻辑的模型检测算法• 模型检测算法的原理

– 根据 CTL的语义,基本要求是:给定, s0S和,计算 , s0 是否成立

– 方法 1 : , s0 和 作为输入,输出 yes 或 no

– 方法 2 : 和 作为输入,输出使 , s 成立的所有 s,检查 s0是否属于输出元素集合

– 为方法 2设计算法更容易一些– 对算法的增强:若不满足,产生系统的一条实际路径,以展示确实不满足,对调试系统很有用处

Page 77: 第 6 章  模型检测

计算树逻辑的模型检测算法• 标记算法

– 输入:模型 =(S, , L)和公式 。备注: {, , } 是命题连接词适当集合, {AF, EU, EX}是时态连接词适当集合

– 输出:满足 的的状态集合– 方法:

1、从 的最小子公式开始,对每个子公式 执行步骤 2,向外一直到 为止2、用 标记使它得到满足的所有状态( 能标记的状态由 直接子公式已标记的状态决定)3、输出有标记 的所有状态

Page 78: 第 6 章  模型检测

计算树逻辑的模型检测算法• 计算 能标记状态的分情况讨论

:没有任何状态能带标记– p:若 p L(s),则 s 带标记 p

1 2:任何状态 s 同时带标记 1和 2,则让 s 带标记 1 2

1:任何状态 s 不带 1,则让它带 1

– AF 1:1、任何状态 s 带 1,则让它带 AF 1

2、重复步骤:任何状态 s 若所有后继状态带AF 1,则让 s 也带 AF 1,直至不再改变

Page 79: 第 6 章  模型检测

计算树逻辑的模型检测算法• 计算 能标记状态的分情况讨论

– E[ 1 U 2]:1、任何状态 s 带 2,则让它带 E[ 1 U 2]

2、重复步骤:任何状态 s 若带 1并且至少一个后继状态带 E[ 1 U 2], 则让 s 也带 E[ 1 U 2] , 直至不再改变

– EX 1:任何状态 s 若有一个后继状态带 1,则让 s 带EX 1

Page 80: 第 6 章  模型检测

计算树逻辑的模型检测算法• 算法应用例子:互斥模型,公式 E[c2 U c1]

1、用 E[c2 U c1]标记所有满足 c1 的状态: s2, s4

n1 n2

s3

s2

s1 t1 n2

c1 n2 t1 t2

c1 t2s4

s0

s6s8

s5n1 t2

t1 t2 n1 c2

t1 c2 s7

E[c2 U c1]

E[c2 U c1]

Page 81: 第 6 章  模型检测

计算树逻辑的模型检测算法• 算法应用例子:互斥模型,公式 E[c2 U c1]

2、用 E[c2 U c1]标记所有不满足 c2 且有某后继已标记的状态: s1, s3 n1 n2

s3

s2

s1 t1 n2

c1 n2 t1 t2

c1 t2s4

s0

s6s8

s5n1 t2

t1 t2 n1 c2

t1 c2 s7

E[c2 U c1]

E[c2 U c1]

E[c2 U c1]

E[c2 U c1]

Page 82: 第 6 章  模型检测

计算树逻辑的模型检测算法• 算法应用例子:互斥模型,公式 E[c2 U c1]

3、继续用 E[c2 U c1]标记不满足 c2 且有某后继已标记的状态: s0 n1 n2

s3

s2

s1 t1 n2

c1 n2 t1 t2

c1 t2s4

s0

s6s8

s5n1 t2

t1 t2 n1 c2

t1 c2 s7

E[c2 U c1]

E[c2 U c1]

E[c2 U c1]

E[c2 U c1]

E[c2 U c1]

Page 83: 第 6 章  模型检测

计算树逻辑的模型检测算法• 算法的问题——状态爆炸

– 标记算法对模型的规模来说是线性的– 但是,模型规模本身通常关于变量个数是指数的– 因此,程序增加一个布尔变量,将使性质验证的复杂性加倍

– 克服状态爆炸有各种方法,如有序二叉决策图

Page 84: 第 6 章  模型检测

计算树逻辑模型检测中的公平性• 公平性问题

– 有时, , s0 验证的失败是由于模型包含了一些不切实际的行为:s0 s1 s3 s7

s1 s3 s7 …

s0n1 n2

s3

s2

s1 t1 n2

c1 n2 t1 t2

c1 t2s4

s6

s5n1 t2

n1 c2

t1 c2 s7

Page 85: 第 6 章  模型检测

计算树逻辑模型检测中的公平性• 公平性问题

– 该路径与活性 AG( t1 AF c1)冲突– 该路径可以忽略,因为这是不公平的路径

s0n1 n2

s3

s2

s1 t1 n2

c1 n2 t1 t2

c1 t2s4

s6

s5n1 t2

n1 c2

t1 c2 s7

Page 86: 第 6 章  模型检测

计算树逻辑模型检测中的公平性• 公平性约束

– 黄色的迁移不能被永远忽略– 忽略公平性的无限路径: s1(s3 s1)(s2) (s1 s3 )

– 考虑公平性的无限路径: s1(s3 s1)(s2)

s1 p

s2 p, q s3q

Page 87: 第 6 章  模型检测

计算树逻辑模型检测中的公平性• 公平性有两种定义

– Weak fairness: a specified set of transitions cannot be enabled forever without being taken

– Strong (Streett) fairness: a specified set of transitions cannot be enabled infinitely often without being taken

s1 p

s2 p, q s3q

s1 p

s2 p, q

Page 88: 第 6 章  模型检测

计算树逻辑模型检测中的公平性• 公平性有两种定义

– Weak fairness is sufficient for asynchronous models (no process waits forever if it can move).

– Strong fairness is necessary for modeling synchronous interaction (rendezvous).

强公平性使模型检测变得困难s1 p

s2 p, q s3q

s1 p

s2 p, q

Page 89: 第 6 章  模型检测

计算树逻辑模型检测中的公平性• 公平性的管理

– 线性时态逻辑可以管理公平性在互斥的例子中,如果想验证的公式是,并且进程 2永远处于临界状态的路径不公平的,则可以改成验证像 GFc2 这样的公式– 计算树逻辑不能管理公平性不允许写 GFc2 这样选择公平路径的公式

– 在计算树逻辑情况下,需要修改模型检测算法来体现公平性

Page 90: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法比 CTL的复杂

1 、 CTL– 用状态能满足的子公式来标记系统的状态– 这是恰当的,因为公式是在状态上求值2 、 LTL– 确定 , s 就是判断从 s 出发的所有路径上是否满足

– 子公式不是在状态上,而是沿着系统的路径求值– 模型检测必须采取不同的策略– 尽管有许多不同算法,但基本策略相同

Page 91: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

= ( S, , L ) , , s ,举例解释 如图所示– 原子命题集合 {a, b} a在图中用 a表示 : (a U b)

路径: s3, s4, s3, s2, s2, …

迹 (trace): ab, ab, ab, ab, ab, …

s2

ab

s1

ab

s4

ab

s3

ab

Page 92: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

1、为 ( 即 a U b) 构造接受的自动机 A

– 对所有的路径 , a U b当且仅当 Aa U b接受 的迹

– 假定公式的时态连接词仅包括 U 和 X– 定义闭包 C (a U b) =

{ a, b, (a U b), a, b, (a U b) }– 以下讨论略去 X,因为例中没有

Page 93: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

1、为 ( 即 a U b) 构造接受的自动机 A

– 自动机的状态是满足下面条件的该闭包最大子集 s

a) 对闭包中所有无前缀的 , 或在 s 中,但不同时在 s 中

s2

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

Page 94: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

1、为 ( 即 a U b) 构造接受的自动机 A

– 自动机的状态是满足下面条件的该闭包最大子集 s

b) 当 1 2属于 闭包时, 1 2

在 s 中,当且仅当 1或 2 在 s 中

图中指a U b

s2

abs1

ab

s4

abs3

ab

s3

ab

Page 95: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

1、为 ( 即 a U b) 构造接受的自动机 A

– 自动机的状态是满足下面条件的该闭包最大子集 s

b) 当 1 2属于 闭包时, 1 2

在 s 中,当且仅当 1或 2 在 s 中

c) 当 1 2属于 闭包时,情况类似

图中指a U b

s2

abs1

ab

s4

abs3

ab

s3

ab

Page 96: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

1、为 ( 即 a U b) 构造接受的自动机 A

– 自动机的状态是满足下面条件的该闭包最大子集 s

d) 若 1U 2 在 s 中,那么 1或 2 在 s 中

图中指a U b

s2

abs1

ab

s4

abs3

ab

s3

ab

Page 97: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

1、为 ( 即 a U b) 构造接受的自动机 A

– 自动机的状态是满足下面条件的该闭包最大子集 s

d) 若 1U 2 在 s 中,那么 1或 2 在 s 中

e) 若 (1U 2)

在 s 中,那么2 在 s 中 图中指

a U b

s2

abs1

ab

s4

abs3

ab

s3

ab

Page 98: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

1、为 ( 即 a U b) 构造接受的自动机 A

– 初始状态是那些包含 ( 即 a U b )的状态

图中指a U b

s2

abs1

ab

s4

abs3

ab

s3

ab

Page 99: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

1、为 ( 即 a U b) 构造接受的自动机 A

– ( s, s )属于状态迁移关系,iff 下列条件都满足:

(图中无箭头表示双向)

a)若 1U 2 s 且 2s,则任何状态可作为 s

图中指a U b

s2

abs1

ab

s4

abs3

ab

s3

ab

Page 100: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

1、为 ( 即 a U b) 构造接受的自动机 A

– ( s, s )属于状态迁移关系,iff 下列条件都满足:

(图中无箭头表示双向)

a)若 1U 2 s 且 2s,则任何状态可作为 s

b)若 (1U 2) s

且 1 s,则任何状态可作为 s

图中指a U b

s2

abs1

ab

s4

abs3

ab

s3

ab

Page 101: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

1、为 ( 即 a U b) 构造接受的自动机 A

– ( s, s )属于状态迁移关系, iff 下列条件都满足:(图中无箭头表示双向)

c)若 1U 2 s 且 2s,则 1U 2 s

因为 1U 2 =

2 (1

X(1U 2 ))图中指a U b

s2

abs1

ab

s4

abs3

ab

s3

ab

Page 102: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

1、为 ( 即 a U b) 构造接受的自动机 A

– ( s, s )属于状态迁移关系, iff 下列条件都满足:(图中无箭头表示双向)

d)若 (1U 2) s

且 1 s,则(1U 2) s

因为 (1U 2) =

2 (1 X(1U 2 ))图中指a U b

s2

abs1

ab

s4

abs3

ab

s3

ab

Page 103: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

1、为 ( 即 a U b) 构造接受的自动机 A

– 可接受路径的条件:若有含 1U 2的状态,则必定有含 2

的状态在后面出现对本例,路径不能以 s3, s3, … 结尾

s2

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

Page 104: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

1、为 构造恰好接受 的自动机 A

2、将自动机 A和系统模型合并,得到一个状态迁移系统,其路径同时是 A和的路径

s2

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

Page 105: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

2、将自动机 A和系统模型合并,得到一个状态迁移系统,其路径同时是 A和的路径 s2

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

s2

ab

s1

ab

s4

ab

s3

ab

Page 106: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

2、将自动机 A和系统模型合并,得到一个状态迁移系统,其路径同时是 A和的路径

– 构造的等价系统s2

ab

s1

ab

s4

ab

s3

ab

s3

ab

s2

ab

s1

ab

s4

ab

s3

ab

Page 107: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

2、将自动机 A和系统模型合并,得到一个状态迁移系统,其路径同时是 A和的路径

– 构造的等价系统– 合并(保留公共的迁移)

s2

ab

s1

ab

s4

ab

s3

ab

s3

ab

Page 108: 第 6 章  模型检测

线性时态逻辑的模型检测算法

s2

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

s2

ab

s1

ab

s4

ab

s3

ab

s3

ab

Page 109: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

2、将自动机 A和系统模型合并,得到一个状态迁移系统,其路径同时是 A和的路径

– 构造等价系统– 合并(保留公共的迁移)

s2

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

Page 110: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

2、将自动机 A和系统模型合并,得到一个状态迁移系统,其路径同时是 A和的路径

3、在被合并的状态迁移系统中搜寻从对应s 的状态出发的路径

s2

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

Page 111: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略

3、在被合并的状态迁移系统中搜寻从对应 s 的状态出发的路径

– 若无这样的路径,则输出yes, , s

– 若有这样的路径,则输出no, , s 。并且从所找的路径可以提取反例

– 本例的反例是s3, (s4, s3,) s2, s2, …和s3, s4, (s3, s4,) s3, s1, s2, s2, …

s2

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

Page 112: 第 6 章  模型检测

线性时态逻辑的模型检测算法• LTL的模型检测算法的基本策略对 = ( S, , L ) ,判断 , s

1、为 构造恰好接受 的自动机 A

2、将自动机 A和系统模型合并,得到一个状态迁移系统,其路径同时是 A和的路径

3、在被合并的状态迁移系统中搜寻从对应 s 的状态出发的路径

– 若无这样的路径,则输出 yes, , s – 若有这样的路径,则输出 no, , s 。并且从所找的路径可以提取反例


Recommended