【系统分析与验证笔记】Data-Dependent Systems和Program Graph讲解

有一个自动售货机(Beverage Vending Machine),现在需要设计一个模型,计数苏打水(soda)和啤酒(beer)的数量,如果自动售货机是空的,则返回插入的硬币(coin)

  • Data-Dependent Systems和TS模型不同的是,这里用位置(Location)替换TS的状态,用转移条件(Conditional transition)替换TS的转换关系。

对于自动售货机:

  • 状态: start, select
  • 条件转移:
    1. 从初始位置投入硬币后,转变为等待选择饮料位置
      s t a r t ↪ t u r e   :   c o i n s e l e c t start \xhookrightarrow[]{ture \ : \ coin} select startture : coin select
    2. 从初始位置填满苏打和啤酒后,位置仍然为初始位置
      s t a r t ↪ t u r e   :   t u r e : r e f i l l s t a r t start \xhookrightarrow[]{ture \ : \ ture:refill} start startture : ture:refill start

start表示售货机处于初始位置
select表示售货机处于已完成投币,等待选择饮料的位置

转移条件 g : α g:\alpha g:α

在自动售货机ture:coin和ture:refill,他们是转移条件,表示为 g : α g:\alpha g:α

  • g g g表示一个布尔状态
  • α \alpha α表示一个动作,只有当 g g g为true的时候,才会执行动作 α \alpha α,否则什么也不会执行

我们可以再看一些其他的条件转移过程:

  1. 当苏打饮料的数量大于0的时候,执行sget动作获取苏打饮料
    s t a r t ↪ n s o d a   >   0   :   s g e t s t a r t start \xhookrightarrow[]{nsoda \ > \ 0 \ : \ sget} start startnsoda > 0 : sget start
  2. 当啤酒的数量大于0的时候,执行bget动作获取啤酒
    s t a r t ↪ n b e e r   >   0   :   b g e t s t a r t start \xhookrightarrow[]{nbeer\ > \ 0 \ : \ bget} start startnbeer > 0 : bget start
  3. 当苏打饮料和啤酒的数量为空的时候,执行ret_coin动作退回投入的硬币
    s t a r t ↪ n s o d a   =   0 ∧ n b e e r   =   0   :   r e t _ c o i n s t a r t start \xhookrightarrow[]{nsoda \ = \ 0 \wedge nbeer \ = \ 0 \ : \ ret \_coin} start startnsoda = 0nbeer = 0 : ret_coin start

不同动作产生的不同影响:

动作说明影响
coin投入硬币
ret_coin退回硬币
refill重新填满苏打和啤酒nsoda := max;nbeer := max
sget获取一瓶苏打nsoda := nsoda -1
bget获取一瓶啤酒nbeer := nbeer -1

nsode表示苏打的数量,nbeer 表示啤酒的数量

具备类型的变量(typed variable)

  • 概念:一个标准化的类型(如整数、布尔值、字符等)将和变量相关联以对系统建模

  • Var:前面的例子中 nsoda和nbeer都属typed variable,简称变量(Var)。

  • dom(x):每个变量x的取值范围记作域(dom)。对数字电路而言,变量的取值只能是0或者1,但对于软件而言,变量的取值范围可能非常大(如考虑程序内整数的范围),这时没法再用域做有效的限制,所以引出域的概念。对于n个变量 x = ( x 1 , x 2 , . . . , x n ) x = (x_{1},x_{2},...,x_{n}) x=(x1,x2,...,xn),其域为 D = ( D 1 × D 2 × . . . × D n ) D = (D_{1}\times D_{2}\times ...\times D_{n}) D=(D1×D2×...×Dn)

  • Eval(Var):对所有变量的定值,所有可能结果的集合记作Eval(Var),其中的一种定值方式记作映射 η \eta η,如对变量x的定值即记作 η ( x ) \eta(x) η(x)

  • Cond(Var):在变量上设置的所有条件的集合,记作Cond(Var)

  • Effect:动作对变量的影响是动作作用于变量原值,再得到变量新值的这样一个映射,即 A c t × E v a l ( V a r ) → E v a l ( V a r ) Act \times Eval(Var)→ Eval(Var) Act×Eval(Var)Eval(Var)

  • 范例:以一个动作 α : x : = y + 5 \alpha : x:=y+5 α:x:=y+5为例,初始时对变量x和y的求值 η ( x ) = 17 , η ( y ) = − 2 \eta(x)=17,\eta(y)=-2 η(x)=17η(y)=2
    如果对x执行 α \alpha α动作,则x的值最终等于y+5,也就是-2+5=3
    E f f e c t ( α , η ) ( x ) = η ( y ) + 5 = − 2 + 5 = 3 Effect(\alpha ,\eta )(x)=\eta(y)+5=−2+5=3 Effect(αη)(x)=η(y)+5=2+5=3
    如果对y执行 α \alpha α动作,因为 α \alpha α只对x的值进行修改,不对y的值进行修改,所以y的值仍然为-2
    E f f e c t ( α , η ) ( y ) = η ( y ) = − 2 Effect(\alpha ,\eta )(y)=\eta (y)=−2 Effect(α,η)(y)=η(y)=2

