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

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


                 test(  s i ) 等效实现对  y i  的测零; zero-test( ) 同理. 因为有两处会跳转到  zero-test(  s i ) 的入口  zt i  处, 这里分别用  flagx
                                               x i
                                                                                                        i
                 和  flagy  作为信号, 确保完成测零后准确跳转回对应的位置              ( rx i  或  ry ). 最终完整的程序如图  6  中  zero-test( s i+1 )
                       i                                              i
                 所示.
                    注意到, 若我们将     zero-test(  s i+1 ) 中的“  s i+1  +=1;   s i+1  −=1;”这一句替换成“  x i+1  +=1;”, 最终可以构造出  x i+1 = A i+1 .
                 至此, 我们足以完成测零的模拟和对           x n + x n = A n  的递归构造. 如下定理成立.
                    定理  6 [34] . 一般  VASS  可达性问题是  EXPSPACE-难的.
                              2 n                         n                      a、b、c. 用前文阐述的方法构
                    证明: 给定   2 - 有界计数器机器可达性实例         ⟨M,1 ⟩, 不妨设其使用的计数器为
                                                                                    (
                 造出   a = b = c = A n , 此过程需要使用辅助计数器   x i 、x i 、y i 、y i 、s i 、s i 、 flagx  和  flagy i ∈ [n−1]). 随后用计数器
                                                                            i      i
                 程序   P 模拟  M  的每条语句, 并将测零语句替换成对应的模块, 例如“zero?           a ” 应该替换为“zero-test( a); zero-test( a);”
                 (只使用  zero-test(  a) 会对调  a、a 的值, 需要使用  zero-test( a) 对调回来). 易知若   M  有完全运行则  P 也有完全运行,
                                                                        8n−2 个计数器, 整体长度至多存在一个多
                 否则   P 会在某次模拟测零的过程中终止执行. 同时, 最终的程序只使用
                                                              2 n
                 项式的放大, 因此可以在多项式时间内构造完毕, 从而有                 2 -BCM reachability  ⩽ p  CP reachability. 最终由引理  2  得
                 出结论: 一般   VASS  可达性问题是    EXPSPACE-难的. 证毕.
                  3.1.2    Lipton 方法的局限性与启发
                    Lipton  给出了一般  VASS  可达性问题复杂性的首个非平凡下界, 他的证明方法是开创性的. 但后继研究表明,
                 这种方法有较大的局限性. 本节将详尽分析其局限性与相应改进思路.
                    ● 技术局限. 回顾定理      6  证明中所有模拟测零模块的行为都是完全确定的, 以至于最终并不需要判定“                       P 存在

                 0-执行”这么强的条件, 只需判定        P 存在完全执行即可. 换而言之, 我们实际上证明的是: 一般               VASS  的可覆盖性问
                 题是  EXPSPACE-难的. 另外, 在程序     P 末尾添加“loop  a +=1;” 语句可以使得若     M  存在  0-执行当且仅当   P 停机后
                 终止格局的取值情况有无限种, 于是一般             VASS  的有界性问题也是      EXPSPACE-难的. 1978  年, Rackoff [13] 给出了
                 可覆盖性问题和有界性问题的上界, 故有如下命题.
                    命题  3 [13,34] . 一般  VASS  的可覆盖性问题和有界性问题都是     EXPSPACE-完备的.
                    换言之, Lipton  的证明思路存在     EXPSPACE“壁垒”: 无法使用类似的归约方法得到任何严格更难的复杂性下
                 界  (如  Tower-难). 但由于可达性问题上下界之间差距巨大, 人们倾向于相信其一定具有严格更高的下界. 为了得
                 到这样的突破, 我们须在归约时构造一类行为并非完全确定的程序, 使其执行完全后至少有一个计数器的值无法
                 确定. 换言之, 我们须通过判定这些计数器最终的取值是                 0  来保证程序中所有模拟测零是成功的; 若我们的程序不
                 满足此性质, 则此次构造能够证明出的下界一定不比                 Lipton  的高.
                    ● 正面启发. 从   Lipton  的证明中还可以提炼出一种模拟测零的思路.
                    1) 构造不变量: 若需要对      x 进行模拟测零, 维护形如       x+ x = f (n) 的不变量是有帮助的, 其中,    f (n) 与用于归约
                 的问题有关.
                    2) 复用计数器: 多次模拟测零时, 不能为每一次模拟单独写一个独立的程序片段, 否则可能会造成使用的计数

                 器数量超指数量级. 我们更应当思考如何去复用计数器, 例如对                   x、y 测零时, 可以通过类似       reset 的模块将它们的
                                               s
                 值统一记录到某个计数器         s 上, 通过对   的模拟测零间接实现原目的.
                                                                                        x 的值转移到   上. 注
                                                                                                   s
                    结合上述两点, 我们可以观察到: 若已构造出              x+ x = f (n), 每次对   x 测零时我们不妨将
                                                                                                     s
                 意, 此过程会对调     x、x 的值, 为了恢复原值我们需要再操作一次. 假设待模拟机器                  M  一共进行了   m 次测零且   初
                 始化为   0, 则完全执行后都应当满足        s ⩽ 2mf (n), 同时若   s = 2mf (n) 则说明每次测零时  x = f (n) 都成立, 即原机器
                                                                             M  是否存在   0-执行.
                 M  的  m 次测零都成功了. 最终, 通过判定停机后         s = 2mf (n) 是否成立即可说明
                    上述方法依然存在问题: 首先,         2m f (n) 往往是个大数, 无法在归约的时候直接构造出来; 其次,              m 的精确值大
                 部分情况下都是未知的. 针对第          1  点的解决方案是: 既然可以构造         x+ x = f (n), 我们不妨初始化  s = 2mf (n), 每次
                                                                                              m ∈ N  构造出
                 转移不是增加     s  而是减少  s, 最终判定   s = 0  是否成立即可. 而后者要求我们必须能够针对无限个
                 s = 2mf (n), 这样总会有充分大的    m 可以覆盖   M  的测零次数, 随后我们在      M  停机前添加若干次测零使得最终总测
   12   13   14   15   16   17   18   19   20   21   22