【系统分析与验证笔记】Transition System模型知识点

342 阅读10分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

项目到模型的转换原因

当我们需要对一个项目进行验证时,我们无法对该项目直接验证,而是要转换成可以做验证的模型,比如一个C语言程序,要先将它转换为一阶逻辑公式,再将一阶逻辑公式转换为Kripke结构,之后我们才能进行验证分析,得到我们所需的结论。

本章基本词汇解释

  • State(状态):系统在某一时刻的特性,也值程序中所有变量的值。例如:交通灯的红色、黄色、绿色。

  • Transition(转换/转移/迁移):指从一个状态到另一个状态的演化。例如:交通灯由红色变为黄色。

    在程序中,可以理解为

    • 当前时刻:{x=1,y=2}
    • 执行变迁:x=5,y=x+1
    • 下一时刻:{x=5,y=6}
  • Action(动作):过程之间的沟通机制。

  • Atomic Propositions(原子命题):形式化临时特征。原子表示不可再分,命题表示这是具有判断能力的陈述句。例如:X=1;店里没有顾客。

  • Kripke Structure(状态迁移系统):是一个基于原子命题AP的四元组,用MM表示,M=S,S0,R,L)M = (S,S_0,R,L)

    • SS是有限状态集合
    • S0S_0是初始状态集合
    • RR是状态之间的关系,如RS×SR\subseteq S \times S,表示状态之间所有的关系。(这里的×\times表示笛卡尔积)
    • LL是一个标签函数,状态到原子命题集合的一个函数,如L(s0)={a,b}L(s_0)=\{a,b\}
  • First order logic(一阶逻辑系统):用一阶逻辑描述并发系统的状态,有四个属性:

    • V={v1,,v1}V=\{v_1,\cdots,v_1\}表示系统变量集合
    • DD表示变量的有限域,比如布尔值变量的有限域为{true,false}
    • AA表示变量VV到有限域DD的一个映射(也叫赋值)
    • statestate:使它为真的公式就是状态。比如S=(v1=2)(v2=3)S=(v_1=2)\wedge(v_2=3),因为v1=2v_1=2v2=3v_2=3都为真,所以(v1=2)(v2=3)(v_1=2)\wedge(v_2=3)也为真,因此SS称之为状态。
    • 如果D={2,3,4,5}S={(v1=2)(v2=3)(v35)}D=\{2,3,4,5\},S=\{(v_1=2)\wedge(v_2=3)\wedge(v_3\neq 5)\},则该SS其实表示了三个状态:
      • S1={(v1=2)(v2=3)(v3=2)}S_1=\{(v_1=2)\wedge(v_2=3)\wedge(v_3 = 2 )\}
      • S2={(v1=2)(v2=3)(v3=3)}S_2=\{(v_1=2)\wedge(v_2=3)\wedge(v_3 = 3 )\}
      • S3={(v1=2)(v2=3)(v3=4)}S_3=\{(v_1=2)\wedge(v_2=3)\wedge(v_3 = 4 )\}
    • 状态之间的合并用\cup表示,如S1S2S3S_1 \cup S_2 \cup S_3
    • 并发系统以一阶逻辑系统公式进行转换的过程:
      • VV表示当前的变量集合,VV'表示下一时刻变量的集合,如V={v1,v2,v3}V=\{v_1,v_2,v_3\}V={v1,v2,v3}V'=\{v_1',v_2',v_3'\}v12,v23,v35,v11,v25,v34v1\leftarrow 2, v2\leftarrow3, v3\leftarrow5,v1'\leftarrow 1, v2'\leftarrow5, v3'\leftarrow4
      • 转移过程:(v1=2v2=3v3=5)(v1=1v2=5v3=4)(v_1=2\wedge v_2=3 \wedge v_3=5) \wedge (v_1'=1\wedge v_2'=5 \wedge v_3'=4)
  • Transition System(转换系统,简称TS):是一个六元组,TS=(S,Act,,I,AP,L)TS = (S, Act,\rightarrow , I,AP, L)

    • ActAct是组动作的合集;
    • \rightarrow表示转换关系,SActS\rightarrow \subseteq S * Act * S,是状态-动作-状态的转移关系集合;
    • II是一组初始状态,ISI \supseteq S
    • APAP是一组原子命题;
    • LL是一个标签函数,S2APS \rightarrow 2^{AP}

如果状态集SS、动作集ActAct、原子命题APAP都是有限的,那么称这个TSTS是有限的。

基本动作的转移公式:SαSS\overset{\alpha }{\rightarrow}S'

  • 含义: 动作α\alpha将状态SS转变为状态S{S}'
  • 备注:
    • SS的下一个状态S{S}'是不确定的,只有经历了动作α\alpha的转换,SS的下一个状态S{S}'才被确定下来;
    • 当初始状态集包含超过1个状态时,初始状态SS也是非确定的;
    • 动作是为通信建模而引入的机制,其它操作无需在意动作所执行的内容。

标签函数(Label function):L(s)2APL(s)\in 2^{AP}

  • 状态s满足命题逻辑公式Φ如果L(s)使公式Φ真;即sΦ iff L(s)Φs \models \Phi \ iff \ L(s) \models \Phi
  • 原子命题集合AP应当选择感兴趣的特征,也就是模型需要考虑的特征;
  • 用法举例:L(select) = { paid },表示在select状态时,取得的标签为paid。
  • L(s)2APL(s)\in 2^{AP}其实就是L(s)APL(s)\subseteq AP,原子性质集合

构建Kripke Sructure模型

需要根据程序的四个特征进行建模:顺序、分支、循环、并发

顺序程序(Sequential program)的建模

  • 方法:对程序进行标签化
  • 目的:将程序一条条处理
  • 打标签的四个方法:
    • 如果是一条普通的语句P,则标签为:PL=PP^L =P
    • 如果是两条语句P=P1;P2P=P_1;P_2,则标签为:PL=P1L;l:P2LP^L=P_1^L; l'' : P_2^L
    • 如果是分支语句P=if  b  then P1 else P2 endifP=if \ \ b \ \ then \ P_1 \ else \ P_2 \ endif,则标签为:PL=if  b  then l1:P1L else l2:P2L endifP^L=if \ \ b \ \ then \ l_1:P_1^L \ else \ l_2:P_2^L \ endif
    • 如果是循环语句P=while b do P1 endwhileP=while \ b \ do \ P_1 \ endwhile,则标签为:PL=while  b  do l1:P1L endwhileP^L=while \ \ b \ \ do \ l_1:P_1^L \ endwhile
  • 程序初始状态集合:S0(V,pc)pre(V)pc=mS_0(V, pc) \equiv pre(V) \wedge pc=m
  • pre(V)pre(V)表示VV的初始值,pcpc表示当前的语句入口,pcpc'表示当前的语句出口,仅限于该条语句,而mm表示程序的入口,mm'表示程序的出口,作用于整个程序(在后面的练习中可以深刻体会他们的区别)
  • \equiv表示左右两侧的公式等价,所代表的含义相同,只不过表达方法不同而已
  • 翻译过程:C(l,P,l)C(l,P,l')表示程序入口为ll,出口为ll',程序要执行的语句为PPCC表示这是一个要翻译的过程,翻译过程一般会有如下五种语句被翻译:

    • 赋值语句:C(l,ve,l)pc=lpc=lv=esame(V\{v})C (l, v\leftarrow e, l' )\equiv pc=l \wedge pc'=l' \wedge v'=e \wedge same(V \backslash \{v\})
    • 空语句:C(l,skip,l)pc=lpc=lsame(V)C (l, skip, l' )\equiv pc=l \wedge pc'=l' \wedge same(V)

    skipskip表示什么也不执行,空语句存在的目的是为了程序中对其语句等作用

    • 顺序语句:C(l,P1;l:P2,l)C(l,P,l)C(l,P2,l)C (l,P_1;l'':P_2, l' ) \equiv C (l, P, l' )\vee C (l, P_2, l' )

    • 条件语句: C(l,if b thenl1:P1 else l2:P2 endif,l)(pc=lpc=l1bsame(V))(pc=lpc=l2¬bsame(V))C(l1,P1,l)C(l2,P2,l)C (l, if \ b \ then l_1 : P_1 \ else \ l_2 : P_2 \ endif, l' ) \equiv \\ ( pc=l \wedge pc'=l_1 \wedge b \wedge same(V)) \\ \vee (pc=l \wedge pc'=l_2 \wedge \neg b \wedge same(V))\\ \vee C (l_1,P_1, l' ) \\ \vee C (l_2,P_2, l' )

    • 循环语句: C(l,while b do l1:P1 endwhile,l)pc=lpc=l1bsame(V))pc=lpc=l1¬bsame(V))C(l1,P1,l)C (l, while \ b \ do \ l_1 : P_1 \ endwhile, l' ) \equiv \\ pc=l \wedge pc'=l_1 \wedge b \wedge same(V))\\ \vee pc=l \wedge pc'=l_1 \wedge \neg b \wedge same(V))\\ \vee C (l_1,P_1, l)

    • same(V)same(V)表示VV中变量不发生变化
    • same(V\{v})same(V \backslash \{v\})表示VV中变量只有vv发生变化
    • 有些地方用l,ll',l''有些地方用l1,l2l_1,l_2的原因,个人感觉,应该是顺序语句用l,ll',l'',分支循环这种很多可能性的用l1,l2l_1,l_2
  • 练习题:对如下程序进行标签化 V={x,y,z},initial value:x=y=z=0Program:x=y+1;z=z+2;for(y;y<=3;y++)if x<y then x++;else y++;V=\{x,y,z\},initial \ value: x=y=z=0 \\ Program: \\ x=y+1; z=z+2;\\ for(y; y<=3; y++)\\ \quad if \ x<y \ then \ x++; else \ y++;

  • 答案(答案不唯一):

    • 初始化程序,先将程序标记分为三个标记语句 P1:x=y+1;z=z+2;P2:for(y;y<=3;y++)P3:if x<y then x++;else y++;P_1:x=y+1; z=z+2;\\ P_2:for(y; y<=3; y++)\\ P_3:if \ x<y \ then \ x++; else \ y++;
    • P1P_1继续标记: P11:x=y+1P12:z=z+2P1L=P11L;l12=P12LP11L=P11P12L=P12P_{11}:x=y+1\\ P_{12}:z=z+2\\ P_{1}^L=P_{11}^L;l_{12}=P_{12}^L\\ P_{11}^L=P_{11}\\ P_{12}^L=P_{12}
    • P2P_2继续标记: 首先将forfor语句转变为whilewhile语句 ywhile(y<=3)doP3y++endwhiley\\ while(y<=3)\\ do\\ \quad P_3\\ \quad y++\\ endwhile 然后进行标记 P21:yP22:y++P2L=P21L;l23=P23LP21L=P21P22L=P22P23L=while(y<=3)dol3:P3L;l22:P22L endwhileP_{21}:y\\ P_{22}:y++\\ P_{2}^L=P_{21}^L;l_{23}''=P_{23}^L\\ P_{21}^L=P_{21}\\ P_{22}^L=P_{22}\\ P_{23}^L=while(y<=3) do l_3:P_3^L;l_{22}:P_{22}^L \ endwhile
    • 再对P3P_3进行标记: P31:x++P32:y++P3L:if x<y then l31:P31L elsel32:P32L endifP31L=P31P32L=P32P_{31}:x++\\ P_{32}:y++\\ P_3^L:if \ x<y \ then \ l_{31}:P_{31}^L \ else l_{32}:P_{32}^L \ endif \\ P_{31}^L=P_{31}\\ P_{32}^L=P_{32}
    • 由上述标记公式,可得一阶逻辑公式:
      • x=0y=0z=0pc=mpc=l11x=0 \wedge y=0\wedge z=0\wedge pc=m\wedge pc'=l_{11}
      • x=y+1same(V\{x})pc=l11pc=l12x'=y+1 \wedge same(V \backslash \{x \}) \wedge pc=l_{11}\wedge pc'=l_{12}
      • z=z+2same(V\{z})pc=l12pc=l2z'=z+2 \wedge same(V \backslash \{z \}) \wedge pc=l_{12}\wedge pc'=l_{2}
      • y<=3same(V)pc=l2pc=l21y<=3 \wedge same(V) \wedge pc=l_{2} \wedge pc'=l_{21}
      • ¬(y<=3)same(V)pc=l2pc=l22\neg (y<=3)\wedge same(V) \wedge pc=l_{2} \wedge pc'=l_{22}
      • same(V)pc=l21pc=l3same(V)\wedge pc=l_{21} \wedge pc'=l_{3}
      • same(V)pc=l22pc=msame(V)\wedge pc=l_{22} \wedge pc'=m'
      • x<ysame(V)pc=l3pc=l31x<y \wedge same(V) \wedge pc=l_{3} \wedge pc'=l_{31}
      • ¬(x<y)same(V)pc=l3pc=l23\neg (x<y) \wedge same(V) \wedge pc=l_{3} \wedge pc'=l_{23}
      • x=x+1same(V\{x})pc=l31pc=l23x'=x+1 \wedge same(V \backslash \{x \}) \wedge pc=l_{31} \wedge pc'=l_{23}
      • y=y+1same(V\{y})pc=l31pc=l23y'=y+1 \wedge same(V \backslash \{y \}) \wedge pc=l_{31} \wedge pc'=l_{23}
      • y=y+1same(V\{y})pc=l23pc=l2y'=y+1 \wedge same(V \backslash \{y \}) \wedge pc=l_{23} \wedge pc'=l_{2}

IMP语言转一阶逻辑公式再转Kripke Structure程序

  • IMP语法规则:
    • Aexp:a::=nxa0+a1a0a1a0×a1,n[0,2]a::=n|x|a_0+a_1|a_0-a_1|a_0 \times a_1 , n\in [0,2]
    • Bexp:b::=truefalsea0==a1a0a1¬bb0b1b0b1b::=true|false|a_0==a_1|a_0 \leq a_1|\neg b|b_0\wedge b_1|b_0 \vee b_1
    • Com: c::=cobegin p1p2 coendp::=skip;x:=a;p0;p1wait(b)if b then p0 else p1while b do p\qquad c::=cobegin \ p1||p2 \ coend \\ \qquad p::= skip; | x:=a; |p_0;p_1 |wait(b) |if \ b \ then \ p_0 \ else \ p_1|while \ b \ do \ p
    • 整形变量取值范围:[0,1,2][0,1,2]
    • 布尔变量取值范围:[0,1][0,1]
    • 变量名规则:单个小写字母,如a,b,c,a,b,c,\cdots
  • 样例1:
    • 输入IMP语言: x:=1;y:=1;x:=x+y;x:= 1;\\ y:= 1;\\ x:= x + y;
    • 输出一阶逻辑公式: D{0,1,2}V{x,y}S0(x,y)x=1y=1D\equiv \{0,1,2\}\\ V \equiv \{x,y\}\\ S_0(x,y)\equiv x=1 \wedge y =1 Rx=1y=1pc=mpc=l1x=x+ysame(V\{x})pc=l1pc=mR\equiv\\ x=1∧y=1∧pc=m∧pc'=l1\\ x'=x+y∧same(V \backslash \{x\})∧pc=l1∧pc'=m'
    • 输出Kripke Structure: KS=(S,S0,R,L)KS = ( S,S_0,R,L) S={<1,1>,<2,1>}S=\{<1,1>,<2,1>\} S0={<1,1>}S_0=\{<1,1>\} R(x,y,x,y)x=(x+y)mod 3y=yR(x,y,x',y')\equiv x' = (x+y)mod \ 3\wedge y' = y L(S0)={1,1}L(S_0)=\{1,1\} L(S1)={2,1}L(S_1)=\{2,1\}
    • 输出Kripke Structure图形形式: 在这里插入图片描述
  • 样例2: 某大佬程序里直接跑的结果: 在这里插入图片描述 在这里插入图片描述
  • 答案: 一个大佬用python写的程序:github.com/lypnol/impy 另一位大佬C++写的程序:git.code.tencent.com/fasasas/for…
    • 如果你是华师大郭老师的课程,这两个程序只能参考,千万别照搬,这俩郭老师都看过了,不要抱侥幸心理哦
    • 输入输出格式不唯一

并发程序(Concurrent programs)的建模

  • 原因:由一组同时执行的进程组成,进程是顺序语句,我们假设CPU是单核的,所以程序只能异步执行,一次只能执行一条语句,所以我们要进行并发建模

  • 组成: VV:并发进程变量的集合 pcipc_i:第ii个并发进程 pcpc:并发进程的计数器 PCPC:并发进程的计数器的集合

  • 表示方法:P=Cobegin P1P2Pn coendP = Cobegin \ P_1||P_2|| \cdots ||P_n \ coend

  • 标记并发程序:PL=conbegin l1:P1L l1l2:P2L l2ln:PnL ln coendP^L=conbegin \ l_1 : P_1^L \ l_1' || l_2 : P_2^L \ l_2' || \cdots || l_n : P_n^L \ l_n \ coend

  • 并发程序初始状态:S0(V,pc)pre(V)pc=mni=1(pci=)S_0(V, pc) \equiv pre(V) \wedge pc=m \wedge \underset{i=1}{\overset{n}{\wedge}}(pc_i=\perp)

  • 并发程序执行过程:

image.png

  • \perp表示数值为空或否,pc=pc = \perp表示程序未被激活
  • ni=1(pci=))\underset{i=1}{\overset{n}{\wedge}}(pc_i = \perp))表示pc1=pc2=pcn=pc_1=\perp \wedge pc_2=\perp\wedge \cdots \wedge pc_n=\perp
  • 共享变量

    • 原因:当一个变量被一个进程访问时,其他变量如果想访问,需要将此变量共享才可以
    • 方法: image.png
  • PP初始状态:S0(V,pc)pc=mpc0=pc1=(turn=0turn=1)S_0(V, pc) \equiv pc=m \wedge pc_0=\perp \wedge pc_1= \perp \wedge (turn = 0 \vee turn = 1)

  • PP的转移关系 image.png

并发还有没整理完,太多了,太难理解,以后有机会再整理

可满足性关系(Satisfaction relation):\models

  • 举个简单的例子:μ a>0 if a=1\mu \models \ a>0 \ if \ a=1,表示当a=1的时候,a>0的结果为true,最终μ\mu \modelstrue,可满足性关系的式子成立。换句话说,就是当且仅当a=1时,μ\mu满足a>0(也就是μtrue\mu \models true)。
  • true。此时μ\mu \modelstrue也就是μ\mu\models后面的这个结果为true或,才表示可满足性关系。
  • 专业解释:对原子命题集合AP的定值是将其映射到0或1上,即 μAP{0,1}\mu:AP\rightarrow \begin{Bmatrix}0,1\end{Bmatrix},记Eval(AP)是AP内命题的全部的真值指派方式组成的集合。可满足关系\models是一个二元关系(μ,ϕ)(\mu,\phi),它指示的是在μ\mu这个定值方式下,命题逻辑公式ϕ\phi的计算结果为真。
  • 真值指派:此处可以理解成对变量的赋值影响相关原子命题的真值,例如设置a=2那么命题a>0的真值为真,将所有的命题计算得到的真假,即是对整个合取式的真值指派。
  • 如果上面的文字还没能理解,那么我们再多举几个例子
    • μtrue\mu \models true
    • μaiffμ(a)=1\mu \models a \quad iff \quad \mu(a)=1
    • μϕ1ϕ2iffμϕ1andμϕ2\mu \models \phi_{1}\wedge\phi_{2} \quad iff \quad \mu \models \phi_{1} \quad and \quad \mu \models \phi_{2}

非确定性的应用(Application of nondeterministic)

  • 通过两进程交替执行对独立活动的并行执行进行建模;
  • 对两个进程访问同一共享资源而出现的复杂状况建模;
  • 用于抽象的目的或者不规范的场景;
  • 对未知或不可预测环境下的接口建模。
  • 例题:
    • 向自动售货机内插入硬币后,可以选择购买啤酒或苏打水 在这里插入图片描述
    • S = { pay , select, soda, beer }
    • I = { pay }
    • Act = { insert_coin, get_soda, get_beer, τ\tau }
    • 问题:请给出AP和L

  答案:
       AP = { paid , drink }
       L(pay) =  $\varnothing$
       L(soda) = L(beer) = { paid , drink }
       L(select) = { paid }
    
  • 答案解析:paid表示投入了硬币,drink表示饮料取出喝掉,这两个状态的取值只能为真或假。一开始既没有付款也没有喝饮料,所以对pay取标签函数得到的是空集;在投入硬币进入select状态后,因为已经付款了,所以取标签得到的是{paid};在出了饮料之后,即认为同时也可以喝了,所以取标签得到的是{paid,drink}。
  • 这是一个非确定的系统,因为在投入硬币后,既可以选择提供啤酒,也可以选择提供苏打水。
  • 当表示内部活动或者不相关活动时,使用一个特殊符号τ\tau
  • Act 用于建模和数据通信
  • AP的集合总是根据题目所需的特征来选择

从一阶逻辑公式构造Kripke structure(KS)例题

  • 题目:
    • V={x,y}V = \{ x,y \}
    • D={0,1}D = \{ 0,1 \}
    • S0=(x,y)x=1y=1S_0 = (x,y) \equiv x = 1 \wedge y = 1
    • Transition:Transition: R(x,y,x,y)x=(x+y) mod 2 y=yR(x,y,x',y') \equiv x'= (x+y) \ mod \ 2 \ \wedge y' = y
  • 问题:
    • KS=(S,S0,R,L)KS=(S,S_0,R,L)
  • 解析:
    • 该系统的所有状态用<x,y><x,y>有序对来表示,而xxyy的值域均为D={0,1}D=\{0,1\},所以<x,y><x,y>的所有取值就是DDDD的笛卡尔积来计算,S=D×D={<0,0>,<0,1>,<1,0>,<1,1>}S=D×D=\{<0,0>,<0,1>,<1,0>,<1,1>\}
    • 按照描述,系统的初始状态集合为S0(x,y)x=1y=1S_{0}(x,y)\equiv x=1\wedge y=1,所以初始状态S0={<1,1>}S_{0}=\{<1,1>\}
    • 我们需要从系统的每一个状态开始,分别计算经过转移后系统所达到的新状态。首先计算x=0,y=0x=0,y=0的情况,一次转移后,即计算新的xxyy值,得到<(0+0) mod 2,0><(0+0) \ mod \ 2, 0>,计算mod后结果为<0,0><0,0>,依次计算其余状态,我们可以得到<1,0><1,0><1,1><0,1>,<0,1><1,1><1,0> \rightarrow<1,0>,<1,1> \rightarrow<0,1>,<0,1> \rightarrow<1,1>,将其用KSKS的形式表示为R={(<0,0>,<0,0>),(<1,0>,<1,0>),(<0,1>,<1,1>),(<1,1>,<0,1>)}R=\{(<0,0>,<0,0>),(<1,0>,<1,0>),(<0,1>,<1,1>),(<1,1>,<0,1>)\}
    • 标签函数代表着某状态下取值为真的原子命题,即L(<1,1>)={x=1,y=1}L(<0,1>)={x=0,y=1}L(<0,0>)={x=0,y=0}L(<1,0>)={x=1,y=0}L(<1,1>)=\{x=1,y=1\},L(<0,1>)=\{x=0,y=1\},L(<0,0>)=\{x=0,y=0\},L(<1,0>)=\{x=1,y=0\}
  • ≡表示等同于,意思是执行S0(x,y)与执行x=1∧y=1的作用相同
  • ∧表示左右两个式子同步执行,∨表示左右两个式子依次执行
  • S0=(x,y)x=1y=1S_0 = (x,y) \equiv x = 1 \wedge y = 1表示初始状态下,xx的值为1,y的值也为1
  • R(x,y,x,y)x=(x+y) mod 2 y=yR(x,y,x',y') \equiv x'= (x+y) \ mod \ 2 \ \wedge y' = y表示转移关系,xx'的值为(x+y) mod 2(x+y) \ mod \ 2yy'的值仍然为y
  • 图像表示为: 在这里插入图片描述

  • 答案:

    • S={{x=1y=1},{x=0y=1}}S = \{\{x=1\wedge y=1\},\{x=0\wedge y=1\}\}
    • S0={{x=1y=1}}S_0 = \{\{x=1\wedge y=1\}\}
    • R={{x=1y=1x=0y=1},{x=0y=1x=1y=1}}R = \{\{x=1\wedge y=1 \wedge x' = 0 \wedge y ' =1\},\{x=0\wedge y=1 \wedge x' = 1 \wedge y ' =1\}\}
    • L(S0)={x=1y=1}L(S_0) = \{x=1\wedge y=1\}
    • L(S1)={x=0y=1}L(S_1) = \{x=0\wedge y=1\}

直接前驱和直接后继(Direct Predecessors and Successors expanded)

对于转换状态TS=(S,Act,,I,AP,L)TS = (S, Act,\rightarrow , I,AP, L),如果sSs \in SαAct\alpha \in Act

  • 一组α\alpha的直接前驱定义为: Pre(s,α)={sSsαs}Pre(s,\alpha )=\begin{Bmatrix}s'\in S | s'\overset{\alpha }{\rightarrow}s\end{Bmatrix} Pre(s)=αActPre(s,α)Pre(s)=\bigcup_{\alpha \in Act}Pre(s,\alpha)

  • 一组α\alpha的直接后继定义为: Post(s,α)={sSsαs}Post(s,\alpha )=\begin{Bmatrix}s'\in S | s\overset{\alpha }{\rightarrow}s'\end{Bmatrix} Post(s)=αActPost(s,α)Post(s)=\bigcup_{\alpha \in Act}Post(s,\alpha)

  • 直接前驱和直接后继者扩展到子集: Post(C,α)=sCPost(s,α)Post(C, \alpha)=\bigcup_{s \in C}Post(s,\alpha) Post(C)=sCPost(s)Post(C)=\bigcup_{s \in C}Post(s) Pre(C,α)=sCPre(s,α)Pre(C, \alpha)=\bigcup_{s \in C}Pre(s,\alpha) Pre(C)=sCPre(s)Pre(C)=\bigcup_{s \in C}Pre(s)

  • 转换状态TSTS的终止状态: Post(C)=Post(C)=\varnothing

对于顺序计算机程序,终止状态表示程序的终;对于并行系统,终止状态通常被认为是不理想的。

确定性的转换系统(Deterministic Transition System)

  • 关于action的确定转换系统
    • 对所有状态ss和动作α\alpha ,都有 I1 and Post(s,α)1|I|\leqslant1 \ and \ |Post(s,\alpha )|\leqslant 1
    • 表示任意状态经任意动作最多跳转到1个状态去
    • 这种系统叫做行动决定(action-deterministic)
  • 关于AP的确定转换系统
    • 对所有状态ss和AP的子集A2APA\in 2^{AP},都有 I1 and Post(s){sSL(s)=A}1|I|\leqslant1 \ and \ |Post(s)\cap \begin{Bmatrix} s'\in S|L(s')=A \end{Bmatrix} \leqslant| 1
    • 表示从某一状态出发的直接后继,其Label函数的计算结果一定是不一样的
    • 这种系统叫做AP决定(AP-deterministic)

执行片段(Execution fragment)

  • 对于转换状态TS=(S,Act,,I,AP,L)TS = (S, Act,\rightarrow , I,AP, L),有两种执行片段
    • 有限执行片段
      • 公式:ρ=s0α1s1α2...αnsn\rho = s_{0}\alpha _{1}s_{1}\alpha _{2}...\alpha _{n}s_{n}, 其中:对于所有的0in0 \leqslant i \leqslant n,都有siαi+1si+1s_{i}\overset{\alpha_{i+1}}{\rightarrow}s_{i+1}
      • 公式含义:初始状态s0s_{0},执行α1\alpha _{1}后,状态变为s1s_{1},执行α2\alpha _{2}后,状态变为s2s_{2}……状态变为sn1s_{n-1},执行αn\alpha _{n}后,状态变为sns_{n}
    • 无限执行片段
      • 公式:ρ=s0α1s1α2...\rho = s_{0}\alpha _{1}s_{1}\alpha _{2}..., 其中:对于所有的0i0 \leqslant i,都有siαi+1si+1s_{i}\overset{\alpha_{i+1}}{\rightarrow}s_{i+1}
      • 公式含义:初始状态s0s_{0},执行α1\alpha _{1}后,状态变为s1s_{1},执行α2\alpha _{2}后,状态变为s2s_{2}……$

n表示有限片段的长度,n的值大于等于0

  • 初始执行片段: 最大执行片段要么是以终止状态结束的有限执行片段,要么是无限执行片段。
  • 最大执行片段:如果执行片段以初始状态启动,则称为初始片段。
  • 执行状态:一个初始的、最大的执行片段。
  • 可达状态:一个初始的、有限的执行片段。
    • 状态sSs \in S是可达的,意为存在这样的初始、有限的执行片段:s0α1s1α2...sn1αnsn=ss_{0}\overset{\alpha_{1}}{\rightarrow}s_{1}\overset{\alpha_{2}}{\rightarrow}...s_{n-1}\overset{\alpha_{n}}{\rightarrow}s_{n}= s

    • 记Reach(TS)表示TS中的可达状态集。