负暄琐话

我的email: rot47('649@ 6(hF+`hd"w=92vhG{>}G3"@l M >:>6?4@56 \F')

原创 八卦一下模型验证(三)收藏

新一篇: 祥林嫂精神恍惚痛苦呼唤之关于Suffix Tree | 旧一篇: (ZT)多么牛B的校长

 CSDN的大大们啊,求求你们了啊。修复这坨不能自动上传图片的错误啊。好像已经三个月了啊。图多的时候发文章真地很痛苦啊。Orz Orz Orz

准备八卦Edmund等人算法时才想起,人1986年成名作是讨论用CTL (Computational Tree Logic) 作规范语言的模型验证算法,而第一篇八卦失心疯只介绍了LTL。虽说也有算法对付Kripke结构上的LTL模型验证,但一来该算法的复杂度为P-SPACE,远不如在Kripke结构上玩儿CTL的算法复杂度来得震撼;二来经典的LTL模型验证方法是将LTL公式转换为Büchi Automata后表演自动机理论与搜索算法的花活。三来俺的初衷是介绍今年图灵奖得主Edmund等人的工作,铺垫半天后突然跳到跟自动机理论有关的LTL模型验证,大有相亲却看中女方伴娘的架势,不够厚道。所以这次先八卦CTL。下次再谈算法。其实Büchi Automata这类有限状态的无穷自动机妙趣无方,足够另开系列细细八卦。

幸好有LTL垫底,CTL也不难。同LTL一样,CTL也支持时序操作符G, F, X, U。不同的是,CTL规定,这些时序操作符前必须加上路径量词A或者E。路径量词A表示从当前状态开始所有的路径,路径量词E则表示从当前开始某些路径。这同一阶谓词逻辑里的全称量词¼以及存在量词½类似。将A、E同G、F、X、U结合起来,我们就有了如下的基本操作符:

  • AG(φ): 在任何路径上,公式φ永远为真。
  • AF(φ): 在任何路径上,公式j在某个时刻一定会为真
  • AX(φ): 在任何路径上,下一个时刻公式j为真
  • A(φ U y):在任何路径上,公式j一直为真,直到公式y为真
  • EG(φ): 至少在一条路径上,公式φ永远为真。
  • EF(φ): 至少在一条路径上,公式j在某个时刻一定会为真
  • EX(φ): 至少在一条路径上,下一个时刻公式j为真
  • E(φ U y):至少在一条路径上,公式j一直为真,直到公式y为真

下面有一堆图示。每幅图都代表系统状态的转移。每坨节点表示系统在某一时刻的状态。路径表示系统状态在不同时刻间的转移。当前状态是每坨状态图的根节点。当p在节点代表的状态里为真时,该节点涂成白色。如果p在节点代表的状态里为假,该节点涂成黑色。节点涂成灰色,表示我们不关心p的值—p可以为真也可以为假(是滴,排中律在这里不重要。去掉排中律,我们就得到了Intuitionistic Logic。不过这是后话了)。

clip_image005

从上图可以看出,CTL可以用来描述未来的多种可能性。系统在每一时刻都可能发展多个平行小宇宙。换句话说,在每一时刻系统的未来都可能“分叉”。所以CTL属于分支时间逻辑(Branching Time Logic)。因为节点可能分叉,CTL计算的结果是棵树。这也是CTL全称Computational Tree Logic的由来。相比之下,LTL总是同时描述单条路径的情况。因此,可以把LTL计算的结果是一个集合。举个例子。假设下图是系统的状态转换。标签A,B,C指代每坨状态。如果状态下有字母P,则表示P在该状态为真。否则表示该状态为假。

clip_image007

如果用LTL描述这套系统,我们只关心单个路径。所以可能的情况无非是在最左边的节点陷入循环:Aw(这里的指数符号w表示A无限重复),要么是从左边开始,经过一定循环后,在最右边陷入循环:AnBCw。换句话说,我们可以判定:不管哪条路径,p最终会永远为真。用LTL的公式表达就是:FG p。

