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

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


                       inv : A,B,C 7→ (A+C)− A·4 , 本节均考虑这种形式的    inv-三元组   (见定义   3). 该不变量也可以理解为
                                           B
                    令
                     (  B  )           B       B
                 C = A 4 −1 , 之所以使用   4 −1  而非  4  是为了使得   B = 0  当且仅当  C = 0, 最终判定  c = 0  即可, 否则需要判定
                 c = a, 但这是非平凡的, 还需额外的程序实现. 除了这一点改动之外, Czerwiński 等人              [37] 的方法本质上还是递归构
                 造  F d (n)-放大器, 在有了前文技术的基础上, 本节仅作简单介绍.
                                                                                x、y, 一次成功的测零不应当对
                    首先, 使用新三元组模拟测零的方式与前文中不同. 不妨设待测零计数器为
                 x、y 产生影响. 直观上,    b 记录了允许模拟测零的次数, 因此每次模拟测零只需减                1 即可. 前文中我们总是维持       a+ x+
                                                                       (  b−1  )  b  −1
                 y = A 不变, 但此时这并不适用, 因为这样测零后必须令             b,c 7→ b−1, c 4  −1 (4 −1) , 这显然不是容易的. 计算
                 可知, 单独维持   C 不变也不容易, 最佳选择是保持         A+C = a+ x+y+c 始终不变. 假设模拟测零前格局         α 满足  α(a+ x+
                 y)4 α(b)  = α(a+ x+y+c), 简单计算可知, 模拟测零过程只需要完成变换:

                                         (a,b,c, x,y) 7→ (4a+3x+3y,b−1,c−3a−3x−3y, x,y)              (19)
                                                                           a、x、y 计算正确即可. 这需要额外引
                   c 的作用是和   a、x、y 互补, 它的行为由其他计数器确定, 设计程序时确保
                 入辅助计数器     t, 新的  zero-test( x) 模块如图  18  所示, zero-test( y) 同理.

                                                  loop  a -=1,   c -=1,  t +=2;
                                                  loop  y -=1,   x +=1,   c -=1,  t +=1;
                                                  loop t -=1,   c -=1,   a +=2;
                                                  loop  x -=1,   y +=1,   c -=1,   a +=1;
                                                  b -=1;
                                                     图 18 zero-test( x)

                    若格局   α 满足  α(a+ x+y+t)4 α(b)  ⩽ α(a+ x+y+c) 则称为合法的; 若该式子取等且    α(t) = 0, 则称其为好的. 考
                                       zero-test(x)
                 虑从合法格局出发的执行         α −−−−−−−→ β, 易知  β 是合法的; 若   β 是好的, 则   α 也是好的, 且  β(x) = α(x) = 0, β(y) = α(y),
                                                                                   zero-test(x)
                 说明待测零计数器确实是          0  且没有副作用; 若   α  是好的并且满足     α(x) = 0, 则存在  α −−−−−−−→ γ  使得  γ  是好的, 且
                                                                               c = 0 是否成立, 可以推断出终止
                 γ(y) = α(y), γ(x) = 0, 说明本次模拟测零正常运行且没有副作用. 最终通过检验
                 格局是否是好的, 进一步确定程序中           B 次模拟测零是否成功.
                    接着考虑    F d (n)-放大器的构造. 若初始格局为       τ s = (a,b ,c ,A,B,X 1 ), 计算  τ t = (a,b,c,A ,F d (B))  的过程需维持
                                                                                       ′
                                                               ′
                                                                 ′
                    ′       B                                         ′            ′  F d (B)  B      ′
                 a+c +c = A·4 , 这样可以充分利用    τ s  进行一些模拟测零等行为, 直至     c = 0. 最终根据  A ·4  = A·4  可以确定   A =
                 A·4 B−F d (B) . 考虑快速增长函数的等价定义:  F 1 (n) = 2n−1, F k+1 (n) = F  (n−1)  (1), 首先构造  F 1 (n)-放大器  Ampl 1 = (P 1 ,X 1 ,
                                                                     k
                                                   ,
                                                          ,
                 (a,b ,c ),(a,b,c),Z 1 ), 其中,  X 1 = {a,b,c,b ,c ,t} Z 1 = {c } P 1  如图  19  所示.
                                               ′
                                                         ′
                      ′
                    ′
                                                 ′

                                         loop a -=1,  t +=1;   loop a -=1,  t +=1;
                                         loop t -=1,  a +=1,  c′ -=3,  c +=3;  loop t -=1,  a +=1,  k c + ′  1 -=3,  k c′ +=3;
                                         b′ -=1,  b +=1;        k b + ′  1 -=1,  k b +=1;
                                         loop                  loop
                                          loop a -=1,  t +=2,  c′ -=1;  loop a -=1,  t +=1;
                                          loop c -=1,  a +=2,  c′ -=1;  loop t -=1,  a +=4,  k c + ′  1 -=3;
                                          loop a -=1,  c +=2,  c′ -=1;  loop c -=1,  k c′ +=4,  k c + ′  1 -=3;
                                                                   k
                                          loop t -=8,  c +=15,  c′ -=8,  a +=1;  loop b -=1,  k b′ +=1;
                                                                   k
                                          b′ -=1,  b +=2;        k P ; b + ′ -=1;
                                                                   k
                                                                    1
                                                 P 1                   P k+1
                                                  图 19 F d (n)-放大器的构造

                                                   ′
                                                                           ′
                                    ′
                       P 1  的核心框架是“  b  −=1,  b +=1; loop  b  −=1,  b +=2;”, 这一部分可以  {b } -计算出正确的  F 1 (B). 而最终需要得
                    ′
                                         ′
                 到  A = A·4 1−B , 因此在第  1  处  b  −=1  无须修改   a, 后续循环中每次令   a 7→ a/4 即可. 为了成功地执行对  a 的变换, 可
                                                                                                   ′
                 以借助初始格局给出的三元组          τ s , 因此  P 1  中除核心框架外的部分本质上是在利用三元组保证程序的任意               {c } -执行
                 (也是一个{b'}-执行) 中对    a 的变换达到了预期要求.
                                       (    (     )         )             {     }         {  }
                                               ′  ′                        ′   ′  ,         ′  , 则我们可以
                    若已经得到了      Ampl k = P k ,X k , a,b ,c ,(a,b k ,c k ),Z k , 定义  X k+1 = X k ∪ b k+1 ,c k+1  Z k+1 = Z k ∪ c k+1
                                               k
                                                 k
                                                (
                                         (
                 得到  F k + 1 (n)-放大器  Ampl k+1 = P k+1 ,X k+1 , a,b ′ k+1 ,c ′ k+1  ) ,(a,b k ,c k ),Z k+1 , 其中,  P k+1  如图  19 所示. 构造框架完全与图  11
                                                                    )
                                                 (              )
                                              τ s = a,b ′  ,c ′  ,A,B,X k+1  确保程序中的操作  loop  b k  −=1,  b  +=1; 执行成功,
                                                                                           ′
                 一致, 在细节上则和      P 1  相似, 即使用       k+1  k+1                               k
                 便于利用   P k  进行下一次放大.
                    最终, 我们构造出了一族        F d (n)-放大器  {Ampl d } d∈N . 易知  |X d | = 2d +4 |Z d | = d, 由于  b  只会减少, 因此在后续使
                                                                        ,
                                                                                    ′
                                                                                    d
   24   25   26   27   28   29   30   31   32   33   34