Page 330 - 《软件学报》2021年第6期
P. 330

1904                                     Journal of Software  软件学报 Vol.32, No.6,  June 2021

         equal 策略使该目标转化为两部分各自相等的子目标.若对其内部继续进行归纳化简,证明会变得更加复杂繁
         琐.因此面对该问题时,我们分析了问题出现的原因并且发现重新思考与 rev 函数相关的函数定义,在该例子中
         即为单位矩阵生成函数的定义.
             因此,我们不采用文献[3]中所定义的单位矩阵生成函数.虽然该函数产生结果满足我们的要求,但其内部构
         造不利于有关单位矩阵的性质证明.因此,我们对其单位矩阵生成函数进行了修改.对于 list_i 函数,我们不决定
         修改,原因在于该函数满足我们的要求,并且没有在证明过程中产生阻碍.我们对单位矩阵的二维表的生成函数
         做了以下修改.
             Fixpoint dlist_i′ m n i:=
               match m with
               |O⇒List.nil
               |S m′⇒List.cons (list_i n (S i)) (dlist_i′ m′ n (S i))
               end.
             dlist_i′函数的作用是产生一个行数为 m、每行长度为 n 的二维表,dlist_i′ n n 0 即为 n 阶单位矩阵(二维表
         类型).在完成函数的构造后,对该函数输出结果(二维表)的高度以及宽度进行等价性证明.下面是对该函数进行
         的测试部分,如图 26 所示.
             Compute (dlist_i′ nat 0 1 3 3 0) (构建 3 阶单位矩阵):
                                           = [ [1; 0; 0]; [0; 1; 0]; [0; 0; 1] ]
                                            :list  (list nat )
                                       Fig.26   Test result of dlist_i′ fucntion
                                          图 26   dlist_i′函数测试结果
             经过测试,我们可以看到,该函数所产生的二维表满足单位矩阵的特性.利用上述函数以及性质,将 dlist_i′封
         装成单位矩阵生成函数 MI,如下:
              Definition MI n:=let ma:=dlist_i′ n n 0 in mkMat A n n ma (height_dlist_i′ n n 0) (width_dlist_i′ n n 0).
             在上述无 rev 函数定义的单位矩阵生成函数定义下,对引理(1)进行展开化简,得到如下引理:
                   Lemma dlist mul unit _ :l′  forall m n  (ma list (list A )), height ma =  m →  width ma n →
                                _
                            _
                                                   :
                                                                                              (6)
                                                ′
                           _
                        _dl mul dl    A Zero  add    mul  (dlist  _    i A Zero  One      0) m m  gettrans    A Zero  ma  n =  ma .
             为了使证明更加简单,我们利用转置函数的特性对该引理进行化简,如下:
                                _
                            _
                   Lemma dlist mul unit _ :l′  forall m n  (ma list (list A )), height ma =  m →  width ma n →
                                                   :
                                                                                              (7)
                                                ′
                        _dl mul dl    A Zero  add    mul  (dlist  _    i A Zero  One      0) n n  ma =  gettrans    A Zero  ma   .n
                           _
             下面对该引理进行归纳证明.对变量 n 进行归纳证明时,得到一个子目标如下:
                                                  _ ′
                              _
                        dl  _ mul dl A Zero add mul  (dlist i A Zero One n  (S n )  1) ma =
                                                                                              (8)
                                                    ′
                        dl  _ mul dl    A Zero  add   mul  (dlist  _    i A Zero  One      0) (n n  tailcolumn    A ma )
                              _
             观察该子目标发现,需要将 dlist_i′ A Zero One n (S n)进行化简.但利用已有函数无法进行化简,因此需要构
         造新的函数 link1 来辅助该化简证明.该函数的作用是将一个表左接于一个二维表,其实现原理如图 27 所示.

                                  Fig.27   Implementation principle of link1 function
                                          图 27   link1 函数实现原理
   325   326   327   328   329   330   331   332   333   334   335