第 6 章 模型检测

Post on 05-Jan-2016

155 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

第 6 章 模型检测. 验证是提高软件可信程度的重要方法 模型检测 基于逻辑推理的程序验证 模型检测 一种验证系统满足性质  (    ) 的方法。它操作在系统的模型  (语义)上,而不是在系统的描述(语法)上 通过遍历系统所有状态空间,能够对有穷状态系统进行自动验证,并自动构造不满足验证性质的反例. 第 6 章 模型检测. 模型检测的应用 常用于硬件验证和通信协议的验证中 现在开始用于软件的验证 模型检测过程的大体步骤 由用户描述的一个模型开始 判断用户所断言的假设在模型中是否有效 若无效,则产生由执行轨迹构成的反例. - PowerPoint PPT Presentation

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

• 推理规则(包括公理)

( i) (e1) (e2)

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

1, 2, …, n , 简写成

• 逻辑等价 并且

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

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

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

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

并且 – 可满足性

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

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

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

立– 命题逻辑的完备性

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

有效,当且仅当 成立

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

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

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

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

|

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

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

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

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

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

表示在模型中成立

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

模型检测及所用逻辑概述• 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

模型检测及所用逻辑概述• 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

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

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

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

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

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

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

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

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

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

• 迁移关系 S S s1 s2, …

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

p

p, q q

s1

s3s2

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

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

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

p

p, q q

s1

s3s2

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

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

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

p

p, q q

s1

s3s2

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

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

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

p

p, q q

s1

s3s2

线性时态逻辑• 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 …

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

, , 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

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

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

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

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

线性时态逻辑• 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 …

线性时态逻辑• 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 …

线性时态逻辑• 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 …

线性时态逻辑• 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 …

线性时态逻辑 , 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

线性时态逻辑 , 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

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

– G(started ready)

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

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

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

– F G deadlock

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

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

– G F enabled G F running

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

– G(floor2 directionup ButtonPressed5

(directionup U floor5))

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

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

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

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

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

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

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

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

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

G ( ) G G

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

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

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

R ( U )

W R ( )

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

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

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

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

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

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

线性时态逻辑能表达的性质• 以两个进程为例 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

线性时态逻辑能表达的性质• 以两个进程为例安全性: 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

线性时态逻辑能表达的性质• 以两个进程为例活性: 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

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

s0n1 n2

s3

s2

s1 t1 n2

c1 n2 t1 t2

c1 t2s4

s6

s5n1 t2

n1 c2

t1 c2 s7

线性时态逻辑能表达的性质• 以两个进程为例非严格顺序性– 存在路径,两个满足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

线性时态逻辑能表达的性质严格顺序性– 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

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

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

n1 n2

s3

s2

s1 t1 n2

c1 n2 t1 t2

c1 t2s4

s0

s6s8

s5n1 t2

t1 t2 n1 c2

t1 c2 s7

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

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

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

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

计算树逻辑• LTL的不足

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

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

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

计算树逻辑• 计算树逻辑 (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 )

计算树逻辑• 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

计算树逻辑• 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

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

...

......

......

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

...

......

......

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

...

......

......

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

...

......

......

计算树逻辑• 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

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

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

– AG (requested AF acknowledged )

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

acknowledged)

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

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

LTL 公式: G F enabled

– AF ( AG deadlock )

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

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

A [directionup U floor5] )

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

LTL 公式: G( floor2 directionup ButtonPressed5

(directionup U floor5) )

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

LTL 公式: G F enabled G F running

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

中插入 A 或 E

AG AF enabled AG AF running

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

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

– AG( floor3 idle DoorClosed

EG (floor3 idle DoorClosed ))

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

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

– AG( n1 EX t1 )

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

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

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

G(c1 c1W(c1 c1W c2))

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

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

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

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

两种逻辑表达能力的比较• 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 )含义都与之不同

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

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

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

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

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

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

(F ) | (X )

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

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

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

CTL

CTL LTL

1 2 3 4

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

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

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

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

pst

p ps

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

, s AG EF pp

...

p

p

...p p p

...p p p

...p p p

pst

p ps

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

, s AG EF p

中始于 s 的路

径是中的子集

p

...

p

p

...p p p

...p p p

...p p p

pst

p ps

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

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

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

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的路径

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

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跟随

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

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

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

ppp

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

ppp

p

...

p

p

...p p p

...p p p

...p p p

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

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

ppp

p

...

p

p

...p p p

...p p p

...p p p

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

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

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

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

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

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

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

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

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

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

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

:没有任何状态能带标记– 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,直至不再改变

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

– 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

计算树逻辑的模型检测算法• 算法应用例子:互斥模型,公式 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]

计算树逻辑的模型检测算法• 算法应用例子:互斥模型,公式 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]

计算树逻辑的模型检测算法• 算法应用例子:互斥模型,公式 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]

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

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

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

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

– 有时, , 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

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

– 该路径与活性 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

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

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

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

s1 p

s2 p, q s3q

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

– 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

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

– 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

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

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

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

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

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

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

线性时态逻辑的模型检测算法• 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

线性时态逻辑的模型检测算法• 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,因为例中没有

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

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

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

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

s2

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

线性时态逻辑的模型检测算法• 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

线性时态逻辑的模型检测算法• 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

线性时态逻辑的模型检测算法• 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

线性时态逻辑的模型检测算法• 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

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

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

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

图中指a U b

s2

abs1

ab

s4

abs3

ab

s3

ab

线性时态逻辑的模型检测算法• 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

线性时态逻辑的模型检测算法• 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

线性时态逻辑的模型检测算法• 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

线性时态逻辑的模型检测算法• 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

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

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

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

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

s2

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

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

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

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

s2

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

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

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

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

s2

ab

s1

ab

s4

ab

s3

ab

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

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

– 构造的等价系统s2

ab

s1

ab

s4

ab

s3

ab

s3

ab

s2

ab

s1

ab

s4

ab

s3

ab

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

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

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

s2

ab

s1

ab

s4

ab

s3

ab

s3

ab

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

s2

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

s2

ab

s1

ab

s4

ab

s3

ab

s3

ab

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

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

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

s2

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

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

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

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

s2

abs1

ab

s4

abs3

ab

s3

ab 图中指a U b

线性时态逻辑的模型检测算法• 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

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

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

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

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

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

top related