用CTL描述上面的系统就要复杂多了。比如在节点A,任意时刻都面临两个选择:要么继续在A循环,要么到B。所以在CTL的描述下,系统是一颗无限展开的树。我们可以用CTL判定在任何路径上,最终某条分支 上p在所有状态上都为真。用公式表达就是:AF EG p.

clip_image008

初学CTL和LTL时,容易错误地以为CTL是LTL的超集 – 在LTL公式的操作符前加上路径量词A不就是CTL了?可惜数学就是奇妙得让人沮丧。就用上面的系统作例子。我们找不到对应LTL描述FG p的CTL公式。给FG p加上路径量词,我们得到AF AG p。可惜AF AG p在上述系统中不成立,因为不管在哪条途径上,我们都可以拐到节点B上,使得AG p为假。那LTL是不是CTL的超集嗫?很可惜,也不是。比如AG EF p, 在LTL里就找不到对应表达。

有不兼容,便有比较。有比较,便有人要分个高下。于是长达30年的LTL vs. CTL辩论便从1977年Pnuelli发表那篇时序逻辑的论文时开始。Flame war不是程序员的专利。总的来说,从逻辑的角度看。两种语言各有长短。实际用于模型验证时,众多老大的意见是LTL的表达能力更强。但从计算的角度看,实现CTL模型验证相对简单。最后的结果是,模型验证早期,弱即是强的KISS原则占了上风,以SMV为代表的CTL模型验证软件占统治地位。不过风水轮流转,后来大家又发现LTL写的系统描述更容易理解,再加上LTL模型验证的算法有长足进步,Cadence’s SMV和SPIN这类用LTL的验证软件开始崛起。

发表于 @ 2008年06月14日 15:58:00|评论(loading...)|收藏

新一篇: 祥林嫂精神恍惚痛苦呼唤之关于Suffix Tree | 旧一篇: (ZT)多么牛B的校长

评论

#uoyevoli 发表于2008-06-15 03:43:18  IP: 58.19.92.*
g9很有个性哦.
但是为什么不让RSS全文输出聂?
#fferror 发表于2008-06-15 06:44:20  IP: 222.240.167.*
CTL和LTL的确是互不包含的,但都包含在CTL*中。
g9所言"比如AF EG p, 在LTL里就找不到对应表达"貌似不是合适的反例,不就是FG p? AG EF p在LTL没有对应物倒是真的。
#g9yuayon 发表于2008-06-15 09:27:27  IP: 69.17.178.*
@uoyevoli, 我也想RSS全文输出。可惜CSDN把这项功能禁掉了。可以用GReader Preview Enhanced在GReader下享受全文RSS。连接:http://userscripts.org/scripts/show/9455。

@fferror, 谢谢指出错误。的确是AG EF p。已经改过来了。
#uoyevoli 发表于2008-06-19 19:45:08  IP: 221.201.66.*
@g9,我看看哈.谢谢推荐
#thunder43 发表于2008-06-26 02:26:56  IP: 124.42.78.*
您好,

感谢您提交的BUG,我们的开发人员正在努力解决这个问题,近期我们会更换一个定制的更好用的HTML编辑器。

关于RSS全文输出的问题,由于打开全文输出后各种爬虫的频繁抓取会给服务器带来巨大的压力,为了能保障服务的稳定,所以暂时屏蔽了这个功能。

为给您带来的不便表示歉意。

以后如有任何问题,可通过私信直接同我联系,谢谢!

张一雷
CSDN空间 项目经理
2008-06-26 10:32:55作者回复
那就谢谢张老师了。:-)
#dikatour 发表于2008-06-30 21:27:41  IP: 121.0.31.*
最近不知道怎么回事,公司打开csdn的速度可以用蜗牛的速度来形容,不知道是不是有世仇:D

csdn博客很讨厌的一个地方就是每篇文章后面现在都多出来一个“收藏”,这两个字摆在每篇文章的后面,极度破坏美感。

一眼扫过去,
A...收藏
B....收藏
C.....收藏
D......收藏

没法看了
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © g9