Page 19 - 《软件学报》2026年第1期
P. 19

16                                                         软件学报  2026  年第  37  卷第  1  期


                    证明: 给定计数器机器       f(n)-有界可达性问题实例       M、1 , 不妨假定   M  使用的计数器是     x,y,z < X (我们总能通
                                                               n
                                                 X = X n ∪{x,y,z} 的程序  , 如图  7  所示.
                                                  ′
                                                                    ′
                 过重命名达到这个目的), 构造使用计数器             n                P

                                           b′ += n ;              loop y -=1,  x +=1,  c -=1;
                                          loop a′ +=1,  c′ += n ;  loop z -=1,  y +=1,  c -=1;
                                           n P ;                  loop b -=1,  z +=1, c-=1;
                                           M ′ ;                  a -=1;
                                          loop                    loop b +=1,  z -=1,  c -=1;
                                            zero-test ( x ) ;     loop z +=1,  y -=1,  c -=1;
                                          do half-zero-test ( x ) ;  or skip ;  loop y +=1,  x -=1,  c -=1;
                                          loop b -=1;             a -=1;
                                                 P′                 zero-test (x)
                                                                       M  的执行
                                          图 7 使用放大器和乘法三元组模拟

                      ′
                      P  可以划分为  3  个阶段.
                    1) 初始化阶段. 第    1  个  loop  语句构造了一个平凡的乘法三元组, 若其完全执行后             a = A s , 则一定有  c = A s n,
                                                                                     ′
                                                                                                   ′
                                          (  ′  ′  ′  ′  )
                 因此执行   P 前的初始格局是      τ s = a ,b ,c ,A s ,n,X . Ampl n  是一个   f (n) -放大器, 它的程序   P n  不改变  x、y、z 的值,
                                                      n
                                                                               (
                                   X n  的 ′            τ s  出发可以            τ t = a,b,c,A t , f (n),X .
                                                                                             )
                                                                                            ′
                 可以看作计数器集合为             f(n)-放大器, 因此从            Z n -计算出某个
                                                                                            n
                    2) 模拟阶段.   M  由   M  变换而来. 首先对于  M  中形如  x +=   的语句, 则   M  中需转换为  x +=  ;   k; 形如  x −=
                                ′
                                                                k
                                                                            ′
                                                                                          k b −=
                                                                                           ′
                 k  的语句, 则转换为   x −=  ;   k, 即借用计数器    b 辅助维持   x+y+z+b 总量不变. 注意, 执行     M  前的格局   τ t  满足
                                    k b +=
                                                         x+y+z+b = f (n). 其次, 对跳转语句的模拟是平凡的, halt 语
                 x = y = z = 0, b = f (n)t, 因此每次执行完模拟后都有
                                                              ′
                 句直接忽略. 最后, 考虑      M  中形如“zero? x”的语句, 在   M  中需转换为图      7  中  zero-test(x) 所示的程序模块. 设
                   zero-test(x)
                                                                                         ,
                 α −−−−−−−→ β, 则计数器  c、a  的减少量分别满足    0 ⩽ ∆c ⩽ 2(α(y)+α(z)+α(b)) = 2( f (n)−α(x)) ∆a = 2. 注意,  ∆c =
                 2 f (n) 当且仅当  α(x) = 0, 并且此时  α、β  在除了  a、c  的计数器上取值是一致的, 此情况称作一次完全的模拟.
                                                                         ′
                    3) 结束阶段. 乘法三元组中       a 的值指定了对应的模拟测零次数, 若           M  中未完成对应次数的模拟测零, 我们则
                                                             a 的清零. 随后非确定地选择执行          1  次或  0  次模块  half-
                 需要在结束阶段非确定地循环若干次测零模块来完成对
                 zero-test( x), 即  zero-test( x) 的前  4  行, 此处是为了使得即便  a  的值为奇数也能被置零. 最终, 使用循环语句将
                 x、y、z、b  清零.
                                  M  存在一个使用了   次测零的       f(n)-有界
                                                 k
                    正确性分析. 假设                                    0-执行   R, 令  A = 2k, 由   Ampl n  的性质可知: 存在   A s
                                (  ′  ′  ′  ′  )            (            ′ )             ′       ′
                                                                                                R
                 使得  P n  能够从  τ s = a ,b ,c ,A s ,n,X n   出发  Z-计算出  τ t = a,b,c,A t , f (n),X n   使得   A t ⩾ A. 考虑  P  的执行  , 它在初
                                                                                                ′   R, 因
                 始化阶段恰好循环       A s  次, 使得执行  P n  前初始格局恰好是  , Z-执行完程序     P n  可以构造出  . 随后用  R  模拟
                                                             τ s
                                                                                      τ t
                 为   R 中每个格局都满足    x+y+z ⩽ f (n), 这是可以做到的. zero-test 模块的性质保证存在一条路径使得最终执行完
                  ′                                                          A t −2k  次且每次模拟测零都是完全
                 M  后的格局   β  满足  β(a) = A t −2k, β(c) = (A t −2k) f (n), 让结束阶段循环恰好

                 的, 则最终   a = c = 0. 由于执行完  P n  后,  a、b、c 外计数器的值为  0  且不再改变, 计数器   a、b、c 也被清零了, 可以
                 确定终止格局为      0.
                                                                                              )
                                                                                 (
                                                                                   ′
                                                                                             ′
                                             ′
                              ′
                                                                                       ′
                                                                                     ′
                                                              ′
                    反之, 假设   P  存在一个   0-执行  R , 则在初始化阶段,    R  对某个   A s  构造出了  τ s = a ,b ,c ,A s ,n,X . 由于模拟阶
                                                                                             n
                                                                   P n  后就为  0. 由此可知,   ′        P n  的部分
                 段和结束阶段不改变       Z  中计数器的值, 因此这些计数器在执行完                              R  中对应程序
                                                 (            )
                                                             ′
                 是  Z  执行, 存在   A t  使得执行后格局为  τ t = a,b,c,A t , f (n),X . 最终  a,c = 0, 因此模拟阶段和结束阶段共进行了  A t /2
                                                             n
                 次模拟测零和至多       1  次半模拟测零, 得到满足      β(c) = 0 的格局  β, 从而每一次模拟测零都是完全的, 且对应的待测
                 零计数器确实是      0. 考虑  R  对应程序   M  的部分, 可以诱导出一个      M  的完全执行   R; 因为  R  维持了  x+y+z ⩽ f (n),
                                     ′
                                                                                      ′
                                               ′
                 因此  R 是  f(n)-有界的.
                    综上,  M  存在  f(n)-有界  0-执行当且仅当  P  存在  0-执行.   P  使用了  |X n |+3 个计数器, 整体上是多项式长的, 因
                                                                 ′
                                                     ′
                 此  CM f(n)-bounded reachability  ⩽ p  VASS reachability. 当  |X n | 是个与  n 无关的常数  d  时, 该结论可以更精细地表述
                 为  CM f(n)-bounded reachability  ⩽ p (d + 3)-VASS reachability. 证毕.
                    此引理为本节核心内容, 其主要贡献如下.
                    1) 引入了基于乘法三元组的通用模拟测零技术.
                    2) 介绍了给定一族     f(n)-放大器  {Ampl n } 后, 模拟  f(n)-有界计数器机器的一般方法.
   14   15   16   17   18   19   20   21   22   23   24