程序图 (Program Graph,简称PG)

  • 概念:有向图,连接不同结点的边被标记为变量和动作,结点标记为位置。
  • 行动 a c t i o n action action的效果是通过映射来形式化的,比如上面具备类型的变量的那个范例:
    • E f f e c t : A c t × E v a l ( V a r ) ↪ E v a l ( V a r ) Effect :Act × Eval(Var) \hookrightarrow Eval(Var) Effect:Act×Eval(Var)Eval(Var)
    • α    a c t i o n    x : = y + 5 \alpha \ \ action \ \ x := y+5 α  action  x:=y+5
    • η    e v a l u a t i o n    η ( x ) = 17 , η ( y ) = − 2 \eta \ \ evaluation \ \ \eta(x) = 17 , \eta(y) = −2 η  evaluation  η(x)=17η(y)=2
    • E f f e c t ( α , η ) ( x ) = η ( y ) + 5 = − 2 + 5 = 3 Effect(\alpha,\eta)(x)=\eta(y) + 5 =−2 + 5 = 3 Effect(α,η)(x)=η(y)+5=2+5=3
    • E f f e c t ( α , η ) ( y ) = η ( y ) = − 2 Effect(\alpha,\eta)(y) =\eta(y) = −2 Effect(α,η)(y)=η(y)=2
  • PG是一个六元组 P G = ( L o c , A c t , E f f e c t , ↪ , L o c 0 , g 0 ) PG = (Loc, Act, Effect, \hookrightarrow, Loc_{0}, g_{0}) PG=(Loc,Act,Effect,,Loc0,g0)
    • Loc是一系列位置的集合
    • Act是一系列动作的集合
    • Effect是 A c t × E v a l ( V a r ) → E v a l ( V a r ) Act \times Eval(Var) \rightarrow Eval(Var) Act×Eval(Var)Eval(Var)
    • ↪ ⊆ L o c × C o n d ( V a r ) × A c t × L o c \hookrightarrow \subseteq Loc \times Cond(Var) \times Act \times Loc Loc×Cond(Var)×Act×Loc,是一个关系转移条件
    • L o c 0 ⊆ L o c Loc_{0} \subseteq Loc Loc0Loc:是一系列初始位置的集合
    • g 0 ∈ C o n d ( V a r ) g_{0} \in Cond(Var) g0Cond(Var):是一系列初始条件的集合
  • 在之前的自动售货机的范例中
    • L o c = { s t a r t , s e l e c t } Loc=\{start,select\} Loc={start,select}
    • L o c 0 = { s t a r t }   V a r = { n s o d a , n b e e r } Loc_{0}=\{start\} \ Var=\{ nsoda,nbeer\} Loc0={start} Var={nsoda,nbeer}
    • A c t = { b g e t , s g e t , c o i n , r e t _ c o i n , r e f i l l } Act=\{bget,sget,coin,ret\_coin,refill\} Act={bget,sget,coin,ret_coin,refill}
    • g 0 = { n s o d a = m a x ∧ n b e e r = m a x } g_{0}=\{nsoda=max \wedge nbeer=max \} g0={nsoda=maxnbeer=max} ,表示刚开始,苏打和啤酒的数量都是满的
    • E f f e c t : Effect: Effect
      • E f f e c t ( c o i n , η ) = η Effect(coin,\eta) = \eta Effect(coin,η)=η,表示投入硬币,目标变量(nsoda和nbeer)没有改变
      • E f f e c t ( r e t c o i n , η ) = η Effect(ret_coin,\eta) = \eta Effect(retcoin,η)=η,表示退回硬币,目标变量(nsoda和nbeer)没有改变
      • E f f e c t ( s g e t , η ) = η [ n s o d a : = n s o d a − 1 ] Effect(sget,\eta) = \eta[nsoda:=nsoda-1] Effect(sget,η)=η[nsoda:=nsoda1],表示获取一瓶苏打,nsoda的值减少一
      • E f f e c t ( b g e t , η ) = η [ n b e e r : = n b e e r − 1 ] Effect(bget,\eta) =\eta[nbeer:=nbeer-1] Effect(bget,η)=η[nbeer:=nbeer1],表示获取一瓶啤酒,nbeer的值减少一
      • E f f e c t ( r e f i l l , η ) = [ n s o d a : = m a x , n b e e r : = m a x ] Effect(refill,\eta) = [nsoda:=max,nbeer:=max] Effect(refill,η)=[nsoda:=max,nbeer:=max],表示重新填满苏打和啤酒,nsoda和nbeer的值等于最大值
    • PG图:(其中,结点内的黑色实心表示啤酒,空心表示苏打,图中初始位置只有两瓶啤酒和两瓶苏打)
      在这里插入图片描述
  • PG转换为TS的方法
    • PG六元组:
      P G = ( L o c , A c t , E f f e c t , ↪ , L o c 0 , g 0 ) PG = (Loc, Act, Effect, \hookrightarrow, Loc_{0}, g_{0}) PG=(Loc,Act,Effect,,Loc0,g0)
      分别是位置、动作、影响、转移关系、初始位置、初始限定条件
    • TS六元组:
      T S = ( S , A c t , → , I , A P , L ) TS = (S, Act,\rightarrow , I,AP, L) TS=(S,Act,,I,AP,L)
      分别是状态、动作、转移关系、初始状态、原子命题、标签函数
    • 具体转换规则如下:
      • S = L o c × E v a l ( V a r ) S=Loc \times Eval(Var) S=Loc×Eval(Var),表示,TS的状态是位置与变量取值的笛卡尔积。具体来说,新的状态包含了位置和位置上的变量取值

      • A c t Act Act保持不变

      • → ∈ S × A c t × S \rightarrow \in S \times Act \times S S×Act×S由以下规则定义:
        ℓ ↪ g : α ℓ ′ ∧ η ⊨ g ⟨ ℓ , η ⟩ → α ⟨ ℓ ′ , E f f e c t ( α , η ) ⟩ \frac {\ell \overset{g:\alpha }{\hookrightarrow} {\ell}' \wedge \eta \models g} {\langle \ell , \eta \rangle \overset{\alpha } {\rightarrow} \langle {\ell}' , Effect(\alpha ,\eta ) \rangle } ,ηα,Effect(α,η)g:αηg
        表示,转移关系是在某状态对应于PG上的原位置 ℓ \ell 上当前赋值 η \eta η满足动作 α \alpha α执行条件 g g g时,从原状态 ⟨ l , η ⟩ \langle l,\eta \rangle l,η,经动作 α \alpha α,到达新状态 ⟨ l ′ , E f f e c t ( α , η ) ⟩ \langle l',Effect(\alpha, \eta) \rangle l,Effect(α,η)的转移关系。
        其中, ℓ ′ {\ell}' 是原PG上的位置 ℓ \ell 依动作 α \alpha α ↪ \hookrightarrow 转移所到达的新位置(可以和 ℓ \ell 相同),而 E f f e c t ( α , η ) Effect(\alpha, \eta) Effect(α,η)是当前的变量赋值 η \eta η E f f e c t Effect Effect表中动作 α \alpha α对应的影响操作后的新的变量赋值(可以和 η \eta η相同)。

      • I = { ⟨ ℓ , η ⟩ } ∣ ℓ ∈ L o c 0 ∪ { g ∈ C o n d ( V a r ) ∣ η ⊨ g 0 } I = \{ \langle \ell , \eta \rangle \} | \ell \in Loc_{0} \cup \{ g \in Cond(Var) | \eta \models g_{0} \} I={,η}Loc0{gCond(Var)ηg0},表示初始状态是PG中的所有初始位置,和满足初始条件的所有变量赋值的笛卡尔积。

      • A P = L o c ∪ C o n d ( V a r ) AP = Loc \cup Cond(Var) AP=LocCond(Var),表示原子命题集合是所有的位置 L o c Loc Loc和PG中出现的所有条件 C o n d ( V a r ) Cond(Var) Cond(Var)的并集。

      • L = { ℓ } ∪ { g ∈ C o n d ( V a r ) ∣ η ⊨ g } L = \{ \ell \} \cup \{ g \in Cond(Var)| \eta \models g \} L={}{gCond(Var)ηg},表示对状态取标签得到的是位置 ℓ \ell 以及变量赋值 η \eta η所满足的限定条件 g g g的集合。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

print_Hyon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值