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

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


                                                                                       )
                    F 1 (n)-放大器的构造是平凡的, 例如图         9               Ampl 1 = P 1 ,X 1 , a ,b ,c ,(a 1 ,b 1 ,c 1 ),Z 1 , 其中,
                                                                           (
                                                                                 (
                                                                                                  )
                                                                                  ′
                                                                                    ′
                                                                                      ′
                                                            P 1  给出了
                                                      中程序
                                                                                  1  1  1
                                        {
                                                 }
                     {
                                   }
                 X 1 = a 1 ,b 1 ,c 1 ,a ,b ,c ,t 1 ,  Z 1 = a ,b ,c ,t 1 . 容易验证其满足放大器的性质, 因为  F 1 (n) = 2n Ampl 1  是  F 1 (n)-放大
                                                                                       ,
                            ′
                                            ′
                                          ′
                                 ′
                               ′
                                              ′
                            1  1  1       1  1  1
                                             t 1 , 但为了后文叙述方便, 还是假设存在这样一个计数器.
                 器. 这里根本没有使用到辅助计数器
                                                                                   )
                                                                             (
                                                                        (
                                                                                              )
                                                                               ′
                                                                                 ′
                                                                                   ′
                    假设对某个     k ⩾ 1, 我们已经得到了一个        F d (n)-放大器  Ampl k = P k ,X k , a ,b ,c ,(a k ,b k ,c k ),Z k , 其中,  Z k =
                                                                               k  k  k
                 a ,b ,c ,t , 需构造出一个  F k + 1 (n)-放大器. 由于计数器程序表达能力有限, 直接构造难度较大, 不妨先构造一个测
                 {       }
                        ′
                  ′
                    ′
                      ′
                  k
                        k
                    k
                                                                         {
                                                           {
                 零计数器机器. 考察图      9              P ′   Z k+1 = b ′  } ,  X k+1 = X k ∪ a ′  ,b ′  ,c ′  } .
                                    中的计数器机器
                                                  k+1  , 令   k+1          k+1  k+1  k+1


                                                             k b′ +=1;
                                          loop               loop a′ +=1,  k c′ +=1;
                                                                k
                                            1 a′ -=1,  1 a +=1;  loop
                                          loop                 k P  ; zero? a′ , b′ , c′ , t ; k
                                                                         k
                                                                     k
                                                                       k
                                            1 b′ -=1,  1 b +=2;  loop a -=1,  k a′ +=1;
                                                                  k
                                          loop                loop b -=1,  k b′ +=1;
                                                                  k
                                            1 c′ -=1,  1 c +=2;  loop c -=1 ,  k c′ +=1;
                                                                  k
                                                              zero? a , b , c ; b + ′ -=1;
                                                                  k  k  k  k  1
                                                P 1                  P′ k+1
                                                图 9   F d (n) -放大器的递归构造

                    ● 假设某   Z k + 1 -执行从格局乘法三元组    τ s = a ′ k+1 ,b ′ k+1 ,c ′ k+1  ,A s ,B,X k+1  出发, 则前两行可以对任意  A 0 ∈ N 构造乘
                                                      (
                                                                        )
                            (            )
                              ′  ′  ′          Ampl k  是                                    τ = (a k ,b k ,c k ,A ,
                                                                                                       ′
                                                                                             ′
                 法三元组    τ 0 = a ,b ,c ,A 0 ,1,X k ; 因为   F k (n)-放大器, 对  Z k  的测零保证执行  P k  后得到
                              k  k  k                                                        0         0
                 F k (1),X k ), 随后的  3  个循环配合对  a k 、b k 、c k  的测零使得下一次执行  P k  前格局为  τ 1 = a ,b ,c ,A 1 ,F k (1),X k , 其中,
                                                                                   (
                                                                                                   )
                                                                                    ′
                                                                                        ′
                                                                                      ′
                                                                                    k  k  k
                      ′                                                  (  ′  ′  ′       )
                 A 1 = A ; Z k + 1 -执行保证了最终  P k  被准确执行  B 次, 从而终止格局为  τ B = a ,b ,c ,A B ,F k+1 (B),X k .
                      0
                                                                          k
                                                                              k
                                                                            k
                                                         A B−1 ∈ N  使得  Z k -执行一次第  2  个  loop  语句的循环体可以从
                    ● 相反, 给定   A B ∈ N, 由   Ampl k  的性质知: 存在
                      (                  )         (                 )
                                                                            ′
                 τ B−1 = a ,b ,c ,A B−1 ,F  (B−1)  (1),X k  计算出  τ B = a ,b ,c ,A ,F (B) (1),X k , 其中,  A ⩾ A B . 不断向前推导可知, 最终存在
                                                            ′
                                                         ′
                       ′
                         ′
                           ′
                                                     ′
                                                       ′
                       k  k  k    k                  k  k  k  B  k          B
                                                                                  (
                 A 0 ∈ N   使  得  Z  k -执  行  B   次  相  关  语  句  可  以  实  现  从  τ 0 = a ,b ,c ,A 0 ,1,X k 计    算  出  τ B = a ,b ,c ,A ,F k+1 (B)   并  使  得
                                                                                                 )
                                                           (
                                                                       )
                                                                                        ′
                                                                                          ′
                                                                ′
                                                              ′
                                                                                    ′
                                                            ′
                                                                                      ′



                                                                                        k
                                                                                          B
                                                                                      k
                                                                k
                                                              k
                                                                                    k
                                                            k
                 A ⩾ A B . 若第  1  个  loop  恰好循环  A 0  次, 我们可以构造出  , 从而使得  P ′   可以  Z k + 1 -计算出  τ B .
                  ′
                  B                                         τ 0        k+1
                    目前  P ′ k+1  可以完成  F k + 1 (n)-放大器的功能, 但因其使用了测零操作故不是计数器程序. 接下来的关键是构造
                 计数器程序去模拟实现         P ′   中的两处测零语句. 这需要引入更多新计数器, 也需要更多控制计数器                    (注意, 目前
                                     k+1
                      {  }
                 Z k+1 = b ′ k+1  ). 接下来两节分别阐述基于控制计数器的方法和后续的优化.
                  3.3.1    控制计数器方法
                    本节介绍    Czerwiński 等人  [14] 是如何通过引入额外的控制计数器将图         9  中的计数器机器转换为计数器程序的.
                 此方法看似复杂, 其本质是基于一个简单的事实: 若干个非负整数之和为                      0  当且仅当每个整数都为       0. 在第  4  节中,
                 我们还能看到该方法的其他相关应用.
                    考虑图   9  中的  P ′  , 其中对   a k  等计数器进行了多次测零, 故考虑: 若对单计数器       a 进行了   次测零, 至多需要
                                                                                         k
                                 k+1
                                                               α 0 ,...,α k−1 , 则这次执行可以表示为:
                 引入多少控制计数器才能完成模拟? 假设测零前格局分别为

                                               zero?, +d 1  zero?, +d 2  zero?, +d k−1  zero?
                                            α 0 −−−−−−→ α 1 −−−−−−→ ... −−−−−−−→ α k−1 −−−→ 0         (9)
                                                               ′
                                                               a
                                                                                        ′
                    平凡的方式是每次测零后不再修改             a 并引入一个副本  , 将剩下对        a 的操作都转移到     a  上. 但这样需要线性
                                                                             ∑ k−1
                 个计数器, 对下界的证明十分不利. 注意, 所有计数器的值都是非负的, 因此                          α i (a) = 0  当且仅当  α i (a) = 0 对
                                                                               i=0
                                                         ∑
                                                           k−1
                                                    t
                                                                        t
                 0 ⩽ i ⩽ k −1 都成立, 我们只需使用辅助计数器   记录          α i (a), 最终对   测零即可. 应用阿贝尔变换得到:
                                                           i=0

                                         ∑
                                            k−1
                                                                                                     (10)
                                              α i (a) = kα 0 (a)+(k −1)d 1 +(k −2)d 2 +...+d k−1
                                            i=0
                    因此可以仅使用一个额外的维度按如下方式完成记录:

                                                                                     
                                                        
                                                                              α k−1  
                                α 0   zero?, +d 1   α 1   zero?, +d 2  zero?, +d k−1     
                                                                                 
                                                                                   −−−→ 0       (11)
                                     −−−−−−→             −−−−−−→ ... −−−−−−−→  ∑ k−1  
                                                                           
                                                                                 
                               kα 0 (a)  +(k−1)d 1  kα 0 (a)+(k −1)d 1  +(k−2)d 2  +d k−1    α i (a)   zero?
                                                                               i=0
                    此方法被称作控制计数器方法           (controlling counter technique) [14] , 并且可以推广到多个计数器测零次数已知的
                 情形上.
   16   17   18   19   20   21   22   23   24   25   26